Skip to content
All posts

Most Dev Courses Don't Work — Here's What Actually Does

Finishing a course and being able to build something are two different skills. Most courses only train the first one.

Nathan Levine

3 min read

Most Dev Courses Don't Work — Here's What Actually Does

There's a specific feeling every developer who's binged online courses knows well: you finish a 12-hour course, feel like you understand the topic, and then sit down to build something real and freeze on the first decision. That gap isn't a personal failing — it's what most courses are actually optimized for, and it's not the thing you think you're learning.

Courses optimize for completion, not capability

Most course platforms measure success by completion rate, so most courses are built to be finishable — clear steps, code you can follow along with, a working result at the end. That's a fine way to learn that something is possible. It's a bad way to learn how to do it yourself, because following someone else's steps and generating your own steps are different skills, and only one of them transfers to a real job.

You can tell the difference by the test: can you close the course and rebuild the project from a blank file, using only the concepts, not the transcript? If not, what you retained was the instructor's decisions, not your own judgment.

What separates a course that works

A handful of things distinguish the courses that actually change what you can do:

  • It makes you fail before it shows you the answer. If a course gives you the solution before you've attempted the problem, you never build the muscle of getting unstuck — which is most of what the job actually is.
  • It explains the wrong way, not just the right one. Understanding why an obvious-looking approach breaks down is often more useful than the correct approach itself, because it's what lets you recognize the same trap in a different context later.
  • It ends in something you have to extend yourself. A course that hands you a finished project teaches you to read code. A course that hands you 80% of a project and asks you to finish it teaches you to write code.
  • It's scoped to a real constraint, not a toy one. "Build a todo app" teaches syntax. "Build a todo app that survives a page refresh, a network failure, and two tabs open at once" teaches engineering, because it forces the decisions a real product actually requires.

What to do differently as a learner

The course matters less than what you do with it:

  • Build from memory, not from the tutorial tab. Watch or read a section, close it, then try to reproduce it. The gap between what you remember and what you copied is exactly what you didn't actually learn.
  • Change one constraint immediately after finishing. Swap the database, add a feature the course didn't cover, break the happy path on purpose and fix it. That's where the actual skill lives — the course only gets you to the starting line.
  • Explain it to someone, or write it down, before moving to the next course. If you can't explain why a pattern was used, you've retained the motions, not the reasoning, and it won't transfer to a codebase that looks even slightly different.
  • Prefer fewer courses finished deeply over many courses finished shallowly. Course-collecting feels like progress because completion percentages go up. Actual capability comes from the handful you took apart and rebuilt, not the dozen you watched.

The honest measure of whether a course worked isn't whether you finished it. It's whether you could sit down in front of a blank file next week and build the thing again, with different requirements, and no tab open to check.

Thanks for reading. If this was useful, the newsletter below is the best way to catch the next one.

Keep reading

More essays