Most tutorials are designed to be finished. Ours are designed to be attempted. That is a small wording change with a large consequence for how a lesson gets written.
The copy-paste trap
A learner can read a perfect explanation, copy a perfect example, and still be unable to solve a slightly different problem. The feeling of understanding arrives before the ability does. We treat that gap as the central design problem.
What a good challenge looks like
- It uses the same concept in a new situation, not the same situation with new text.
- It has a visible result, so success is not a matter of opinion.
- It has a hint that narrows the problem without giving the answer.
- It has a reference solution that explains the trade-offs, not just the code.
In the HTML Foundations course, the forms lesson teaches labels and input types. The challenge asks the learner to add an email field with built-in validation. Nothing is copied: they have to apply the pattern to a new control and reason about autocomplete.
Why hints are not cheating
A hint is a teaching tool, not a failure state. The best hint names the concept the learner is missing, then gets out of the way. “Use a media query” is better than a full code snippet; it converts a stuck moment into a retrieval moment.
The goal is not to make learners suffer. It is to make the moment of success mean something. Difficulty is a means; understanding is the outcome.
Corrections and technical review are welcome. Tell us what we missed.