The completion-rate problem
Almost nobody finishes online courses, and the numbers are worse than most people assume.
The most careful public look at this is Reich and Ruipérez-Valiente's The MOOC pivot, published in Science in 2019, which analysed several years of edX data across HarvardX and MITx. Their finding: 3.13% of participants completed their course in 2017–18, down from roughly 4% in the two preceding years and close to 6% in 2014–15. Just as striking, 52% of people who registered never started the course at all.
Those are university MOOCs rather than commercial coding platforms, and the comparison is not exact — commercial platforms rarely publish completion data, which is itself informative. But the shape of the finding is consistent with what anyone who has bought a course already suspects, and it is the best-sourced figure available.
The interesting question is not that the number is low. It is why the same course produces such different outcomes in different people. The usual explanations — motivation, time, discipline — are real but incomplete, and they conveniently locate the failure entirely in the student.
Two ways a fixed curriculum misses
A course written for everyone has to choose a starting point. Whatever it chooses is wrong for most of the people who take it, and it goes wrong in two opposite directions at once.
Too easy for too long. You already know the first third. You sit through variables, loops and conditionals for three weeks waiting to reach something you cannot already do. Nothing about this is difficult, so nothing about it is engaging, and at some point a week passes where you do not open it. You do not quit in frustration — you drift out through boredom, which is quieter and therefore harder to notice or fix.
Too hard too fast. You are missing a prerequisite the author assumed. Module four references something explained in a different course, and suddenly nothing lands. Because the material is presented as the standard path that everyone follows, the natural conclusion is that the problem is you. That conclusion pushes a lot of capable people out of programming entirely.
Here is the part that makes this structural rather than fixable by better writing: the same course does both, to different people, simultaneously. Every editorial decision that helps one group hurts the other. Slow down for the strugglers and you lose the bored. Speed up for the bored and you lose the strugglers. There is no version of the course that is correctly pitched for everyone, because the audience is not one group.
Why the difficulty has to sit just above your level
The underlying idea is old and fairly intuitive: people learn most efficiently at the edge of what they can currently do — where a task is out of reach alone but achievable with effort, or with some support.
Below that edge, you coast. The work is comfortable, you complete it correctly, and you gain almost nothing, because nothing forced you to build a new representation. Above it, you flounder. The gap between what the task needs and what you have is too large to bridge, so you either copy without understanding or stop.
The band that works is surprisingly narrow, and — this is the important bit — it is different for every person, and it moves as you learn. Where your edge sits today depends on what you already know, which parts of it are solid, and which are half-remembered. Two people with the same job title and the same years of experience can have edges in completely different places.
A fixed curriculum can only place that edge correctly for the narrow band of readers it was written for. Everyone else gets material aimed somewhere other than where they are standing. Not because the author was careless, but because the author had to pick one place to aim.
Why platforms build them anyway
It would be easy to read all this as an accusation of laziness. It is not. The economics make fixed curricula close to inevitable.
Hand-authored course content has a large fixed cost. Writing, recording, editing, reviewing and maintaining a serious course takes months of skilled work. That cost is identical whether ten people take the course or ten million, which means the only way to make the numbers work is to amortise it across as many students as possible.
You maximise that audience by aiming at the median. Not at the strongest students, who are few and will manage anyway. Not at the weakest, who need more support than the format can deliver. At the middle — the largest single band of the distribution.
That is a rational response to the constraint, and the good platforms do it well. The problem is that it produces a product whose failure mode is invisible to the producer. The students who drift out through boredom and the ones who hit a wall both simply stop showing up. Neither files a complaint saying "this was pitched at the wrong level for me." They conclude they were not cut out for it, and the completion rate quietly absorbs both.
What adapting actually requires
"Personalised learning" is a phrase attached to a lot of products that mostly just remember your progress bar. If it is going to mean anything, it has to do four specific things.
1. Assess what you already know before choosing content. Not a quiz that gates you into beginner, intermediate or advanced — three buckets are barely better than one. Something closer to which specific concepts are solid, which are shaky, and which are absent. Most people are uneven: comfortable with functions and vague on scope, fluent in syntax and lost on data modelling.
2. Let you skip without penalty. If you already know it, you should be able to move past it without unlocking conditions or losing the thread. Sequential unlocking exists to drive engagement metrics, not comprehension.
3. Adjust depth when something is not landing. The response to a struggling learner should be different material — a different explanation, a smaller step, more practice — rather than the same video played again.
4. Calibrate practice to your current level, not the average one. This is where fixed courses fail most obviously. Exercises are the part that actually builds recall, and an exercise that is trivial for you builds nothing at all.
Notice that all four require knowing something about the individual student before the content is chosen. That is precisely what a pre-written course cannot do.
Doing it yourself
You do not need a platform for this. Plenty of good developers have done it manually, and the method is not mysterious.
Audit your knowledge honestly. Take a topic list for the language you are learning and mark each item: can do without looking it up, can do with a reference, could not do. The middle category is the one people misjudge — being able to follow an explanation is not the same as being able to produce the thing, and the difference only shows up when you try.
Build the sequence yourself. Order the gaps by what unlocks the most. Some concepts are load-bearing — in Python, understanding mutability changes how a dozen other things make sense; in JavaScript, the event loop does the same. Do those first, even if they feel harder than the alternatives.
Use courses as reference rather than as a path. Buy the course, watch the three modules that cover your gaps, ignore the rest. This feels wasteful and is not — you are paying for the explanation you need, not for permission to consume the whole thing.
Re-audit every month or so. Your edge moves. A plan built for the person you were eight weeks ago will drift out of calibration.
The honest costs: this takes real time, and self-assessment is unreliable in a specific direction — people consistently overestimate how well they know things they have read about and underestimate how much they have absorbed from things they have built. Expect to be wrong about your own gaps and to correct as you go.
Doing it with a generated course
This is our product, so treat the rest as a claim rather than neutral advice.
LearnForge exists because the audit-and-sequence process above is mechanical enough to automate. You state where you are, what you are aiming at and how much time you have, and it generates a curriculum around that rather than serving you a pre-written one — with the lessons, projects and quizzes pitched at the level you described instead of at a median student.
Who it suits: people who are past absolute zero and have uneven knowledge — the ones a fixed curriculum wastes the most time on, because a third of it is revision and they cannot tell in advance which third.
Who it does not suit: if you genuinely know nothing yet and want a single well-trodden path with a large community following it in step, a fixed curriculum is a reasonable choice, and free options like The Odin Project are good at exactly that. There is a fuller comparison in Codecademy and Udemy alternatives.
If you want to start from a specific level rather than from the beginning:
- Python: intermediate to advanced
- JavaScript: beginner to intermediate
- SQL: beginner to intermediate
- Browse all paths
Whichever route you take, the principle is the part worth keeping: the material has to be aimed at where you are standing. A course that is not is not a course you are failing. It is a course that was written for somebody else.