My idea is that you should just give the students a second chance on each problem/task without adding any workload for yourself. The extreme scheme would be like this: you give, say, 10 quizzes of 3 problems each, but with only 15 problems total (just literally, without changing even the numbers, but, of course, with a noticeable time spacing between the identical problems and without a warning about what exactly will be repeated). Then you just use the best attempt grade on each of those 15 problems. That extreme is a bit hard to implement exactly as it is because one needs to more or less align the quiz problems with the material being covered, but you can modify it a bit in various ways so that it becomes workable. The students who solve the problem from the first attempt for the full grade do not even need to bother to try it again and may spend more time on the new ones, which is a good incentive to do things right from the beginning for those who have some common sense and elementary logic. You can also include homework or quiz problems into exams and if they are solved correctly on the exam, upgrade the initial scores.
Another idea that works in a small (10-20) people class is to give them a number of problems in the very beginning that they can submit any time during the course making as many attempts as they wish (if you do not want to endure too many attempts, you can set up a waiting period after each attempt or say that each problem can be tried at most once within the same week). When I was a student and we studied integration, we were just given a list of 100 integrals from the start some of which we didn't learn to do until later (unless one chose to study the corresponding techniques by him/herself ahead of the schedule). The submission was oral. The requirement was that by the time of the submission, the student should be able to do it without outside help (the exact way to ensure that varied but a common technique was just to write the integral on a blank sheet of paper and to let the student do the full computation in front of you). No real attempt to restrict what help the student was getting outside the classroom was made (everybody agreed that there was no point to try to control what one could not control and that the surest way to make a person dishonest is to make him/her promise absolute honesty). I use this scheme in my graduate classes all the time and in undergraduate ones quite often, though the portion of the total grade coming from such assignments is lower in the latter case.