skills/qfd/SKILL.md
Goal-driven design cascade (QFD) — Goal → Function → How → Component, with critical performance budget and explicit tradeoffs. Challenges terminology against CONTEXT.md inline; lands decisions in DESIGN.md (and ADRs when warranted). Use when designing a new feature, an architectural shift, or any non-trivial change that benefits from a goal-first decomposition.
npx skillsauth add jcalixte/dotfiles qfdInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Drive the user through a goal-driven cascade — Goal → Function → How → Component — that lands in DESIGN.md. Walk one level at a time, resolving each branch before descending. For each question, provide your recommended answer.
Ask the questions one at a time, waiting for feedback on each question before continuing.
If a question can be answered by exploring the codebase, explore the codebase instead.
Sharpen language as you go: every Goal, Function, and Component name must clear the language bar below before it lands in DESIGN.md. The language-sharpening behaviours are not optional — they run interleaved with the cascade steps.
During codebase exploration, also look for existing documentation:
Most repos have a single context:
/
├── CONTEXT.md
├── DESIGN.md
├── docs/
│ └── adr/
│ ├── 0001-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
└── src/
If a CONTEXT-MAP.md exists at the root, the repo has multiple contexts. The map points to where each one lives:
/
├── CONTEXT-MAP.md
├── docs/
│ └── adr/ ← system-wide decisions
├── src/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ ├── DESIGN.md
│ │ └── docs/adr/ ← context-specific decisions
│ └── billing/
│ ├── CONTEXT.md
│ ├── DESIGN.md
│ └── docs/adr/
Create files lazily — only when you have something to write. If no CONTEXT.md exists, create one when the first term is resolved. If no DESIGN.md exists, create one when the first Goal resolves. If no docs/adr/ exists, create it when the first ADR is needed.
CONTEXT.md is the project's ubiquitous language — the shared vocabulary that should appear verbatim in conversation, code, tests, commit messages, and docs. The behaviours below all serve this principle: surfacing gaps between how the team speaks and how the code is named, then closing them by renaming the code, renaming the term, or recording the discarded word as an alias-to-avoid.
A useful smell: if you find yourself "translating" between what was said and what the code calls it, the language has drifted. Stop and resolve it.
When the user uses a term that conflicts with the existing language in CONTEXT.md, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
When a term is resolved, update CONTEXT.md right there. Don't batch these up — capture them as they happen. Use the format in CONTEXT-FORMAT.md.
CONTEXT.md should be totally devoid of implementation details. Do not treat CONTEXT.md as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.
This translates what the system must be (user-facing goals) into what it must do (functions), what we must build (components), and the trade-offs we explicitly took. Output goes into DESIGN.md — see DESIGN-FORMAT.md.
Interview flow — one question at a time, codebase-first when the answer is derivable from code. Each Goal/Function/Component name must clear the language bar above before it lands in DESIGN.md.
Got / Paid. If the trade is hard-to-reverse, also offer an ADR.Update DESIGN.md inline as each level resolves. Sections are produced lazily — do not pre-populate empty sections.
When the matrices would benefit from a visual rendering (slide, stakeholder review, doc), offer to draw a TikZ "House of Quality" inside a ```tikz fenced block in markdown. See QUALITY-HOUSE.md for the preamble, coordinate system, and placement recipes.
Offer this only when the cascade has produced enough material to populate it: Goals + importance (§1), Functions + targets (§2), and at least one of the importance matrix (§4) or the roof (§5). A house with empty cells is just scaffolding.
The house is a visualisation, not a replacement for DESIGN.md. Render it alongside the doc when stakeholders need the picture; the tables stay authoritative.
Only offer to create an ADR when all three are true:
If any of the three is missing, skip the ADR. Use the format in ADR-FORMAT.md.
</supporting-info>tools
Copy a previous Claude suggestion (code block, command, or text) to the macOS clipboard via `pbcopy`. Triggered by `/clip` with an optional selector argument.
development
Deep thinking session that builds the project's ubiquitous language, challenges your plan against the existing domain model, and sharpens terminology. Updates CONTEXT.md (and ADRs when warranted) inline as decisions crystallise. Use when stress-testing terminology against the existing glossary. For goal-driven design decomposition (Goal → Function → How → Component, with critical performance budget and explicit tradeoffs), run `/qfd` instead.
development
Web development. Use it when implementing code for webapps. In VueJS, TypeScript, HTML or css/scss.
tools
Translate into English