codel
← Back to the index

PRD-12 · SEC. 04 Product & Planning

Pre-Mortem the Plan Until It Stops Dying

Assume the project failed, name the killers, patch the plan, repeat until a fresh pre-mortem finds nothing new.

FORMAT
loop
DIFFICULTY
intermediate
TIME
25 min
TOOLS
universal
MODELS
any
COPIES
0 so far

When to use this

The plan or spec is written and everyone likes it, which is exactly when nobody is looking for the thing that kills it. Run this once before the plan is locked, after the goals and scope are on paper but before the first ticket is cut.

The pattern

Pastes as plain text
Run a pre-mortem loop on the plan I paste below the line (or the spec file I name instead).

Each round:
1. Assume it's six months later and this project failed badly. Write the 5 most plausible causes of death. Each cause must point at something specific in THIS plan (a named feature, dependency, estimate, or assumption), not a generic risk like "ran out of time."
2. Rate each cause LIKELY, POSSIBLE, or STRETCH.
3. For every LIKELY cause, patch the plan with a concrete change: cut scope, add a checkpoint, reorder work, or add a fallback. Show each patch as old line, then new line.
4. Re-run the pre-mortem against the patched plan. Causes already patched don't count as new.

Exit condition: one full round finds zero new LIKELY causes. STRETCH causes never block exit, collect them in a final "accepted risks" list instead.
Hard cap: 4 rounds. If you hit the cap and LIKELY causes keep appearing, stop and say the plan is overcommitted, not patchable, and name the piece you'd cut first.

Paste the plan below this line:

Real example output

"ROUND 1: LIKELY: 'Marketplace payouts estimated at 2 days, but Stripe Connect onboarding needs identity verification, typically 1-2 weeks per seller cohort.' Patch: old 'Milestone 1: payouts live', new 'Milestone 1: manual payouts via admin, Connect moves to Milestone 2.'

ROUND 2: LIKELY: 'Manual payouts assume an admin queue that appears nowhere in the ticket list.' Patch: added 'Admin payout queue (size M)' to Milestone 1.

ROUND 3: zero new LIKELY causes. Exiting after 3 rounds.

ACCEPTED RISKS (STRETCH): App Store review rejects the external checkout link. Seller cohort 1 is smaller than the 50 assumed in the revenue goal."

Why it works

Asking "what could go wrong" gets polite answers, asking "why did this die" gets specific ones, because the model has to work backward from a failure instead of defending the plan. The loop matters as much as the question: each patch gets re-attacked in the next round, so fixes that quietly create new failure modes get caught before the plan is locked.

Entry PRD-12 · by codel · 2026-07-09 · CC-BY-4.0