RFC / Design Docs
A good design doc makes the decision easy to challenge: context, options, trade-offs, and a clear recommendation. Length is not rigor.
Workflow
- Problem and non-goals first — what success looks like and what you refuse to solve now.
- Constraints: scale, latency, compliance, team skills, deadlines, existing systems.
- Options (at least two real ones, plus "do nothing" when relevant).
- Recommendation with the decisive trade-offs.
- Detailed design only for the chosen path: data model, APIs, failure modes, rollout, observability.
- Open questions and decision log.
Output format
# RFC: <title>
**Status:** draft | review | accepted | superseded
**Authors:** …
**Last updated:** …
## Summary
One short paragraph: what we propose and why.
## Motivation
Problem, evidence, urgency.
## Goals
- …
## Non-goals
- …
## Constraints
- …
## Options considered
### Option A — …
Pros / cons / cost
### Option B — …
Pros / cons / cost
## Recommendation
Which option and the decisive reasons.
## Detailed design
### Overview
### APIs / interfaces
### Data model
### Failure modes and consistency
### Security and privacy
### Rollout and migration
### Observability
### Testing strategy
## Alternatives rejected (brief)
…
## Open questions
- …
## Success metrics
How we know this worked 2–6 weeks after ship.
Rules
- Every option must be viable enough to be chosen; strawmen waste readers.
- Label assumptions. Do not invent traffic numbers; use ranges or TODOs.
- Prefer diagrams described in text or mermaid only when they clarify.
- Security, multi-tenant isolation, and data retention get explicit sections when user data or auth is involved.
- Rollout must cover dual-write/dual-read, flags, and rollback when state changes.
- Keep the first half readable by an eng manager; deep detail can follow.
Edge cases
- Early brainstorm: produce a short RFC-lite (Summary, Options, Recommendation, Open questions) and say what research is needed.
- Revising an existing RFC: keep a Decision log of what changed and why.
- Cross-team political choice: make trade-offs explicit and fair; avoid burying the cost on the other team without stating it.
- User wants only the API section: still restate goals/non-goals in brief so the API is grounded.