Turn a vague idea into an executable plan the assistant can follow — without wandering.
Module 3 · Decide what to build, before you build it.
Beginner Planning Includes Lab ~45 minSPEC.mdSPEC.md for the snippet vault, with the AI drafting and you decidingPrerequisites: Module 2 — the snippet-vault repo with its scaffold and context file.
Vibe coding without a plan feels fast — for about twenty minutes. Then the assistant starts guessing what you meant, adds things you didn't ask for, contradicts an earlier choice, and you're firefighting instead of building. A spec is simply the decisions made once, in writing, so neither you nor the AI has to re-guess them.
| Without a spec | With a spec |
|---|---|
| The AI invents scope you never wanted | Scope is fixed and visible — easy to say "not now" |
| "Done" is a feeling, argued about later | "Done" is acceptance criteria you can check |
| Context rot: the model forgets earlier decisions | The spec is durable memory the model re-reads |
| One giant vague prompt, unpredictable result | Small tasks sliced from the plan, one at a time |
It's a short, living SPEC.md in your repo — a page or two. It's the shared contract between you and the assistant. You'll update it as you learn; that's expected. Its job is to make "what are we building?" answerable at a glance.
Keep it lightweight. Six sections cover almost any small app:
| Section | Answers |
|---|---|
| Problem & goal | What are we solving, and for whom? |
| User stories | What can a user actually do? |
| In scope / Non-goals | What we will — and explicitly won't — build now. |
| Data model | The core things we store and their fields. |
| API / screens | The endpoints or pages that deliver the stories. |
| Milestones | The order we'll build it in, smallest useful slice first. |
Here's the skeleton you'll fill in during the lab:
A user story captures one thing a user can do, from their point of view, plus how you'll know it works. The classic shape:
As a [who], I want [what], so that [why].
Then: Acceptance criteria — the checkable conditions for "done".
For the snippet vault:
Those acceptance lines aren't bureaucracy — they become your test cases in Module 6, and they tell the assistant exactly when to stop. "Done" stops being an argument.
Never hand the assistant the whole spec and say "build it." Slice into thin vertical milestones — each one a small, working, shippable increment. Build the smallest useful thing first (your MVP), then layer on.
The fastest way to finish is to build less. Every "wouldn't it be cool if…" goes under Non-goals, not into M1. You can always promote a non-goal later — but a bloated first milestone is how projects stall.
Great use of the assistant: give it your brief and the skeleton, and ask it to propose user stories, a data model, and a milestone slice. Then you edit — cut scope, fix the model, reorder. The AI is a fast drafter; the product decisions stay yours.
You'll produce a real SPEC.md — AI-drafted, you-decided — with user stories, acceptance criteria, a small data model, and a milestone slice. You'll hand in the committed spec.
Your snippet-vault repo from Module 2 (scaffold + context file), and your assistant.
In your own words: what problem the snippet vault solves and who it's for. Two or three sentences is plenty.
Paste this, then review what comes back:
Edit the draft. Move anything non-essential to Non-goals. Keep 3–5 user stories, each with concrete acceptance criteria. Confirm the data model is just Snippet: id, title, language, code, createdAt.
Order the work smallest-useful-first as a checkbox task list (M1 create+list, M2 search, M3 delete…). This list drives every remaining module.
Then add to REFLECTION.md: which non-goal did you cut to keep M1 tiny, and one place the AI's draft over-scoped that you trimmed? Commit it.
Your snippet-vault repo with SPEC.md. Self-check before submitting:
SPEC.md has all six sections, MVP kept tiny| Term | Plain meaning |
|---|---|
| Spec | A short living document of what you're building and why (SPEC.md). |
| User story | One capability from the user's view: as a … I want … so that … |
| Acceptance criteria | The checkable conditions that make a story "done". |
| Non-goal | Something you deliberately choose not to build now. |
| Milestone / slice | A thin, working increment you can build and ship on its own. |
| MVP | Minimum viable product — the smallest version that's actually useful. |
A committed SPEC.md: the problem, user stories with acceptance criteria, a tiny data model, an API surface, and a milestone slice. The assistant now has a durable contract to build against — and you have a definition of "done".
Next up: Module 4 — Version Control from Line One. Before we build M1, we sharpen the Git habits — branches per milestone, clean commits, and reviewing every AI-generated diff like a pull request.