Google-style design doc
At Google the design doc is where an engineer reasons in prose before touching
code, and where reviewers kill a flawed approach while changing it is still
cheap. A doc that lists only the chosen design, skipping the argument for it, is
a status update in a decision's clothing: no reader can tell whether the author
weighed anything else or simply picked the first idea that compiled.
Method
- Open with context, hold back the solution. The first section states the
problem, who has it, and what exists today. An engineer three teams away
should grasp why the work matters before meeting a single class name. If you
cannot describe the problem without naming your fix, you have not understood
it yet.
- Split goals from non-goals in plain lists. Write what the design must
achieve, then the tempting adjacent problems you are deliberately leaving
alone. Non-goals are the section reviewers cite most: they stop scope creep
and keep each meeting from relitigating the boundary.
- Argue the alternatives considered, do not list them. Give each serious
option a subsection: how it works and the specific reason you rejected it.
Two options waved off in one line each signal an author who decided first and
documented after. Include "do nothing" whenever it is plausible.
- Make the chosen design concrete enough to attack. Data model, API shapes,
the failure and rollback path, and the migration from today's state. Vague
designs pass review and fail in code because reviewers had nothing sharp to
push against.
- Budget the cross-cutting costs up front. Add a short pass on security,
privacy, latency, and on-call load. Reviewers from those areas read straight
to their paragraph, and a missing one bounces the doc back before the design
is even discussed.
- Circulate for comment, then hold the review. Share the doc days ahead,
let reviewers leave inline comments, and resolve each in the doc before or
during a scheduled review with the tech lead and affected teams. Approval is
an owner marking it LGTM, not silence on a thread.
Litmus tests
- Could a reviewer who dislikes your choice find the paragraph that answers
their objection, or would they have to raise it live?
- Does every rejected alternative carry a reason specific to it, not boilerplate
that would fit any option?
- Are the non-goals load-bearing, so that deleting one would widen scope?
Boundaries
A one-day bug fix needs no doc: the ritual pays off only when a wrong approach
costs more than writing the argument does. Follow the team's template and
approval convention where one exists, and defer to the rfc-process skill when
the decision needs a wider, time-boxed audience than a single review can
gather.
1---2name: design-doc-google-style3description: Write a Google-style design doc that argues a decision through context, goals, and rejected alternatives before code is written. Use when a change is large enough that picking the wrong approach is expensive to undo.4---56# Google-style design doc78At Google the design doc is where an engineer reasons in prose before touching9code, and where reviewers kill a flawed approach while changing it is still10cheap. A doc that lists only the chosen design, skipping the argument for it, is11a status update in a decision's clothing: no reader can tell whether the author12weighed anything else or simply picked the first idea that compiled.1314## Method15161. **Open with context, hold back the solution.** The first section states the17 problem, who has it, and what exists today. An engineer three teams away18 should grasp why the work matters before meeting a single class name. If you19 cannot describe the problem without naming your fix, you have not understood20 it yet.212. **Split goals from non-goals in plain lists.** Write what the design must22 achieve, then the tempting adjacent problems you are deliberately leaving23 alone. Non-goals are the section reviewers cite most: they stop scope creep24 and keep each meeting from relitigating the boundary.253. **Argue the alternatives considered, do not list them.** Give each serious26 option a subsection: how it works and the specific reason you rejected it.27 Two options waved off in one line each signal an author who decided first and28 documented after. Include "do nothing" whenever it is plausible.294. **Make the chosen design concrete enough to attack.** Data model, API shapes,30 the failure and rollback path, and the migration from today's state. Vague31 designs pass review and fail in code because reviewers had nothing sharp to32 push against.335. **Budget the cross-cutting costs up front.** Add a short pass on security,34 privacy, latency, and on-call load. Reviewers from those areas read straight35 to their paragraph, and a missing one bounces the doc back before the design36 is even discussed.376. **Circulate for comment, then hold the review.** Share the doc days ahead,38 let reviewers leave inline comments, and resolve each in the doc before or39 during a scheduled review with the tech lead and affected teams. Approval is40 an owner marking it LGTM, not silence on a thread.4142## Litmus tests4344- Could a reviewer who dislikes your choice find the paragraph that answers45 their objection, or would they have to raise it live?46- Does every rejected alternative carry a reason specific to it, not boilerplate47 that would fit any option?48- Are the non-goals load-bearing, so that deleting one would widen scope?4950## Boundaries5152A one-day bug fix needs no doc: the ritual pays off only when a wrong approach53costs more than writing the argument does. Follow the team's template and54approval convention where one exists, and defer to the rfc-process skill when55the decision needs a wider, time-boxed audience than a single review can56gather.