LabHub

Blog

The Complete Guide to Design Docs: Documents That Preserve Decisions and Documents That Vanish

한국어English日本語

Introduction

Design documents end up in one of two piles. There are documents that answer the question "why did we build it this way?" six months later, and documents whose link nobody can find by then. The difference is not prose quality. It is what got recorded, and where in the organization that record is anchored.

This blog already has Persuasive Writing for Engineers — how design docs and RFCs get approved and Writing as an Engineering Skill. Those two posts are about rhetoric and approval: how to write so people read, and how to get a document through. This post covers what comes before and after. It treats a document not as prose but as the team's decision-making infrastructure, and works through which format to use when, how to run the review as a process, how a decision expires, and the ways documents fail. The goal is not a well-written document but a document that preserves a decision.

The anchor reference is "Design Docs at Google." Definitions are quoted from it, but the weight here falls on the boxes that stay empty in practice and the procedures that collapse most often.


1. When to Write a Document and When Not To

"Design Docs at Google" defines a design doc as an informal document written before coding, and says what it should carry is "the high level implementation strategy and key design decisions with emphasis on the trade-offs." The same article says an engineer's job is "not to produce code per se, but rather to solve problems." Put those two sentences together and you get the criterion. No trade-offs, no document.

1-1. When You Can Skip It

1-2. When You Must — Five Screening Questions

QuestionWhy a "yes" means you need a document
Does reversing this cost person-weeks?An irreversible decision needs its rationale recorded at decision time
Are two or more teams bound by this decision?Without an agreement point, each team builds on different assumptions
Are there two or more reasonable alternatives?Without recorded rationale, the same argument returns in six months
Does the data model or an external contract change?The migration procedure is itself a design problem
Does it involve a security, privacy, or regulatory judgment?Who decided, and when, must be recorded

Two or more yes answers means write the document. One yes is often enough for a 1-pager. Zero means write code first.

1-3. The Common Mistake

Many organizations decide document-or-not by size: "anything over three weeks needs a design doc." Size is only a proxy. Three weeks of repetitive work needs no document; a half-day change to a storage format does. The real criteria are cost of reversal and the existence of alternatives.


2. Four Document Types and How to Pick One

The phrase "design document" covers four different objects. Blur them together and the document does no work at all.

2-1. 1-pager — Agreeing That the Problem Is Real

2-2. Design Doc — Implementation Strategy and Trade-offs

2-3. ADR — One Decision as an Immutable Record

2-4. RFC — Agreement Across Organizational Boundaries

2-5. Which One, When

SituationFormat
You do not yet know whether the problem is real1-pager
Solutions diverge and the team can decide internallyDesign doc
The decision is already made and only the rationale needs recordingADR
You are setting a rule other teams must followRFC

2-6. A Contested Point — Heavyweight RFC vs Lightweight ADR

The industry genuinely disagrees here. Rather than pick a winner, look at the axes.

Plenty of organizations run both. An RFC sets the direction, and inside that direction each team records its detailed choices as ADRs.


3. The Standard Sections and What Each One Actually Does

The typical structure "Design Docs at Google" lists is Context and Scope, Goals and Non-Goals, The Actual Design, Alternatives Considered, and cross-cutting concerns such as security, privacy, and observability. Copying the shell does nothing, so here is each box rewritten as the function it performs.

[Header]  Title / Author / Last updated / Status / Review deadline

1. Context and Scope        why this problem exists now
2. Goals                    what must become true for this to be a success
3. Non-Goals                things that could reasonably have been goals but are not
4. The Actual Design        the design and the trade-offs inside it
5. Alternatives Considered  what was considered and rejected, and under what conditions
6. Cross-cutting concerns   security / privacy / observability / operations

3-1. Four Lines the Header Must Carry

Status (draft, in review, accepted, deprecated), last updated, owner, review deadline. Without these four lines, a reader six months later cannot judge whether to trust the document. The presence of those four lines affects document lifetime more than the quality of the body does.


4. Non-Goals and Alternatives Considered — the Two Boxes Most Often Empty

4-1. Non-Goals Are Not a List of Things You Are Not Doing

A Non-Goal is something that could reasonably have been a goal but is not one this time. Listing things nobody expected in the first place only fills the box.

Good Non-Goals share one property: the reader feels a twinge of disappointment. If nobody is disappointed, you have not locked any scope.

4-2. The One Anti-Pattern in Alternatives Considered

The most common failure is the straw-man alternative built so your own option wins. If you list three and two are obviously bad, the document did not evaluate alternatives; it decorated a conclusion.

Forcing one line under each alternative fixes most of it.

What would have to be true for alternative B to win?
→ "If write QPS grew 10x and the team added two more operators, B would be better."

