Learning
Tutorials give you steps. Projects give you mental models.
Following instructions produces fast results. Designing without a recipe produces something that lasts longer: technical judgment.
Finishing does not always mean understanding
A good tutorial reduces uncertainty. That helps when learning a tool, but it also removes many of the decisions that build technical judgment. You can reach the result without forming a model of what happened.
The test comes when you close the tab: if the requirements change, do you know what to keep, what to change, and why?
The right kind of friction
A learning project should explain the foundation and leave the implementation decisions to you. The challenge is not guessing an API; it is connecting ideas: representing state, defining boundaries, and testing assumptions.
That friction is productive because it resembles real work. There is no perfect sequence of steps, only decisions you can justify and revise.
A simple signal
After learning something, try explaining it without mentioning the exact code you wrote. If you can describe the pieces, their responsibilities, and their tradeoffs, you built a model you can reuse.