Designing with 7w3
12 agent skills for AI-driven software development — a gated idea-to-ship pipeline: 7w3 design, build-ready specs, executable architecture, honest review loops, a parallel worker-fleet lane, QA, safe deploy. Works with Claude Code, Codex, Cursor and any skills-capable agent. No vibecode.
npx -y skills add smixs/disruptor-skills --skill designing-with-7w3Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when designing a feature, system, refactor, process, protocol, or decision before implementing it; when expanding a vague spec, RFC, or ticket into an implementable design; when writing or reorganizing design docs; when the user mentions "7w3", the seven Ws, "wishes / functions / decision flows", or wants a design "like BDD or user-story-driven development but fuller"; or when the user says "design X" or "write this up properly" — prefer this over ad-hoc design notes or a phase/Gantt plan.
SKILL.md
15.1 KB, as published. Nobody here has run it
7w3 Driven Development
Stage contract
- Stage: 1. Design · Kind: method
- Inputs: an idea / RFC / ticket / feature request (from a router on-ramp).
- Outputs: a 7w3 subject tree — each subject's ten facets, grounded in real things.
- Entry gate: you're moving from "what we want" to "how it works"; the repo's
conventions/CONTEXT.md exist (else invoke the
setting-up-domain-modelskill first). - Done when: every leaf subject answers all ten facets (or an explicit
n/a — because…), Where/Who/When cite real files/names/events, no unacknowledged holes remain. - Next: the
write-specskill — turn the settled design into a canonical spec. - Maintains: CONTEXT.md (cite/sharpen terms) · ADRs (record hard-to-reverse design decisions).
7w3 is a way to design anything by describing each subject completely along ten facets, and keeping all ten together in one place. It is similar in spirit to user-story-driven development and BDD — but where a user story captures only the wish and BDD captures only the when/how of a scenario, 7w3 insists you capture the whole subject: who owns it, where it lives, when it fires, why it exists, what it is not, what it can't do, and what happens next — all at once, so the subject can be reasoned about, reviewed, and implemented as a single coherent unit.
The name: 7 Ws + 3 = ten facets.
When to use this
Use 7w3 the moment you move from "what do we want" to "how will this actually work": designing a feature or subsystem, an API, a protocol, a refactor, a migration, an org process, a decision record. Use it to turn a vague spec/RFC/ticket into something implementable. Use it instead of jumping straight to a phased to-do list — phases flatten the decision structure that 7w3 preserves.
It is general-purpose: nothing about it is tied to code. A hiring process, a kitchen remodel, and a rate limiter can all be 7w3 subjects.
The ten facets
The Seven Ws
| facet | the question it answers | a good answer | the hole it exposes when empty |
|---|---|---|---|
| Wish | What outcome do we want? What is success? | a desired end state, not a mechanism | you're building without knowing what "done" means |
| Why | Why does this matter? Why this way? | motivation + reason + causes + intentions | you can't tell which constraints are real |
| What | What is this, exactly? | a precise definition of the one thing | if there are two "whats", it's two subjects |
| Who | Who is responsible / who acts / who's affected? | named actors + their roles | nobody owns it, or everybody does |
| Where | Where does it live? (file, system, place, context) | concrete locations — grounded, not "somewhere" | it can't be found or built |
| When | When does it fire? In what order? What is the lifecycle? | triggers, sequencing, timing, state transitions | races, missed triggers, undefined ordering |
| What's-next | What does this cause downstream? What follows? | implications, ripple effects, dependencies, next steps | surprises land on whoever ships it |
The three others
| facet | the question it answers | a good answer | the hole it exposes when empty |
|---|---|---|---|
| Boundaries | What is explicitly NOT this / not theirs / out of scope? | the edges — the things deliberately excluded | scope creep; two subjects bleed together |
| Limitations | What can't this do? What's deferred? What are the risks? | known constraints, trade-offs, deferrals, failure modes | false confidence; hidden landmines |
| Method | How? The mechanism: functions, decision flows, the decisions made | the actual branches/steps/contracts that realize the Wish | it's a wish, not a design |
Every facet must be answered. An empty facet is a signal, not a formatting gap: either the facet genuinely doesn't apply (write "n/a — because …") or you haven't finished thinking. Don't delete a facet to hide a hole.
The cardinal rule
All ten facets of one subject live TOGETHER in one file. You decompose by subject into a tree — never by facet.
This is the rule that makes 7w3 work, and the easiest one to get wrong.
Why together. A subject's value is in seeing it whole. You cannot judge a decision when its Who is in one file, its When in another, and its Boundaries in a third — you'd reassemble the subject in your head every time, and the facets silently drift out of sync. One subject, one file, ten facets means each file is a self-contained, reviewable, implementable unit. Reviewing it is reviewing the whole subject.
The anti-pattern (do not do this). Splitting the design into who.md, where.md,
boundaries.md, methods.md — a file per facet spanning all subjects. This looks tidy
and is exactly backwards: it scatters every subject across ten files. If you ever name a
file after a facet, stop.
Decompose by subject instead. When a subject gets too big — its facets sprawl, it has two distinct "Whats", its Method has many independent branches — split it into child subjects, each its own 7w3 file with its own complete ten. The parent keeps a short version of each facet and points to the children. Recurse as deep as the work needs — a tree of 5 or 500 nodes is fine. The tree of subjects should mirror the real structure of the thing you're designing.
The document template
One file per subject. Name it after the subject: <subject>.7w3.md. Fill all ten.
# <Subject> — 7w3
**Parent:** [<parent-subject>](parent.7w3.md) · **Children:** [<a>](a.7w3.md), [<b>](b.7w3.md)
<!-- the tree edges; omit a side that doesn't exist -->
## Wish
<the desired outcome / definition of done>
## Why
<motivation; why this shape>
### Causes
<...>
### Intentions
<...>
## What
<precise definition of the one thing this subject is>
## Who
<actors + responsibilities — who does, owns, is affected>
## Where
<concrete locations: files, systems, places, contexts — grounded>
## When
<triggers · ordering · lifecycle · state transitions>
## Method
<HOW: the mechanism — functions, contracts, decision flows (guard → action → result),
the decisions made. This is the design proper.>
## Boundaries
<what is explicitly NOT this / not in scope / not this actor's job>
## Limitations
<constraints, trade-offs, deferrals, known risks & their mitigations>
## What's-next
<downstream implications, ripple effects, dependencies, follow-on subjects>
Order is a recommendation, not a law — lead with Wish/Why (intent) and end with What's-next (consequences) because it reads well. The non-negotiable part is that all ten are present, in the one file.
Decomposing into a tree
- The tree is a NESTABLE DIRECTORY, not a flat folder of cross-referencing files. A
subject is a file
<subject>.7w3.md. When it earns children (gate below), it is PROMOTED into a directory<subject>/holding its own framing file<subject>/<subject>.7w3.md(the parent, whose facets now summarize and point) plus its child subject files — and each child can itself promote into a directory, recursively, as deep as the real structure goes. Promotion-into-a-directory is the growth mechanism. (A small design may sit in one flat folder; that's fine — but you grow it by promoting a subject, not by sprinkling sibling files.) - THE PARSIMONY GATE — a subject earns its own file/directory ONLY when it is a genuinely DISTINCT subject; otherwise it stays DATA inside its parent. Concretely, promote a candidate to its own child subject only if it introduces a new actor or owner, a new responsibility / authority boundary, a distinct contract or interface, a state machine, or an independently-realizable unit (a sub-system, a state machine, a separately buildable/deliverable/testable piece). If it does none of these — it's a detail, a variant, a field, an example, another step of the same process — it must EXTEND the existing subject as DATA: another row, bullet, field, table entry, or cross-reference — never a new file. (Cross-domain: a character earns a subject; that character's eyebrow-raise does not — it's a line in their scene. An auth service earns one; its 37th config flag does not — it's a row in a table.)
- Why the gate is load-bearing (the counter-force). Without it, every nuance gets "promoted so it can grow freely" — which keeps each leaf locally clean while the tree grows globally heavier: more files, more cross-links, more places the same thing is half-described, more navigation cost. A child that, after promotion, only photocopies its parent's framing, or holds a detail that could have been a field, is a mis-promotion — fold it back. (This is the structural twin of the over-decompose smell: splitting by facet scatters one subject; over-promoting by nuance multiplies subjects.)
- Split (promote) when the gate is met and one of: a facet won't fit cleanly, the subject has more than one coherent "What", or its Method has independent sub-mechanisms each worth its own ten. The gate is the necessary condition; these are the triggers.
- A root/parent subject describes the whole at a high level (its facets summarize) and links to children. A leaf subject is small enough that its ten facets are each a few lines.
- Link both ways (Parent / Children) so the tree is navigable from any node.
- Cross-reference shared vocabulary instead of restating it: define a term, a contract, or a state machine once in the subject that owns it, and link to it from siblings. (This keeps child docs tight without violating ten-together — each child still answers all ten for itself, it just doesn't re-explain shared concepts. A recurring concrete thing that ≥3 subjects re-describe is itself a candidate to factor into one owning subject + N references — the same gate applied to shared data, not just to promotion.)
How to drive a 7w3 design
- Name the root subject — the one thing being designed. Resist starting with structure.
- Fill its ten facets. Where you can't, you've found a hole — research it or mark it
n/a — because …. - Notice strain. If a facet sprawls or you're writing two "Whats", split off a child subject and give it its own ten. Recurse.
- Ground the facts. Where/Who/When should cite real things (files, names, events), not placeholders — that's what makes the design implementable rather than aspirational.
- Implement against the Method + When of each leaf subject — the decision flows are the build instructions. 7w3 deliberately has no separate "phase plan"; if you need build order, express it as a dependency note inside What's-next, not as a timeline that re-flattens the design.
- Keep it live. When reality diverges, update the subject's ten — the file is the design of record, not a historical snapshot.
Relationship to BDD and user-story-driven development
- A user story ("As an X I want Y so that Z") is roughly 7w3's Wish + Who + Why — three of ten.
- A BDD scenario (Given/When/Then) is roughly 7w3's When + Method for one path.
- 7w3 keeps both and adds Where, What, Boundaries, Limitations, What's-next, and binds them to one subject. So: stories and scenarios are inputs; a 7w3 subject is the whole.
Smells — you're doing it wrong if…
- A file is named after a facet (
boundaries.md,methods.md) → you split by facet. Re-split by subject. - A facet is empty with no "n/a — because" → an unacknowledged hole.
- Method reads like a Wish ("it should be fast and clean") → you described the goal, not the mechanism.
- One subject has two unrelated Whats → it's two subjects.
- The same concept is re-explained in five files → define once, cross-link.
- A child subject introduces no new actor/owner/authority/contract/unit — it just holds a detail, a variant, or photocopies its parent → it failed the parsimony gate; fold it back into the parent as a field/row/reference. (And: the tree only ever GREW — no subject was ever folded back or merged → the promote-by-nuance ratchet is running; the tree is heavier than the thing it designs.)
- The design is a list of phases → you flattened the decision structure 7w3 exists to keep.
A worked example (general — emailed password reset)
A small tree: a root subject with a child. Each file has all ten; shown compressed.
password-reset.7w3.md (root)
- Wish: a user who forgot their password can regain access within ~5 minutes, safely.
- Why: account lockout is the #1 support cost; self-serve recovery removes it.
- What: an emailed, single-use, time-boxed reset link that lets the holder set a new password.
- Who: the user (requests + completes); auth service (issues/validates); email provider (delivers); support (n/a — explicitly hands-off, see Boundaries).
- Where:
auth/resetendpoints; the token store (→ childreset-token.7w3.md); the email template service. - When: user submits "forgot password" → token issued + email sent → user clicks within TTL → new-password form → token consumed. Expired/used link → restart.
- Method:
POST /reset/request{email}→ always 200 (don't leak existence) → if account exists, mint token (→ child) + send link.POST /reset/complete{token,newpw}→ validate token (exists ∧ unexpired ∧ unused) → set password → consume token → invalidate sessions. - Boundaries: NOT account creation, NOT email change, NOT MFA reset (separate subject). Support never resets passwords by hand.
- Limitations: depends on email deliverability (out of our control); a leaked inbox = account takeover (mitigated by short TTL + session invalidation); no SMS fallback yet (deferred).
- What's-next: invalidating sessions on reset ripples to "remember me" tokens (must also clear); rate-limiting the request endpoint becomes its own subject; metrics: reset-completion rate.
reset-token.7w3.md (child) — its own complete ten:
- Wish: a token that is unguessable, single-use, and self-expiring … Method: 256-bit random, stored hashed,
expires_at = now + 15m,used_atnullable; validate = lookup-by-hash ∧used_at IS NULL∧expires_at > now… Boundaries: not a session token, not a JWT … Limitations: clock-skew onexpires_at; no rotation … (and Why/What/Who/Where/When/What's-next).
The root's Where and Method point at the child; the child answers all ten for the token. That's the tree: decomposed by subject, ten-together at every node.
Source: Nambr (@aostrikov_agents_chat), 7w3 Driven Development.