From bug to feature CORE
The first four lessons have trained a single motion: one bug, one directed edit, one diff. That motion is the atom of Module 3. This lesson is where you learn to assemble atoms into molecules — the kind of change that is too big for a single prompt but still small enough to finish inside a two-hour session.
Feature-sized changes — “add a --dry-run flag,” “add a search box to this page,” “let the user export their data to CSV” — have a structure that single bug fixes do not. They touch multiple files. They usually have multiple parts that have to work together. They often can be broken into a sequence where each step is valuable and each step is easy to verify. That structure is the thing you are going to learn to see.
The skill has an old name: it is the ability to slice a feature. Working programmers slice features every day. You are learning to do it in partnership with an agent — which is a little different from doing it alone, because you are optimizing for what an agent can do well on each slice, and because the ordering decisions carry more weight when every slice lands in an hour instead of a day.
The scoping method CORE
Before you write a single prompt on a feature-sized change, you write a scoping doc. It is usually 200–400 words. It has five parts.
1. The goal, in one sentence. Not “add a search box” — that is the feature name, not the goal. Goal: “From the main page, a user can type into a search box and see a filtered list of only the items whose title or description matches the query, with no full page reload.” The goal is the thing you will check the final behavior against.
2. The surface area. Which files or components you think this change will touch. Three or four bullets. You do not need to be exhaustive; you need to be concrete enough that you’ll recognize surprises when the agent proposes to touch something else. “Main page component, the item list component, the API call in api/items.js, a new state variable in the app’s top-level state. Probably no backend changes — the filtering can happen in the client.” If the agent later proposes a backend change, you’ll notice — because the surface-area note did not mention one.
3. The slices. The sequence of bounded changes that add up to the feature. Each slice is one directed edit. Three to six slices is typical for a feature that fits in a two-to-four-hour session. Each slice should have a verifiable end state — something you can run or see — even if the full feature is not done until the last slice.
4. The verify signal. How you will know, at the end of each slice, that you have built what you said you would. Usually this is a test or a manual check: “slice 3 is done when I can type apple into the search box and the list filters to items with ‘apple’ in the title or description.” Write it down per slice. Vague verify signals are how tripwire 7 (weak tests) sneaks in.
5. The out-of-scope list. Things adjacent to this feature that you are explicitly choosing not to do in this plan. “Not in scope: backend search, highlighting matched terms in results, search history, keyboard shortcuts.” The out-of-scope list is how you neutralize scope creep in advance — when the agent proposes to do one of those things, you have a written-down reason to say no.
Writing the scoping doc takes fifteen to thirty minutes. On a two-hour feature it pays for itself five times over.
Directing across slices CORE
Once you have a scoping doc, the work is a sequence of directed edits. The shape is the same Module 3 motion, with three cross-slice additions.
Reset the agent between slices. Especially for slices 3+, start each slice with a clean context — paste the scoping doc at the top of the prompt so the agent always knows the goal and where this slice fits. This neutralizes tripwire 8 (session drift) across the feature; you are not relying on a three-hour rolling context to hold the plan.
Commit after every slice. Even if the slice is small. Small commits mean each slice’s diff is reviewable on its own, and the recovery path from Lesson 3.4 — revert if something is wrong — stays cheap. Feature branches that land as one massive commit are unreviewable and unrevertable; they are not what this course teaches.
Adjust the plan as you learn. The scoping doc is a first draft, not a contract. If slice 2 reveals that slice 4’s assumption was wrong, update the doc. This is not “scope creep” — it is planning honestly. The difference is whether the change is written down. If you modify the doc and note why, you are still directing. If you just drift, you are not.
When the agent’s first draft of the plan is useful CORE
Here is a small secret: you do not have to write the scoping doc alone. You can get an agent to draft one, and then edit it.
The prompt is: “Here is the feature I want to add: [paragraph]. Here is the codebase structure: [paste or describe]. Propose a scoping doc with goal, surface area, slices, verify signals, and out-of-scope list. Do not write any code yet — just the plan.”
The agent’s first draft will usually be 70% right. It will often get the surface area approximately correct, propose a reasonable slice sequence, and surface at least one out-of-scope candidate you had not thought of. It will also sometimes miss a slice, propose a scope that is too large, or assume a piece of infrastructure that does not exist.
Your job with the agent’s draft is to edit it like you would edit anyone’s first draft. Check each slice against the “stops in a working state” test. Tighten the verify signals where they are vague. Add to the out-of-scope list. Reorder when the slicing is wrong. This takes ten minutes and produces a much better doc than either you or the agent alone.
The fact that an agent can write a first-draft plan is a big deal. It means your scoping muscle is about review and revise, not just blank-page generation — which lowers the cost of the scoping step and makes the scoping doc habit much easier to keep.
Done with the hands-on?
When the recipe steps and any activity above are complete, mark this stage to unlock the assessment, reflection, and project checkpoint.
Key concepts CORE
- Feature-sized changes are assemblies of slices. Each slice is a directed edit with a verifiable end state; the system should work after every slice.
- A scoping doc has five parts: goal, surface area, slices, verify signals, out-of-scope list. 200–400 words is enough.
- The scoping pattern that works on most features is scaffold → path-through → polish.
- Reset the agent’s context between slices. Start each slice with a clean chat or session and paste the scoping doc.
- Commit after every slice. It makes every diff independently reviewable and keeps recovery cheap.
- The agent can draft the scoping doc. You edit the draft; that is the real skill.
Quick check CORE
Four questions. Click each to reveal the answer and the reasoning.
- There are too few slices; login deserves at least five.
- Slices 1 and 2 alone leave the system not working end-to-end; a user cannot actually log in until slice 3. Better slicing would do the path-through (a working form that logs a user in, even with ugly UI) before the polish.
- Slice 3 is out of scope for this feature.
- The slices should be alphabetized.
Show explanation
Answer: B. The scaffold → path-through → polish pattern from this lesson is exactly the fix. The proposed slicing does polish before path-through, which produces a long stretch where nothing works end-to-end and where the agent (and you) are making decisions without being able to verify them. (A) is a guess at the wrong axis. (C) gets the scope call wrong. (D) is absurd and there to catch skimmers.
- It is a Code-tab-specific quirk.
- It neutralizes tripwire 8 (session drift) across a multi-slice feature — the context is always clean and the scoping doc is re-introduced at each step.
- It makes the agent run faster.
- It is just a nice habit; not required.
Show explanation
Answer: B. Session drift is exactly the failure mode that gets worse with slice count. Pasting the scoping doc at each slice trades a small amount of typing for a big reduction in accumulated context noise. (A) is wrong — this applies to every coding agent. (C) may be true as a side effect but is not the reason. (D) understates the value.
- Accept; small adjacent wins are fine.
- Decline; JSON output is explicitly out of scope for this plan. If you want it, write a new scoping doc for it after this feature ships.
- Negotiate; accept it only if the agent can keep the diff under 20 lines.
- Ask the agent to pick — it has better context.
Show explanation
Answer: B. The out-of-scope list exists precisely for this case. Accepting “small adjacent wins” is how every feature becomes a three-day odyssey; the discipline of an explicit out-of-scope list is what keeps the work bounded. (A) is the scope-creep trap. (C) is a softer version of the same trap with a cosmetic line-count gate. (D) delegates the scoping decision to the party whose job is not to scope.
- Finish slice 2, then quietly make the backend change in slice 3.
- Stop, update the scoping doc to reflect the new surface area and any re-slicing, commit slice 2, and start slice 3 from the updated plan.
- Revert the whole feature; the plan was wrong.
- Keep going; the scoping doc is only a starting point.
Show explanation
Answer: B. Updating the doc is not a failure — it is what honest planning looks like in real work. The key is that the update is written down, so future-you (reviewing the log, or reading the doc later) knows what the plan actually became. (A) is drift disguised as efficiency. (C) is over-correction. (D) leaves you with a scoping doc that no longer matches the work, which makes the doc a liability.
Reflection CORE
In 6–8 sentences, answer: What was the single hardest part of the feature you directed — not the hardest to code, but the hardest to direct? Was it the slicing, the per-slice prompting, the review, or the session discipline? What changed between your scoping doc’s first draft and the slices as they actually executed, and what does that tell you about how you tend to plan? And: how much would you trust yourself, today, to direct a feature of the same size on a codebase you did not write?
The last question is the one this module has been building to. You now have concrete practice with directed edits at three scales — single bug, deliberately hard review, feature-sized slices. Your honest answer tells you where the next practice reps should go.
Project checkpoint — freeze directed-edit-log-v1.md CORE
You did the checkpoint work as part of the recipe above. Confirm:
- ☐ /capstone/directed-edit-log-v1.md exists, has the freeze header, contains the two safety norms, the zone map, and the three entries.
- ☐ Entry 1 is the Code-tab bug fix (Lesson 3.2).
- ☐ Entry 2 is the deliberately harder review (Lesson 3.3).
- ☐ Entry 3 is the feature-sized slice sequence (this lesson), and includes the scoping doc or a link to it.
- ☐ scoping-doc.md is saved in the repo you worked in.
This is the third frozen capstone artifact in the course, after my-first-loop-v1.md (Module 1) and workstation-posture-v1.md (Module 2). You are now roughly one-third of the way through the capstone buildup for the final Module 10 project.
Instructor / parent note
This lesson is where Module 3 either clicks or does not. The success signal is not that the student shipped a good feature — the starter-repo --dry-run feature is not exactly a portfolio piece — but that they can describe what they did, why they sliced it the way they did, and what they caught in review at each slice. That description is the capstone. Two cues that the module has done its job: (1) the student’s scoping doc has been edited at least once during execution (per Q4 above), and they can tell you why; (2) the student is noticeably quicker at the four-move loop than they were on Lesson 3.2 — it has started to feel like a single motion, not four separate steps. If the student finishes Module 3 without having revised their scoping doc mid-flight, there is a good chance they did the plan and then walked away from it rather than using it. That is the behavior Module 8 will expose; it is cheaper to catch it here. One honest re-direct of the feature, with the doc in hand and revised as needed, is worth far more than a clean but mechanical execution.
Next up — end of Module 3
End-of-module check — Module 3.
Ten questions covering the four moves, the four failure modes, the zones map, and the scoping method. Passing threshold is 11.5 / 15. Then Module 4 — research agents — picks up the same directing muscle on work that is not code.