That one line does three jobs at once. First, it is evidence the alternative was taken seriously. Second, when circumstances change six months later, the re-evaluation trigger is already written down. Third, it gives reviewers something concrete to disagree with. "Wouldn't B be better?" becomes "your 10x QPS assumption is wrong."

4-3. The One Alternative You Must Always Include

Doing nothing. Write down what it keeps costing to stay where you are, and the project's justification gets tested. Filling in this box does occasionally cancel a project, and that is the document doing its job.


5. Running the Review

Document reviews fail almost exactly the way code reviews do. The principles Google's engineering practices set out for code review transfer directly.

5-1. Speed Breaks Before Quality Does

Translated to documents: in an organization with slow reviews, people stop writing documents. The first cause of death for a documentation culture is not the burden of writing but response latency.

5-2. Lower the Approval Bar to Keep Reviews Moving

"The Standard of Code Review" says reviewers "should favor approving a CL once it is in a state where it definitely improves the overall code health of the system being worked on, even if the CL isn't perfect." The same applies to documents. The approval bar is improvement, not completeness. Wait for the perfect document and it stays a draft forever.

The rest of that document holds too. Technical facts and data beat personal preference. Non-mandatory polish is prefixed with "Nit: " so the author may ignore it. And it says explicitly: "Don't let a CL sit around because the author and the reviewer can't come to an agreement." That clause matters even more for documents. If you have not decided in advance who decides when agreement fails, the document stays open forever.

5-3. Three-Stage Review

The document lifecycle "Design Docs at Google" describes is creation and rapid iteration, then review, then implementation and iteration, then maintenance and learning. Splitting the review stage into three layers raises the pass rate sharply.

  1. One-person review: send it first to the single person most likely to object. Half the problems die here.
  2. Small-group review: the three to five people directly affected. Run it as asynchronous comments.
  3. Broad announcement: send everyone else the link plus a decision deadline. No objection means it passes.

Hold a meeting only when asynchronous review fails to converge. When objections split into two camps and comments pass twenty, that is when a 30-minute meeting earns its place.

5-4. Label Comments in Three Kinds

Without labels, every comment reads like a blocker. Organizations where document review feels frightening are usually organizations without these labels.

5-5. Decision Deadlines

Use a deadline instead of a quorum. Write at the top of the document: "if there are no objections by 6pm on August 20, we proceed with this option." A quorum lets one busy person hold a document hostage indefinitely; a deadline converts silence into explicit consent.


6. Decisions Have an Expiry Date — ADR Status Transitions

The point of an ADR is not the format but the immutability. Edit the body of a decision already made and you erase the constraints under which it was made. Because a decision's rationale is bound to the constraints of its moment, when the constraints change you do not amend the decision — you make a new decision and mark the old one as superseded.

Proposed ──accept──▶ Accepted ──replace──▶ Superseded (by ADR-0031)
    │                   │
    │ reject            │ no longer followed (no replacement)
    ▼                   ▼
 Rejected           Deprecated

6-1. Write the Re-Evaluation Trigger Alongside the Decision

Date-based expiry ("revisit in a year") almost never happens. It has to be a condition for the alarm to ring.

# ADR-0012: Use a relational database for order state

- Status: Accepted (2026-08-15)
- Deciders: Payments team
- Re-evaluation trigger: orders table exceeds 500M rows, or write QPS exceeds 3,000

### Context
Current volume is 400K orders per day, peak write QPS 120. The transaction boundary spans orders, payments, and inventory.

### Decision
A single relational database instance plus read replicas.

### Consequences
- Better: transaction boundaries do not have to be handled in application code
- Worse: write scaling is tied to vertical scaling
- Metrics to watch: write QPS, table row count, replication lag

Put the metrics named in the trigger on an actual dashboard and the document stays alive. Without that link, the trigger is just a sentence.

The line forced under each alternative in 4-2 — "what would have to be true for this to win?" — becomes the re-evaluation trigger verbatim. A sentence written once in the design doc gets reused as the ADR's expiry condition.


7. Documents Go Stale — What to Do About It

"Design Docs at Google" admits design docs "like all documentation, tend to get out of sync with reality over time," and offers updating the original or amending and linking follow-ups. This problem cannot be eliminated; you only get to choose how to manage it.

7-1. Three Strategies and What They Fit

StrategyWhat it doesFits
Updatekeep the body currentOperational docs, onboarding, API reference
Freeze plus follow-up linkleave the body, link the successor at the topDesign docs
Immutable plus status transitionsnever edit; supersede with a new documentADRs, RFCs

The most common mistake is trying to keep a design doc alive. A design doc is a record of judgment at a point in time. Keep editing it and you lose the answer to "as of when is this document true?" Freeze it when implementation ends and announce what changed in one line at the top.

> This document reflects the design as of 2026-08-15. The cache layer was
> replaced by ADR-0031 on 2026-11-02. See that document for the current shape.

7-2. Cheap Devices for Detecting Staleness

