The Lesson-Lab Rhythm
Courses alternate between teaching and doing. Every lesson is followed by a lab that makes the learner apply what they just learned.Rules for Lesson-Lab Balance
Labs Reinforce
The learner should feel capable after a lab, not tested. Labs build muscle memory, not anxiety.
Labs Are Shorter
If the lab takes longer than the lesson, break it into smaller pieces.
Progressive Labs
Lab 2 extends what Lab 1 built. By the final lab, the learner has constructed something real.
Orthogonal Concepts
If concept C doesn’t depend on A or B, the lab can be self-contained.
Course Manifest
Courses live in~/.handhold/courses/<course-name>/:
handhold.yaml
.md files that are auto-concatenated:
Arc Design Patterns
Every course has a macro-level arc. Pick one that matches your teaching goal.The Sandwich
Problem → Mechanism → Application Open with a concrete problem the audience can feel. Explain the mechanism that solves it. Apply the mechanism to the original problem and show it working. Example (Dijkstra course):The Build-Up
Simple → Complex, one layer at a time Start with the simplest possible version. Add one layer of complexity per step. By the end, the learner has built the full concept incrementally. Example (React course):- Components (functions that return UI)
- State (making components interactive)
- Composition (combining components)
- Styling (making them look good)
- Data fetching (connecting to servers)
- Polish (design engineering)
- Capstone (all of the above in one component)
The Comparison
Naive → Better, contrast drives understanding Show the naive approach first. Establish its limitations concretely. Then show the better approach and let the contrast do the teaching.The Reveal
Show the result → Derive why it works Present something surprising or counterintuitive. Create mystery. Then work backward to explain the mechanism.Step Planning
How Many Steps?
5-9 steps per lesson. This is a cognitive load limit.- Fewer than 5 means your steps are too dense
- More than 9 means you’re trying to cover too much — split into two lessons
Each Step Has One Job
A step teaches exactly one core idea. It has:- One primary visualization (the thing you’re building or explaining)
- One aha moment (the insight that makes it click)
- A clear name that reads as part of a narrative
Plan Steps Before Writing
Write the step list first. Each step gets:- A one-sentence summary of the core idea
- The primary visualization type (code, data, diagram, preview, split)
- The aha moment in one sentence
Block Planning
List Blocks Before Writing Narration
For each step, enumerate every visualization block you’ll need:Naming Rules
Region Planning
Regions map to the concepts in your narration. Define them AFTER you know what you’ll explain, but BEFORE you write the narration. The process:
Good regions:
Code Block Sizing
| Purpose | Target Size | Notes |
|---|---|---|
| Problem example (mess) | 30-80 lines | Show scale of the problem |
| Solution code | 5-25 lines | Focused on the teaching point |
| Walkthrough trace | 6-10 lines | Short, step-by-step |
| Type definitions | 5-15 lines | Compact, scannable |
| Full implementation | 20-40 lines | Needs zoom choreography |
Preview Block Planning
Previews show what code produces. Plan them alongside code blocks:- Plan the state and interactions
- Keep the preview code simple (no build tools, no imports)
- Use
React.createElementor compiled JSX via SWC - Prefer container queries over media queries for responsive behavior
Concept Dependency Graph
Before finalizing step order, map dependencies:Steps that depend on nothing can be reordered freely. Steps with dependencies must follow their prerequisites. The capstone always goes last.
Transitions Between Steps
Each step should end with a forward hook and begin with a backward connection: End of step 3:We know how the graph is stored. Now let’s see the algorithm that traverses it.Start of step 4:
Here’s Dijkstra’s algorithm in code.The
{{clear: slide}} trigger creates the visual break. The narration creates the narrative bridge.
Writing Lessons
Master triggers, blocks, and narration
Creating Labs
Design hands-on coding exercises