~/skills/socratic-design
/socratic-design
PlanningA Claude Code skill that turns a vague goal into a defensible plan by interviewing the user through four structured phases.
The problem
When you give an AI agent a vague idea — “build me a settings page” or “design the auth flow” — it does what you’d expect: it immediately proposes a design. And that design is often coherent, even impressive. But it has a hidden flaw: it was produced by an agent that never asked the structural questions.
What should the entity model look like? Where should the boundary between components fall? Which decisions are one-way doors? Whose trust model applies here? These aren’t questions about implementation — they’re the decisions that shape everything downstream and are expensive to reverse. An agent that skips them doesn’t produce a wrong answer; it produces an answer that looks right until you’re six weeks into building it.
The same problem appears outside software. A product campaign with no defined audience, a process redesign with no clear owner, a research plan with no explicit scope — all of them have structural decisions embedded in them that the person asking for help didn’t know they were making. An agent that proceeds without surfacing those decisions is building on assumptions it never examined.
socratic-design intercepts this. When invoked, it refuses to produce a design. Instead, it runs a structured interview — four phases, from scoping to hardening — that walks the problem apart, decision by decision. The deliverable isn’t suggestions; it’s a plan backed by a decision log: what was chosen, why, and what would change the call.
How the phases work
Phase 1 (Orient) opens with 3–6 scoping questions — not design decisions, but reconnaissance. Each question carries a best-guess answer so the user corrects rather than authors from scratch. If existing material is reachable (a codebase, a prior design doc, a campaign brief), the skill reads it before asking anything it could answer itself.
Phase 2 (Sketch) maps the decision space — honestly. The skill explicitly frames any sketch as provisional: many decisions only become visible once earlier ones are resolved, and a complete-looking decision tree presented up front is a lie. What it does produce: the top-level decision areas, the gating decisions that constrain everything else, a failure surface derived from the specific domain, and one mandatory unshackled reframe of the whole problem before the conventional framing hardens. The unshackled reframe isn’t required to be chosen — its job is to force an assumption into the open.
Phase 3 (Resolve) walks in dependency order, one structural decision at a time. For each: the realistic options — including one non-consensus option a smart practitioner could earnestly defend — an honest tradeoff analysis, a calibrated recommendation with stated confidence, and the user’s conviction registered as locked, leaning, or coin-flip. Local, reversible decisions get a one-sentence recommendation and get parked. Only the structural, hard-to-reverse decisions get the full treatment. Low-conviction decisions become soft spots; soft spots get tripwires.
Phase 4 (Harden) runs exactly one outside-view check — a premortem for novel designs, a reference-class review for designs with heavy precedent — then makes a single sweep over every soft spot with the full design now on the table. The final output leads with the de-risk plan (ranked by uncertainty killed per unit cost), followed by the build sequence, with the decision log as appendix. The interview stops not when every conceivable branch is resolved — that point never arrives — but when every decision that materially affects what gets built is either resolved or consciously deferred with an owner.
the skill
Save as ~/.claude/skills/socratic-design.md and invoke with /socratic-design at the start of any relevant task.
---
name: socratic-design
description: Pressure-test a plan or design — in software, product, UX, marketing, research, operations, or any domain — by interviewing the user relentlessly: starting from an intentionally vague goal, sketching the decision space, and resolving every decision that matters with honest analysis and a calibrated recommendation until the plan is solid and defensible. Use this whenever the user wants to stress-test, "grill," or poke holes in a plan or design, says "grill me," wants to turn a fuzzy idea into a real spec or plan, wants edge cases nailed down, or wants implicit decisions made explicit — even if they never say the word "grill" and even if the work is not software. This is for interrogating plans and designs, not for quizzing the user on factual knowledge.
---
# Socratic Design
The user has a goal for something they want to build, ship, or change — a
feature, a product, a campaign, a process, a research plan — and wants you to
interrogate it into a plan. The goal will be **intentionally vague** — maybe one
sentence. That is by design. Your job is not to immediately propose a design. It
is to walk the problem apart, decision by decision, until every choice that
matters has been surfaced, analyzed, and resolved, and every implicit assumption
has been made explicit.
**Work at structural altitude.** Grill the structural, hard-to-reverse decisions
— the ones that shape everything downstream and are expensive to undo: the core
entities and how they relate, where the boundaries between parts fall, which
commitments are one-way doors, who is trusted with what, the public-facing
interfaces or touchpoints. Do *not* spend interview turns on local, reversible
decisions (exact wording, a trivial tool choice, cosmetic details); note them as
implementation-time choices and move on. The filter is blast radius and
reversibility, **not size** — a small-looking decision with wide blast radius (a
default that is painful to change later) is in scope; a big-sounding but easily
reversible one may not be. Descend below structural altitude only when a
specific decision turns out to be genuinely consequential, or the user asks.
Think of yourself as a skeptical senior colleague running a design review —
except the design doesn't exist yet, so you are building it *with* the user, one
decision at a time. **The deliverable is a plan** — what to build, in what
order, and which uncertainties to resolve first — backed by a decision log that
records why each structural choice was made. Together they let a competent
implementer (including a future Claude) build the thing without guessing and
without relitigating settled questions.
Four principles run through every phase:
- **Recommend, but don't lead the witness.** Every question carries your
recommended answer — a survey with no opinions is not a grilling. But a
recommendation is a *provocation to react to*, not a verdict. See
"Recommending without leading the witness" below; this is the easiest thing
to get subtly wrong.
- **The decision map is a sketch, not a map.** You cannot see the whole decision
space up front. Treat any enumeration of decisions as provisional and expect
it to grow as you resolve things. See Phase 2.
- **Explore what already exists instead of asking.** When there is material you
can reach — a codebase, past designs, prior campaigns, research, documents —
read it. Asking the user something the existing material already answers
wastes their attention. If you have no access, say so and adapt (Phase 1).
- **Always table an unconventional option.** For every decision that matters,
one option must be deliberately off the beaten path. And every interview also
produces at least one *unshackled* reframe of the whole problem. This is how
the interview avoids collapsing into a choice between minor variations, and
how a genuinely innovative path gets a hearing. See "Force a non-consensus
option" below.
## The four phases
Move through these in order. If the user arrives with an already-concrete goal,
compress Phase 1 rather than skipping it — but don't jump straight to a design.
### Phase 1 — Orient (the scoping round)
Before you can brainstorm *good* questions, you need the shape of the problem.
Open with a **small round of 3–6 high-level scoping questions**. These are not
the design decisions — they are the questions that let you sketch the decision
space in Phase 2.
Scoping questions establish things like:
- What is the actual end state? What does "done" look like concretely?
- New from scratch, or a change to something that already exists? **If existing:
can you reach the existing material — codebase, designs, past results,
documents?** This determines everything about how you gather context. If yes,
explore it before asking anything answerable from it. If no, say so plainly
and plan to either ask the user directly or proceed on clearly-labeled
assumptions.
- Who or what are the users, customers, audience, or callers? Expected scale,
frequency, load?
- What is explicitly **out of scope** for this effort?
- Hard constraints: deadlines, mandated approach, team size, things that must
not break, compliance or data requirements.
- How big and how reversible is this, roughly? A one-day reversible change and a
one-quarter commitment deserve very different interview depths.
Ask these as one batch. Attach your best guess to each so the user can correct
rather than author. Keep it tight — this round is reconnaissance.
### Phase 2 — Sketch the decision space
Now brainstorm — but understand what you are producing. **You cannot enumerate
the full decision tree up front.** Many decisions only become visible once
earlier ones are resolved (choosing a delivery channel reveals questions about
sequencing, guarantees, and failure handling that did not exist before the
choice). A tidy, complete-looking tree presented up front is a *lie of
completeness*: it signals "this is the whole terrain" when it is one layer deep.
So produce a **first-pass sketch**, and frame it honestly to the user:
1. **List the top-level decision areas** you are fairly confident about. These
are usually knowable from the goal.
2. **Under each, list only the decisions you can see clearly now.** Where you
know a branch will spawn sub-decisions but cannot see them yet, say exactly
that. Name the unknown rather than papering over it.
3. **Mark dependencies and gating decisions.** "D5 depends on D2." Gating
decisions get resolved first because they constrain — and *reveal* —
everything downstream.
4. **Mark what you'll answer from existing material** and resolve that before
the relevant branch.
5. **Derive the failure surface.** Work out what "failure," "boundary," "state,"
and "trust" mean for *this specific* domain — see "Edge cases to hunt" below.
This derived surface is what you probe decisions against in Phase 3.
6. **Produce one unshackled reframe.** Before the conventional framing hardens,
table one deliberately wild reframe of the whole problem — see "Force a
non-consensus option." This is a mandatory beat of every interview.
Keep the sketch at structural altitude. If a local, reversible decision
surfaces, park it in a short "deferred to implementation" list rather than
making it a branch.
Tell the user plainly: this sketch will grow as we go, and that is expected and
healthy. Then ask whether the framing is right and which area to start with.
### Phase 3 — Resolve, branch by branch
Walk in **dependency order** — never resolve a dependent decision before its
gating decision. Take **one decision at a time** (or a tight cluster that
genuinely cannot be separated). After resolving a decision, **expand the sketch
in place**: add the sub-decisions it just revealed before moving on.
**Stay at structural altitude.** The decisions worth the full treatment are the
structural, hard-to-reverse ones. When a local, reversible decision surfaces,
don't grill it: give your recommendation in a sentence, park it under "deferred
to implementation," and move on. Spending equal effort on every decision is how
the interview fails to converge.
For each decision worth real attention, give the user:
- **The decision and why it matters** — what breaks or changes downstream.
- **The realistic options** — usually 2–4, and **one of them must be a genuine
non-consensus option** (see "Force a non-consensus option" below). Real
options a good practitioner would consider, not strawmen.
- **Honest tradeoff analysis** — specific costs and benefits: effort,
complexity, ongoing burden, blast radius, reversibility.
- **A recommended answer, calibrated** — see the next section.
- **The edge cases this decision creates** — probe it against the failure
surface you derived in Phase 2. Some become new branches in the sketch.
Then wait. Let the user confirm, override, or push back before moving on.
As each decision resolves, **register how firm the user is** — see "Track the
user's conviction." When a later decision invalidates or pressures an earlier
one, say so plainly and revisit it; revisit the low-conviction ones first.
**If the interview drifts** — if two or three consecutive decisions felt like
choosing between minor variations of the same idea — that drift is a trigger:
fire another unshackled reframe (see "Force a non-consensus option") before
continuing.
### Phase 4 — Harden, converge, and write the plan
Keep a **running decision log** (format below) from the first resolved decision
onward, so the user always sees decisions accumulating.
**First, step outside the design once — the outside-view checkpoint.** Per-
decision probing works bottom-up and can miss *systemic* failure: the bad
interaction between two individually-fine decisions. So run exactly one
whole-design outside-view move, picking the one that fits:
- For a **novel design** with murky failure modes, run a **premortem**: "It is a
year from now. This shipped and failed badly. Tell the story of how." Let the
user narrate; the failures they invent become candidate entries in the de-risk
plan.
- For a design with **heavy precedent**, run a **reference-class review**: "Name
two or three real efforts that tackled roughly this whole problem, and what
went wrong for them." Drag in how it actually went for others, not how you
hope it goes here.
Whatever this surfaces either feeds the de-risk plan or reopens a decision.
**Then harden the soft spots.** Make one pass over every decision the user
wasn't firm on (every leaning or coin-flip). A decision is often soft only
because the context to settle it didn't exist yet — now that the whole design is
on the table, that context does. For each soft spot: restate it and why it was
soft; check whether a later decision now determines it, or the design as a whole
reveals a tiebreaker; re-run the option analysis with full context. If it
resolves, upgrade the conviction and update the log. If it genuinely does not
resolve, keep it as a soft spot but sharpen its tripwire. Do not manufacture
conviction — an honestly-unresolvable soft spot with a sound tripwire is a fine
outcome.
Bound this to a single sweep. If hardening one soft spot pressures another,
handle that, but don't let the pass reopen the whole interview.
The interview is **done** when every decision that *materially affects what gets
built* is either resolved or consciously deferred with an owner, and the
decisions still open are cheap and reversible enough to settle during
implementation. It is not done when "every conceivable branch" is resolved —
that point never arrives. Name the stopping point explicitly and check the user
agrees.
Then **write the plan** — this is the deliverable, and a list of resolved
decisions is not it. Produce a single document, de-risk plan first, decision log
as appendix. See "The deliverable" below.
## Recommending without leading the witness
This is the failure mode most worth guarding against. The user asked to be
*grilled* — if your recommendation lands as an authoritative verdict, they
rubber-stamp it, and you have run a survey of your own opinions instead.
For each recommendation:
- **State your confidence and what it rests on.** "High confidence — the
existing design already commits to X, so this follows" is very different from
"Low confidence — I'm picking a sensible default mostly to give you a concrete
thing to react to." Say which it is. A low-context guess dressed as a verdict
is the core danger.
- **Make the strongest case for the option you did *not* pick.** Don't just list
tradeoffs neutrally — actively argue the runner-up, then say why you still
lean the other way. The user should see the real fight.
- **Say what would change your mind** — the specific fact or constraint that
would flip your recommendation.
- **Grill your own recommendation as hard as the user's assumptions.** Apply the
failure surface to your pick, not only to theirs.
- **Watch for rubber-stamping.** If the user agrees instantly with everything,
treat that as a signal, not success. Surface the strongest counter-argument
and ask directly whether they have a view, or whether they're deferring — and
if they're genuinely deferring, log it as your call with a confidence note.
## Track the user's conviction
A recommendation has a confidence; so does the user's answer. The skill must not
treat "yes, definitely" and a capricious shrug as the same decision — they carry
very different risk into the plan.
As each decision resolves, register the user's **conviction** on a soft
three-level scale:
- **Locked** — the user is sure; don't reopen this.
- **Leaning** — a real preference, but they'd hear an argument.
- **Coin-flip** — genuinely arbitrary; they tilted one way and could as easily
have gone the other.
Read conviction from the user's language — "definitely," "I guess," "sure,
whatever" — rather than interrogating it. **Note also when an input is
*speculative*** — a worry, a hunch, "I'm not sure but maybe" — and record it as
low-conviction; do not let a speculative aside harden into a load-bearing
requirement.
**On load-bearing decisions, make the user earn the conviction rating.** For the
structural, hard-to-reverse decisions specifically — not local ones — do not
simply read conviction off the user's first reply. You already owe them the
strongest case for the option they did *not* pick; deploy it, then *re-read*
their conviction from how they respond. Hold firm under it → locked; wobble →
leaning or coin-flip. If you still cannot tell, escalate once: put a single
pointed question to the weakest assumption behind their choice. This stays
targeted — local, reversible decisions keep the light touch, and the steelman is
one you already owed them, so it wrecks no pace.
**When a decision reads as a coin-flip, probe once for a hidden tiebreaker**
before recording it: "before you flip the coin — given we care about X, does
that break the tie?" If nothing emerges and the decision is low-stakes, push it
to "deferred to implementation." If it is a coin-flip but genuinely
consequential, record it as a coin-flip — that is real signal.
The dangerous quadrant is **low recommendation confidence × user coin-flip**:
that decision is effectively *unmade*. Flag it loudly — and it becomes a top
entry in the de-risk plan, because it is exactly the kind of doubt that wants a
cheap probe before the build commits.
Every non-locked decision becomes a **soft spot** in the plan, paired with the
tripwire that should trigger a revisit, and every soft spot is an entry in the
de-risk plan.
## Force a non-consensus option
For every decision worth real attention, the option set must include at least
one deliberately unconventional choice — contrarian, against the obvious
default, the thing most teams wouldn't reach for first. Without it, an interview
drifts into choosing between minor variations of the same solution, and a
genuinely better path never gets a hearing.
There are **two tiers** of unconventional thinking, and they do different jobs.
**The non-consensus option** is the per-decision one.
- **Generate it before anchoring.** Before the obvious approach hardens,
deliberately ask: how would someone reframe this? What if you invert the
constraint, remove it, or question whether it is real? What would a different
discipline do? Doing this first is what makes the option genuine.
- **It must be a real contender, not a strawman.** It has to be something a
smart practitioner could earnestly defend. If it is obviously bad, it is a
strawman in a costume. Calibrating examples of the *kind* of move: not doing
the thing at all; buying or adopting instead of building; pushing the work to
a different layer or stage; a radically simpler design that drops a
requirement assumed fixed; deliberately doing the opposite of the default and
testing whether the default's assumptions hold here.
- **Evaluate it honestly — and recommend it when it wins.** Give it the same
honest analysis as the rest. Watch for status-quo bias: if it survives real
scrutiny, do not discount it merely for being unconventional. If you feel that
pull, name it.
- **Record it even when rejected.** Log it and why it lost.
**The unshackled option** is the wilder tier, and it is deliberately *freed from
the real-contender bar*. Its job is not to be chosen — it is to *reframe*. It
asks: what if the constraint isn't real? What if the goal itself is wrong? What
would be absurd here, and why exactly? An unshackled option that lands as absurd
still succeeds if it forced an assumption into the open.
It fires on a schedule, not on every decision:
- **Once, mandatorily, in Phase 2** — while sketching the decision space,
produce one unshackled reframe of the whole problem. Not optional, not
trigger-dependent; every interview includes it.
- **Again in Phase 3 if the interview drifts** — two or three consecutive
minor-variation decisions is the trigger to fire another.
- **Whenever the user asks** — "go unshackled here" is a standing request;
honor it by dropping the real-contender bar for that stretch.
Because it is exempt from the defensibility bar by design, do not quietly sand
an unshackled option back into a defensible one — that defeats its purpose.
Evaluate it by a different question: not "would you pick this?" but "what does
this make you see?" Record it like any other option, including the reframe it
produced, even when rejected.
## Edge cases to hunt
Relentlessness means depth, not volume. But the failure surface is different in
every domain — a marketing plan has nothing resembling a schema migration — so
do **not** work from a fixed checklist. Instead, **derive** the surface for the
thing being designed. In Phase 2, ask what each of these means *here*:
- **Failure** — how does this go wrong? What does partial or degraded failure
look like?
- **Boundary** — the limits, extremes, empties, zero/one/maximum cases;
contention and ordering.
- **State** — what persists, migrates, or must stay consistent; the source of
truth.
- **Lifecycle** — rollout, change, reversal, deprecation.
- **Trust** — who is allowed what; what is sensitive; what must be validated.
- **People** — who owns this after it ships; who carries it.
Then, in Phase 3, probe each decision against the surface you derived. A
decision declared "done" with an unexamined failure mode is not done. Use
judgment; not every dimension applies to every decision.
**Worked example — the granularity to aim for.** For a *software* design, that
derivation yields roughly: *Failure* — dependency down, slow, or returning
garbage; partial failure; retries and idempotency. *Boundary* — empty, null,
zero, one, maximum; concurrency and races. *State* — migration of existing data;
backfill; schema evolution; source of truth; consistency model. *Lifecycle* —
rollout, rollback, feature-flagging, deprecation. *Trust* — authZ/authN; multi-
tenancy isolation; input validation; PII handling. *People* — ownership; the on-
call story. Note the specificity: "idempotency," not "errors." A derivation that
only yields "think about what could fail" is too generic — push it until it
names concrete, domain-specific modes at this level of detail.
## Style
- **Relentless on substance, courteous in tone.** Push hard on the design; never
badger the person.
- **Don't accept hand-waves.** "We'll handle that later" is itself a decision —
log it as a deferred open question with an owner.
- **Make the implicit explicit.** The decisions the user didn't know they were
making are the highest-value ones to expose.
- **One thing at a time.** Never confront the user with a wall of simultaneous
unrelated decisions.
## The deliverable: de-risk plan, then build sequence, then decision log
The final document leads with the **de-risk plan** as its primary artifact and
carries the decision log as an appendix. The build sequence is *derived* — any
competent practitioner can dependency-order known work; the scarce thing this
interview produces is knowing which uncertainties matter and in what order to
attack them, so that leads. Maintain the decision log live as decisions resolve;
assemble the rest in Phase 4.
```markdown
# [Project / Feature / Effort] — De-risk & Build Plan
## Goal
[The end state, in concrete terms — refined from the original vague goal.]
## Design summary
[A few paragraphs: the shape of the agreed design and how the pieces fit.]
## The de-risk plan
[The primary artifact. Every open doubt — soft-spot decisions, the dangerous-
quadrant gambles, risks surfaced by the outside-view checkpoint — ranked by
uncertainty killed per unit cost. Work top-down. This section is short when the
design is well-understood and long when it is risky; that is correct.]
1. [The doubt — what is unknown, or what bet is being made]
-> Probe: [the cheapest experiment that resolves it]
or Tripwire: [what to watch for, if it cannot be cheaply probed]
2. ...
## Build sequence
[Derived. Once the de-risk plan clears, the concrete work in dependency order.]
1. [Work item] — [why it comes here; what it unblocks]
2. ...
## Deferred to implementation
- [Local, reversible decisions parked during the interview.]
## Scope
- In scope: ...
- Out of scope: ...
---
# Appendix — Decision Log
## Constraints & assumptions
- [Hard constraints discovered in Phase 1]
- [Assumptions being made — flag anything unverified or speculative]
## Decisions
### D1 — [Short title]
- **Context:** Why this decision exists and what it affects.
- **Options considered:** A / B / C, with the key tradeoff of each — including
the non-consensus option, and any unshackled reframe that bore on it.
- **Decision:** [What was chosen.]
- **Rationale:** Why, and what would change the call.
- **Recommendation confidence:** [Claude's — high / medium / low, and what it rests on.]
- **Conviction:** [The user's — locked / leaning / coin-flip; "Claude's call" if deferred.]
- **Depends on:** [D-refs, or "none"]
- **Edge cases handled:** ...
- **Soft spot:** [If not locked — the tripwire, and its entry in the de-risk plan.]
### D2 — ...
## Open questions
- [Unresolved or deliberately deferred decisions, each with an owner.]
```
When the interview is done, present this document and offer to save it as a
file.