7-3. Deletion Is Also Maintenance

Do not delete a retired document. Flip its status to deprecated and remove it from search. Deleting breaks links; leaving it circulates wrong information. Status plus search exclusion is the compromise.


8. The Ways Documents Fail

Eight failure modes, each as symptom, cause, and response.

8-1. The Implementation Manual

8-2. Approval Theater

8-3. Straw-Man Alternatives

8-4. Unbounded Scope

8-5. The Document With No Decision

8-6. Review Stalls

8-7. Decisions That Live Only in Chat

8-8. Documents That Outlive the Code and Lie

8-9. The Claim That Design Docs Slow Teams Down

This is also contested. One side says writing and reviewing delays the start; the other says burning three weeks in the wrong direction costs more than two days of writing. There are three axes. Cost of reversal (when it is cheap, experimenting beats documenting), number of stakeholders (when it is large, agreement is unreachable without a document), and review response speed (in a slow organization, documents really do become the bottleneck). The third axis matters most. Slowness is often caused by review latency rather than the document itself, and if so the thing to fix is the response time, not the documentation policy.


Quiz: Check Your Understanding

Quiz 1: Eight people approved a design doc and there are zero comments. What should you suspect first?

Answer: That nobody read it. Suspect that review has become a rite of passage.

Explanation: A meaningful design doc carries trade-offs, and every trade-off has a losing side. If the losing side said nothing, either it was not read or the cost of objecting is too high. There are two responses: put a one-person review in front by sending it to the single person most likely to object, and introduce blocking/question/preference labels to lower the cost of objecting.

Quiz 2: Alternatives Considered lists three options and two of them are obviously bad. What is wrong with the document?

Answer: It did not evaluate alternatives; it decorated a conclusion. This is the straw-man alternative anti-pattern.

Explanation: A genuinely considered alternative wins under some set of conditions. Forcing one line under each alternative — "what would have to be true for this to be selected?" — makes most of this problem disappear. That line later gets reused verbatim as the ADR's re-evaluation trigger, so it is worth forcing twice over.

Quiz 3: A two-year-old ADR no longer matches the current situation. Should you edit its body?

Answer: No. Leave the body alone, change the status to Superseded, and record the new ADR number.

Explanation: An ADR's value is in "under what constraints, knowing what, was this decided?" Edit the body and that information disappears, leaving just another document describing the present. Making the supersession explicit lets you follow the lineage of a decision and check whether the premises of the earlier judgment have changed when the same argument reappears. For the same reason, Rejected ADRs are never deleted either.

Quiz 4: A team wants a rule that says "any work over three weeks requires a design doc." What is the problem?

Answer: Size is only a proxy. The real criteria are the cost of reversal and the existence of reasonable alternatives.

Explanation: Three weeks of simple repetitive work needs no document, while a half-day change to a storage format or an identifier scheme does. A size rule causes two things at once: formal documents get mass-produced for long work with no trade-offs, and short but irreversible decisions pass by unrecorded. The screening questions are cost of reversal, number of teams bound, number of alternatives, whether an external contract changes, and whether a security or regulatory judgment is involved.

Quiz 5: After introducing an RFC process, people complain that "documents made development slower." What should you measure first?

Answer: Not writing time — measure review response latency and how long documents sit in draft.

Explanation: Google's code review documentation says "most complaints about the code review process are actually resolved by making the process faster," and sets one business day as the maximum response time. Documents work the same way. If the bottleneck is writing, trimming the template helps; if the bottleneck is waiting, trimming the template changes nothing. Cutting the format before measuring only lowers document quality while leaving the delay in place.

Quiz 6: A team keeps its finished design docs continuously up to date. What is the problem?

Answer: A design doc is a record of judgment at a point in time. Keep editing it and you lose the answer to "as of when is this true?"

Explanation: Management strategy depends on the document's nature. Operational, onboarding, and API reference docs get updated; design docs get frozen when implementation ends, with changes announced by a link at the top; ADRs and RFCs are never edited in place and are managed by status transitions. Turn a design doc into a living document and the constraints at decision time get erased, leaving a document that cannot answer why it was built that way.


Conclusion

What a document is trying to preserve is not an explanation but a decision and the conditions of that decision. With the conditions written down, the document announces its own expiry; without them, it quietly becomes a lie.

The three cheapest improvements in practice are these. First, enforce the four header lines — status, last reviewed, owner, decision deadline — on every document. Second, attach "what would have to be true for this to win?" to every alternative. Third, set review response time at one business day and actually measure it. None of the three lengthens the template, and all three extend document lifetime substantially.

Formats will differ by organization. But a document that cannot answer "what was decided," "why was it decided that way at the time," and "when should we look at it again" is a document that vanishes, whatever its format.


References


Further reading

Complete Guide Series

Comments

No comments yet.

Sign in to leave a comment