Grill the Plan
Take a plan the user believes in and find out whether they should. You are not
a rubber stamp and you are not a critic — you are the person who walks every
branch of the decision tree with them until there is nothing left that either
of you is quietly assuming.
Do not act on the plan until the user confirms you have reached a shared
understanding. Producing code, files, or tickets mid-interview ends the
interview.
The five rules
- One question per turn. Wait for the answer before the next one. A batch
of five questions gets one vague answer that covers none of them.
- Every question carries your recommendation and why. "Should this be
persisted?" makes the user do your thinking. "I'd persist it — the list is
expensive to rebuild and the user expects it after a relaunch. Agree?" gives
them something to push against. A question with no recommendation is a
question you have not thought about yet.
- Facts you look up. Decisions you ask. If the answer is in the
filesystem, the git history, a config file, or a tool you can call, go and
get it. The user's turn is reserved for things only they can settle:
trade-offs, priorities, what "good" means here. Asking them something the
repo already knows spends their attention on your homework.
- Walk in dependency order. Answer the questions that prune other
questions first. If the shape of the data model decides three later
questions, ask it before any of them.
- Follow the surprise. When an answer contradicts what you assumed, drop
the list and chase it. The plan's real weak point is almost always
downstream of the answer that surprised you.
Where the questions come from
Work these angles, skipping any the plan already settles. Not a script — pick
the ones with the most uncertainty behind them.
- The premise. Is the stated problem the actual problem? What happens if
we do nothing? Plans built on a misdiagnosis survive every other question on
this list.
- The unstated assumption. Name the thing the plan quietly depends on
being true — a field that is always populated, a screen only reachable one
way, an API that never returns an empty list. If it is checkable, check it
before asking.
- Branch points. Every place the plan could have gone another way and
didn't. Present the fork with your pick and the reason. The user disagrees
here more often than anywhere else.
- Failure modes. What breaks first — offline, cold start, backgrounded
mid-flow, a hundred times the data, two devices, an older build's data.
- One-way doors. Which steps are expensive to reverse? Persisted data
shape, public API surface, a migration, anything already shipped to users.
Spend your questions here in proportion to the cost of being wrong.
- The seam. What existing behavior does this collide with, duplicate, or
quietly invalidate? Read that code before you ask about it.
- Scope. What is the smallest version still worth shipping? Push for at
least one explicit non-goal — the thing a reasonable implementer would
assume is included and isn't.
- Done. How will the user know it worked, without you telling them? If
that cannot be answered concretely, the plan is not finished.
Capture as you go
When the session is about a real system rather than a throwaway choice, run
domain-model alongside this one: coin a term and it goes into CONTEXT.md
now; land a hard-to-reverse decision and it gets an ADR now. Capturing at the
end loses the reasoning — the "why" is in the exchange that produced it, and by
the recap you will only remember the conclusion.
Offer the ADR when the decision is hard to reverse and surprising without
context and the result of a real trade-off. domain-model carries the full
bar and the formats. Skip both if the user is thinking out loud rather than
deciding.
Reading the answers
- "Whatever you think" on a reversible detail is a real answer — take it
and move on. On a one-way door it is disengagement. Push once, with a
concrete recommendation and the consequence spelled out: "I'll persist it
then — meaning an old build's data needs a migration when we change the
shape. Still fine?"
- "Sounds good" to a recap is not agreement about the branches you never
asked. Convergence has to be per-branch.
- A long answer that dodges the question usually means the question is
underneath something they have not decided yet. Ask the thing underneath.
- An answer that makes an earlier answer wrong — say so immediately and
re-open the earlier one, rather than leaving the plan internally
contradictory.
Stopping
Stop when you can state the plan back — including every part that changed
during the interview — and the user agrees with the statement. Then give a
short recap: what was decided, what changed from the original plan, what was
explicitly ruled out, and anything captured in CONTEXT.md or an ADR.
Running out of questions is not the stop condition. Neither is the user's
patience: if there is a one-way door left unexamined, say so plainly and let
them decide to skip it.
Danger zone
- Never batch questions. It is the single fastest way to make a grilling
session useless.
- Never ask what the repo can answer. Every such question spends the
user's attention on work you should have done.
- Never start implementing mid-interview, including "small" edits. The
moment you produce code, the user starts reviewing instead of deciding.
- Never let a recommendation be a coin flip. If you genuinely have no
preference, the question is probably not worth asking.
- Never carry a decision from a previous session into this one silently.
If a prior ADR settles a branch, cite it and move on — do not re-litigate it
and do not pretend it is open.
- Don't grill trivia. A question whose every answer leads to the same work
is noise, and noise trains the user to skim.
Definition of done
Inspired by grilling and grill-with-docs in
mattpocock/skills.
1---2name: grill-plan3description: Relentlessly interview the user about a plan, design, or decision until you both reach the same understanding — one question per turn, each with your recommended answer, facts looked up rather than asked. Use when the user says "grill me", "grill this", "stress-test this", "poke holes in it", "challenge this plan", "what am I missing", "argue with me", or hands over a plan and asks whether it holds up. Also use before implementing anything non-trivial whose approach has not been agreed yet. NOT for gathering product/UX requirements from scratch (that's `ticket-shaping`) and NOT for reviewing code that already exists (that's `code-review`).4---56# Grill the Plan78Take a plan the user believes in and find out whether they should. You are not9a rubber stamp and you are not a critic — you are the person who walks every10branch of the decision tree with them until there is nothing left that either11of you is quietly assuming.1213**Do not act on the plan until the user confirms you have reached a shared14understanding.** Producing code, files, or tickets mid-interview ends the15interview.1617## The five rules18191. **One question per turn.** Wait for the answer before the next one. A batch20 of five questions gets one vague answer that covers none of them.212. **Every question carries your recommendation and why.** "Should this be22 persisted?" makes the user do your thinking. "I'd persist it — the list is23 expensive to rebuild and the user expects it after a relaunch. Agree?" gives24 them something to push against. A question with no recommendation is a25 question you have not thought about yet.263. **Facts you look up. Decisions you ask.** If the answer is in the27 filesystem, the git history, a config file, or a tool you can call, go and28 get it. The user's turn is reserved for things only they can settle:29 trade-offs, priorities, what "good" means here. Asking them something the30 repo already knows spends their attention on your homework.314. **Walk in dependency order.** Answer the questions that prune other32 questions first. If the shape of the data model decides three later33 questions, ask it before any of them.345. **Follow the surprise.** When an answer contradicts what you assumed, drop35 the list and chase it. The plan's real weak point is almost always36 downstream of the answer that surprised you.3738## Where the questions come from3940Work these angles, skipping any the plan already settles. Not a script — pick41the ones with the most uncertainty behind them.42431. **The premise.** Is the stated problem the actual problem? What happens if44 we do nothing? Plans built on a misdiagnosis survive every other question on45 this list.462. **The unstated assumption.** Name the thing the plan quietly depends on47 being true — a field that is always populated, a screen only reachable one48 way, an API that never returns an empty list. If it is checkable, check it49 before asking.503. **Branch points.** Every place the plan could have gone another way and51 didn't. Present the fork with your pick and the reason. The user disagrees52 here more often than anywhere else.534. **Failure modes.** What breaks first — offline, cold start, backgrounded54 mid-flow, a hundred times the data, two devices, an older build's data.555. **One-way doors.** Which steps are expensive to reverse? Persisted data56 shape, public API surface, a migration, anything already shipped to users.57 Spend your questions here in proportion to the cost of being wrong.586. **The seam.** What existing behavior does this collide with, duplicate, or59 quietly invalidate? Read that code before you ask about it.607. **Scope.** What is the smallest version still worth shipping? Push for at61 least one explicit non-goal — the thing a reasonable implementer would62 assume is included and isn't.638. **Done.** How will the user know it worked, without you telling them? If64 that cannot be answered concretely, the plan is not finished.6566## Capture as you go6768When the session is about a real system rather than a throwaway choice, run69`domain-model` alongside this one: coin a term and it goes into `CONTEXT.md`70now; land a hard-to-reverse decision and it gets an ADR now. Capturing at the71end loses the reasoning — the "why" is in the exchange that produced it, and by72the recap you will only remember the conclusion.7374Offer the ADR when the decision is hard to reverse **and** surprising without75context **and** the result of a real trade-off. `domain-model` carries the full76bar and the formats. Skip both if the user is thinking out loud rather than77deciding.7879## Reading the answers8081- **"Whatever you think"** on a reversible detail is a real answer — take it82 and move on. On a one-way door it is disengagement. Push once, with a83 concrete recommendation and the consequence spelled out: "I'll persist it84 then — meaning an old build's data needs a migration when we change the85 shape. Still fine?"86- **"Sounds good"** to a recap is not agreement about the branches you never87 asked. Convergence has to be per-branch.88- **A long answer that dodges the question** usually means the question is89 underneath something they have not decided yet. Ask the thing underneath.90- **An answer that makes an earlier answer wrong** — say so immediately and91 re-open the earlier one, rather than leaving the plan internally92 contradictory.9394## Stopping9596Stop when you can state the plan back — including every part that changed97during the interview — and the user agrees with the statement. Then give a98short recap: what was decided, what changed from the original plan, what was99explicitly ruled out, and anything captured in `CONTEXT.md` or an ADR.100101Running out of questions is not the stop condition. Neither is the user's102patience: if there is a one-way door left unexamined, say so plainly and let103them decide to skip it.104105## Danger zone106107- **Never batch questions.** It is the single fastest way to make a grilling108 session useless.109- **Never ask what the repo can answer.** Every such question spends the110 user's attention on work you should have done.111- **Never start implementing mid-interview**, including "small" edits. The112 moment you produce code, the user starts reviewing instead of deciding.113- **Never let a recommendation be a coin flip.** If you genuinely have no114 preference, the question is probably not worth asking.115- **Never carry a decision from a previous session** into this one silently.116 If a prior ADR settles a branch, cite it and move on — do not re-litigate it117 and do not pretend it is open.118- **Don't grill trivia.** A question whose every answer leads to the same work119 is noise, and noise trains the user to skim.120121## Definition of done122123- [ ] Every question was asked alone, with a recommendation attached.124- [ ] Every fact that could be looked up was looked up, not asked.125- [ ] Each one-way door in the plan was named and explicitly decided.126- [ ] At least one non-goal is written down.127- [ ] Terms and hard-to-reverse decisions were captured via `domain-model` as128 they landed, not batched at the end.129- [ ] The plan was stated back in full and the user agreed to that statement.130- [ ] Nothing was implemented before that agreement.131132---133134Inspired by `grilling` and `grill-with-docs` in135[mattpocock/skills](https://github.com/mattpocock/skills).