ask-and-build
Ported from David Ondrej's ask-then-build / before-building / next-decision
family. The premise from the podcasts: AI models are great at implementation
and following a plan. They have no taste and no judgement. You, the human, must
stay in charge of the decisions. Frontloading a little decision work buys a
lot less tech debt and a more scalable codebase.
When to fire
- The user says "build X", "add X", "make this do Y", "let's ship Z" and X/Y/Z is
more than a few lines.
- A plan has unresolved choices.
- You're about to make a call the user might regret (storage, data model, sync
strategy, auth, file layout, public API shape, dependency, platform behaviour,
cross-platform differences).
Do NOT fire for genuinely trivial changes (copy tweak, one obvious bug fix, a
rename). For those, just do it. Over-asking is its own anti-pattern.
Phase 1 - Surface the decisions (fast, from the gut first)
- Instant pass (no tools, no file reading): from what the user just said,
name the 1-3 truly consequential choices hidden in the idea. Fewer is
better. Classics: one-off vs. reused later; few lines vs. proper module; the
biggest thing this could break; same behaviour on every platform vs. not;
local-only vs. needs a server.
- Grounded pass (now read):
context/_map.md, relevant context/decisions/
(don't contradict an accepted ADR), context/conventions/, and the code the
change touches. Refine the list - add decisions the code reveals, drop ones
already settled by an ADR.
- You should end with 3-7 open decisions. If more, the scope is too big -
say so and suggest splitting into an epic.
Phase 2 - Put them to the user, ONE at a time
For each decision, in this exact layout (blank line between every block -
renderers collapse single newlines):
**<Decision title, as a question>?**
<one line of context if needed>
A. <option>
B. <option>
C. <option>
D. <option> (only if there's a real 4th option)
My pick: <A>. <one-line reason>
Then stop and wait. Never bundle questions. Never number them "1 of N" unless
you truly know N.
When the user answers:
- Record it immediately as an ADR:
ctx new decision "<title>" then fill
Context / Options considered / Decision / Consequences. Set status: accepted.
If the user gave exact wording, use their words verbatim in the Decision
section (keep their typos) - don't rewrite it.
- If the answer overrides an accepted ADR, write a NEW ADR that supersedes it and
mark the old one
status: superseded with a link.
- Move to the next most important open decision.
Phase 3 - Build brief
After the last answer, produce ONE concise brief for the implementer (or for
/dispatch). In this order:
- Read first:
context/_map.md, the ADRs just written (by number),
context/conventions/con-index.md.
- What to build: numbered, concrete, file-level where useful. Each step
independently verifiable.
- How to validate: the exact command / manual check with real data, and a
screenshot if it's visual.
- Rules: follow the ADRs, don't over-add tests, don't touch out-of-scope
files, don't commit, report back with files changed + proof.
Keep the brief to a single tight paragraph or a short numbered list. If it needs
two paragraphs, the scope is too big - say so.
Phase 4 - Hand off
- Route the brief through
routing.md (Phase 3) and either build it in this
session or /dispatch it to a worker.
- After the build, run
/review (Phase 4 gate) before merge.
Related manual skills to reach for
- stop-overthinking: if you (or the user) are looping on a decision - "if
there's a critical issue name it, else say we're good, give next steps, be
concise, think like a practical entrepreneur."
- decisions: after building - "which choices did you make that you're not
confident about, and are there better alternatives?" Only list the genuinely
uncertain ones.
Anti-patterns
- Asking about trivia (indent size, variable names) - that's a convention, not a decision.
- Offering fake choices where one option is obviously right - just state it and move on.
- Writing the build brief before all answers are in.
- Bundling 5 questions into one message.
- Deciding the architectural questions yourself because it's faster.
- Not recording the answer as an ADR (then the next session re-litigates it).
1---2name: ask-and-build3description: Before building any non-trivial feature or change, surface the real architectural and product decisions hidden in the request, put them to the user one at a time with options and a recommendation, record each answer as an ADR, then produce a build brief for the implementer. Use when the user proposes a build, says "ask and build", "ask-then-build", "decide first", "what should I decide before building this", or when a request has consequential choices baked in. Differentiator: forward-looking decision drilling that writes ADRs and hands off a brief - not a code-writing skill and not a retrospective review.4---56# ask-and-build78> Ported from David Ondrej's `ask-then-build` / `before-building` / `next-decision`9> family. The premise from the podcasts: **AI models are great at implementation10> and following a plan. They have no taste and no judgement. You, the human, must11> stay in charge of the decisions.** Frontloading a little decision work buys a12> lot less tech debt and a more scalable codebase.1314## When to fire1516- The user says "build X", "add X", "make this do Y", "let's ship Z" and X/Y/Z is17 more than a few lines.18- A plan has unresolved choices.19- You're about to make a call the user might regret (storage, data model, sync20 strategy, auth, file layout, public API shape, dependency, platform behaviour,21 cross-platform differences).2223Do NOT fire for genuinely trivial changes (copy tweak, one obvious bug fix, a24rename). For those, just do it. Over-asking is its own anti-pattern.2526## Phase 1 - Surface the decisions (fast, from the gut first)27281. **Instant pass** (no tools, no file reading): from what the user just said,29 name the **1-3 truly consequential choices** hidden in the idea. Fewer is30 better. Classics: one-off vs. reused later; few lines vs. proper module; the31 biggest thing this could break; same behaviour on every platform vs. not;32 local-only vs. needs a server.332. **Grounded pass** (now read): `context/_map.md`, relevant `context/decisions/`34 (don't contradict an accepted ADR), `context/conventions/`, and the code the35 change touches. Refine the list - add decisions the code reveals, drop ones36 already settled by an ADR.373. You should end with **3-7 open decisions**. If more, the scope is too big -38 say so and suggest splitting into an epic.3940## Phase 2 - Put them to the user, ONE at a time4142For each decision, in this exact layout (blank line between every block -43renderers collapse single newlines):4445```46**<Decision title, as a question>?**4748<one line of context if needed>4950A. <option>5152B. <option>5354C. <option>5556D. <option> (only if there's a real 4th option)5758My pick: <A>. <one-line reason>59```6061Then **stop and wait**. Never bundle questions. Never number them "1 of N" unless62you truly know N.6364When the user answers:65- Record it immediately as an ADR: `ctx new decision "<title>"` then fill66 Context / Options considered / Decision / Consequences. Set `status: accepted`.67 If the user gave exact wording, use their words verbatim in the Decision68 section (keep their typos) - don't rewrite it.69- If the answer overrides an accepted ADR, write a NEW ADR that supersedes it and70 mark the old one `status: superseded` with a link.71- Move to the next most important open decision.7273## Phase 3 - Build brief7475After the last answer, produce ONE concise brief for the implementer (or for76`/dispatch`). In this order:77781. **Read first**: `context/_map.md`, the ADRs just written (by number),79 `context/conventions/con-index.md`.802. **What to build**: numbered, concrete, file-level where useful. Each step81 independently verifiable.823. **How to validate**: the exact command / manual check with real data, and a83 screenshot if it's visual.844. **Rules**: follow the ADRs, don't over-add tests, don't touch out-of-scope85 files, don't commit, report back with files changed + proof.8687Keep the brief to a single tight paragraph or a short numbered list. If it needs88two paragraphs, the scope is too big - say so.8990## Phase 4 - Hand off9192- Route the brief through `routing.md` (Phase 3) and either build it in this93 session or `/dispatch` it to a worker.94- After the build, run `/review` (Phase 4 gate) before merge.9596## Related manual skills to reach for9798- **stop-overthinking**: if you (or the user) are looping on a decision - "if99 there's a critical issue name it, else say we're good, give next steps, be100 concise, think like a practical entrepreneur."101- **decisions**: after building - "which choices did you make that you're not102 confident about, and are there better alternatives?" Only list the genuinely103 uncertain ones.104105## Anti-patterns106107- Asking about trivia (indent size, variable names) - that's a convention, not a decision.108- Offering fake choices where one option is obviously right - just state it and move on.109- Writing the build brief before all answers are in.110- Bundling 5 questions into one message.111- Deciding the architectural questions yourself because it's faster.112- Not recording the answer as an ADR (then the next session re-litigates it).