I've been thinking that in an ideal world math classes would be self-paced, with a student being required to demonstrate mastery in a collection of topics and techniques in order to complete the course. Some students might complete the course much faster than others, and the slower students would not be forced to try to learn more advanced material when they are still struggling with the basics.
The difficulty with implementing this idea is: how do you check whether the student has mastered a given topic? They could take an exam, but if they don't do well on the exam what then? I suppose then they would take a different exam which covers the same topics. The student might end up taking 5 exams or more on the same topics before they demonstrate mastery. This poses a practical problem, as it would be difficult to create so many exams and also difficult to grade so many exams.
In the Khan Academy learning system (at least when I tried it out several years ago) students demonstrated mastery by getting a sufficiently long streak of questions correct. For example, if they get ten chain rule questions correct, then they have demonstrated mastery. This wasn't a perfect system, but it was at least an interesting step towards practical self-paced math courses.
Question: Has there been much discussion or research on how students can demonstrate mastery so that self-paced math courses can be implemented in a practical way? What are some of the ideas people have come up with? Have there been any efforts to create large banks of exams that can be used for self-paced math courses?