writing plans
a plan is the spec translated into steps an executor follows without judgment calls — a skilled developer who knows nothing about this codebase and has questionable taste; everything they need is on the page.
what it teaches
- header (goal, architecture, stack, spec link) plus global constraints copied verbatim from the spec — every task inherits them.
- tasks sized to one deliverable with its own verification cycle.
- steps of one action each: write the failing test, run it, write minimal code, run it, commit.
- every task declares its files (exact paths) and interfaces (consumed from earlier tasks, produced for later ones, with signatures). executors see only their own task; the interfaces block is how they learn the neighbors' names.
why it exists
plans fail through placeholders: "Add appropriate error handling," "similar to Task N," "TBD" — each delegates a judgment call to an executor lacking the context to make it, and that is where implementations drift.
the rules
- no placeholders — actual code, actual paths, actual commands.
- DRY, YAGNI, TDD, frequent commits.
- self-review after writing: spec coverage, placeholder scan, type consistency across tasks.
- the spec travels with the plan; the plan argues from it.
when to use
when a spec or requirement set exists for multi-step work, before touching code. the plan is the last artifact a human shapes alone and the first an executor can run mechanically.
good and bad
bad
task 3: add appropriate validation
the executor must invent schema ownership, failures, and verification. shipped behavior depends on who executes the plan, not on the approved spec; the drift is invisible at review (each local choice looks reasonable) and surfaces only when the pieces meet.
good
task 3: add CreateWorkflowInputSchema in contracts/workflow; parse at the route;verify malformed input returns the stable correction diagnostic
exact path, boundary, behavior, and command-level proof. with no judgment calls left in the steps, any executor — human or subagent, zero codebase context — produces the same implementation, and each verification is a mechanical check, not an interpretation. that is what makes handoff cheap: planning effort converts directly into unsupervised execution.