writing-design-docs
riekelt/technical-writer
Structure proposals, RFCs, and design docs with decision boxes, cost accounting, and completeness checks.
What is writing-design-docs?
A skill for writing design documents, proposals, RFCs, specs, and migration plans that argue for a change or record a design. Use it whenever a change needs scoping or persuasion in writing, ensuring conclusions come first, every non-trivial choice is justified in a Why & What box, and costs are named alongside benefits.
- Provides a numbered skeleton structure (summary, context, analysis, open questions, benefits/costs, residual risks) to organize proposals
- Encodes Why & What decision boxes that state each choice, its reasoning, alternatives considered, and fallback plans
- Separates verified facts from proposals and marks unfinished sections with `**[DRAFT - input wanted]**` instead of omitting them
- Enforces completeness checks: no unresolved placeholders, missing acceptance criteria, undefined references, unverifiable outputs, or outcomes without implementable direction
- Requires concrete figures and verifiable statements; prohibits superlatives, promise language, and strawman dismissals of alternatives
How to install writing-design-docs
npx skills add https://github.com/riekelt/technical-writer --skill writing-design-docs- The `technical-writing` skill (required background for hard rules, truth rules, and style)
How to use writing-design-docs
- 1.Start with the skeleton: title, subtitle, status/owner/scope/audience table, then numbered chapters (summary, context, analysis, open questions, benefits/costs, residual risks)
- 2.For each non-trivial choice, create a Why & What box stating the choice, reasoning, alternatives with their strongest arguments, and a fallback
- 3.Separate verified facts from proposals; mark unfinished sections with `**[DRAFT - input wanted]**` and cite sources or mark `**[source wanted: ...]**` for facts without sources
- 4.Run the completeness check before handing to reviewers: no unresolved placeholders, missing acceptance criteria, undefined references, unverifiable outputs, or outcomes without implementable direction
- 5.Use appendices (A, B, etc.) for config examples, glossaries, or inventories that would bury the main text; keep facts in one place and link rather than repeat
Use cases
- Writing an RFC or design document proposing a system architecture change with trade-offs and alternatives
- Drafting a migration plan that names costs, benefits, and residual risks for teams affected by the change
- Creating a spec or proposal that must persuade stakeholders by separating fact from proposal and showing what was analyzed
- Scoping a change request or feature proposal with explicit goals, non-goals, and open questions assigned to owners
- Documenting a technical decision with grounding facts, definitions, and appendices to avoid burying the main argument
- Technical writers and engineers drafting proposals or design documents
- Team leads and architects scoping changes that require stakeholder buy-in
- Anyone writing RFCs, specs, or migration plans that argue for a change
- Project managers and decision-makers needing structured, fact-based proposals
writing-design-docs FAQ
Use this skill for proposals, RFCs, design docs, specs, and migration plans that argue for a change or record a design. Use `recording-decisions` for already-taken decisions and `writing-runbooks` for procedures.
A Why & What box justifies each non-trivial choice by stating what the choice is, why it was made, what it does NOT solve, alternatives considered with their strongest arguments, and a fallback. Create one for any choice a reader might contest; skip it for uncontested choices.
Mark them `**[source wanted: ...]**` and keep writing. Never invent a citation and never silently drop the fact. The `technical-writing` skill rules hold whatever the deadline.
Unresolved placeholders (TBD, TODO, incomplete sentences), missing acceptance criteria, undefined references (types, endpoints, components), no verifiable output (no file path, command, or observable behavior), and what without how (outcomes with no implementable direction).
No strict line budget, but remove repetition and emphasis. Past roughly 800 lines, split the document and let the main document link to the parts.
Full instructions (SKILL.md)
Source of truth, from riekelt/technical-writer.
name: writing-design-docs description: Use when writing a proposal, RFC, design document, spec, or migration plan - anything that argues for a change, records a design, or asks readers for input on one. Encodes the proposal skeleton, the Why & What decision box, and the completeness checks. Use whenever a change needs arguing or scoping in writing, even if the user just says "write up the approach".
Writing design docs
REQUIRED BACKGROUND: the technical-writing skill (read-first, hard rules, truth rules, style).
Overview
A design document is a proposal made discussable: conclusion first, every non-trivial choice in a Why & What box, costs named next to benefits, and fact separated from proposal.
When to invoke, and not
Invoke for anything that argues for a change or records a design: proposals, RFCs, design docs, specs, migration plans, "should we" documents. Do NOT invoke for recording an already-taken decision (recording-decisions), for procedures (writing-runbooks), or for status reports.
Under pressure: a proposal persuades with its numbers and its named costs, and the register rules hold whatever the deadline (the technical-writing rule; "punchy" is not an override). When supplied facts arrive without sources, mark them **[source wanted: ...]** and keep writing (see references/truth.md in the technical-writing skill); never invent a citation and never silently drop the fact.
Skeleton
# Title: what the document does
**Subtitle pinning the scope in one sentence**
| | |
| -------------- | ------------------------------------------ |
| **Status** | Draft / Request for comments |
| **Owner** | [team or role] |
| **Scope** | [explicit, including what falls outside] |
| **Related** | [links to sibling documents] |
| **Audience** | [who must read this] |
---
## 1. Summary
[The conclusion immediately. Not the occasion, not the method.]
## 2. [Context / what was analyzed]
## 3. [The analysis, split per question]
## n. Open questions
## n+1. Benefits and costs
[Both. Benefits alone reads as a sales pitch.]
## n+2. Residual risks and what not to do
[Only when the design hands work to other teams.]
---
*Closing line: which parts are fact and which are proposal, and where input is wanted.*
Structure rules
- Number chapters and cite them as
ch. 7.1. - Goals and non-goals both. The non-goals (or "explicitly not changed") section states what stays unchanged.
- Definitions before behavior when a term is ambiguous: pin "responded", "eligible", "stale" before using them.
- A grounding section pins the facts the design rests on: a fact/source table, checked against a named commit. Separate verified facts from what will be built.
- Appendices take letters (Appendix A, B) and hold what would bury the main text: config examples, glossaries, inventories.
- A fact lives in one place. Link to it; never repeat it, not even across documents in the same repo.
- Mark unfinished parts with
**[DRAFT - input wanted]**instead of omitting them. - Open questions get owners: a name, a role, or an explicit "to be filled by".
- Residual risks and what NOT to do close the document when the design ships work to others.
- No line budget, but length from repetition or emphasis goes; past roughly 800 lines, split and let the main document link to the parts.
The Why & What box
Every non-trivial choice gets one; readers react to the box, not to the conclusion.
> **Why & What - [the choice in four words]**
>
> **What:** [the choice, one sentence, no justification]
>
> **Why:** [the reasoning. Also name what the choice does NOT solve.]
>
> **Alternatives considered:**
> - *[Alternative]:* [its strongest argument, and why it still lost]
>
> **Fallback:** [what survives if this does not work]
- An alternative dismissed without its strongest argument is a strawman. Name that argument.
- Admitting what the choice does not solve makes the document more credible.
- No box for choices nobody would contest; that is noise.
- An alternative that appears nowhere else in the document does not belong in the box: the reader would never consider it. One such rejection can be justified; several short ones in a row mean the box is padded.
Tone
- The document stays a proposal: "we propose" and "whether that convinces is up to you", not "this becomes the way of working". It sets the direction and leaves the detailed choices open.
- Name what it costs. The benefits chapter ends with the price: what gets harder, what people must unlearn, which freedom disappears.
- No superlatives, no promise language. Concrete figures and verifiable statements.
- The expected outcome may be negative; say so up front: "the expected outcome is that the current queue beats the proposed rewrite; that is a useful result."
Completeness check
Before handing a spec or plan to a reviewer or executor, check the five vagueness defects:
- Unresolved placeholders: any literal TBD, TODO, "fill in later", or clearly incomplete sentence (a marked
**[DRAFT - input wanted]**block is deliberate; an unmarked gap is a defect). - Missing acceptance criteria: a requirement with no concrete, independently testable success condition.
- Undefined references: a type, endpoint, component, or table mentioned but defined nowhere.
- No verifiable output: a task producing nothing a reviewer could inspect (no file path, no command, no observable behavior).
- What without how: an outcome with no implementable direction ("handle errors appropriately" with no definition of appropriate).
For execution plans, add per task: goal, exact files, the change shown, tests with concrete scenarios, and the verify command. Explain any confusing leftover (an odd directory name, a legacy alias) rather than leaving it puzzling.
Related skills
More from riekelt/technical-writer and the wider catalog.

writing-issues
Write tracker items that survive without you—clear outcomes, testable acceptance criteria, and named owners.

writing-postmortems
Write blameless, evidence-based postmortems and incident reports that outlive the crisis.

writing-runbooks
Write operational documentation—runbooks, setup guides, release procedures, migration guides—that people execute under time pressure.

diagramming-processes
Diagram business processes, workflows, and system interactions as maintainable source code.

multiplayer-game
Pragmatic patterns for building multiplayer games with matchmaking, tick loops, realtime state, and validation.

rivet-actors
Actors: The primitive for agent orchestration.