February 2026

The Anatomy of a Design Doc

A guide to writing engineering design documents that actually drive alignment — what goes in them, why each section exists, how reviewers read them, the social dynamics no one talks about, how to think through trade-offs that signal seniority, and the writing process that produces good docs. For engineers who want intuition, not templates.


The 1,000-Foot View

Why Design Docs Exist

A design doc is three things at once: a thinking tool that forces clarity before code, a persuasion artifact that builds consensus, and a decision record that explains why things were built the way they were. The doc is the medium — the real output is aligned understanding across everyone who needs to say yes.

~65%
of issues caught in design
review vs. code review
3–10×
cheaper to fix flaws
before implementation
2–5 pg
ideal length for
most design docs
~40%
of doc value lives in
alternatives considered
The core test

If someone joins your team 6 months after the project ships and reads only the design doc, they should understand: what problem was solved, what approaches were considered, why this one was chosen, and what trade-offs were accepted. If your doc doesn't pass this test, it's incomplete.

Decision Density — The Editing Heuristic

Good docs maximize decisions per page. Bad docs maximize words per page. Every paragraph should do one of three things: frame a decision, present evidence for a decision, or record a decision. Paragraphs that do none of these should be cut. This single heuristic explains why "The Novel" anti-pattern fails — 20 pages with 4 decisions is worse than 4 pages with 4 decisions. When editing your doc, ask of every paragraph: "which decision does this serve?" If you can't answer, delete it.

When NOT to Write a Design Doc

You don't need one for: bug fixes with obvious solutions, refactors that don't change behavior or interfaces, features where the implementation path is well-established and uncontroversial, or changes with blast radius limited to a single file. The test: is there a genuine decision to be made, and does more than one person need to agree on it? If no, a CL description suffices. Over-documenting erodes trust — people stop reading carefully when most docs didn't need to exist.


Context

Where Design Docs Fit

Design docs sit between "what should we build?" (product) and "how exactly does the code work?" (implementation). Confusing a design doc with adjacent artifacts is one of the most common mistakes.

ArtifactAnswersAudienceOwned By
PRDWhat should we build and why does the user want it?PM, eng, design, leadershipProduct Manager
Design DocHow should we build it technically, and why this approach over alternatives?Engineers, TL, cross-teamEngineer (you)
RFCShould we adopt this standard/practice/migration org-wide?Broad engineering orgSenior eng / TLM
Tech SpecWhat are the exact APIs, schemas, and implementation details?Implementing engineersEngineer
PostmortemWhat went wrong, why, and how do we prevent it?Team + incident reviewersOn-call / incident lead
The handoff principle

A design doc should be readable without the PRD but reference it. It should make the tech spec nearly mechanical to write — if someone reads your design doc and still can't predict what the tech spec will say, your doc is too abstract. The design doc is the "why this approach" layer between "what to build" and "the exact code."


Deep Dive

Sections & Their Weight

Not all sections are created equal. Reviewers spend disproportionate time on certain sections — and the sections that take the most writing time are often not the ones that carry the most value.

Where Reviewers Actually Spend Their Time
SectionPurposeWeightCommon Mistake
Title & MetadataAuthor, reviewers, status, date. Sets scope expectations.LowMissing reviewer list — ambiguous ownership
Context & ProblemWhy now? What's broken? Best docs quantify the pain with data.HighJumping to solution without establishing pain
Goals & Non-GoalsScope boundaries. Non-goals are as important as goals — they prevent scope creep.Very HighVague goals that can't be evaluated post-launch
Proposed SolutionArchitecture, data models, APIs, flows. Detail should match project complexity.CriticalToo much code-level detail, not enough architecture
AlternativesWhat else could we do? Why not those? Proves you explored the solution space.CriticalToken alternatives never seriously evaluated
Trade-offsWhat are we explicitly giving up? Latency vs cost, consistency vs availability.Very HighPretending the chosen approach has no downsides
Risks & MitigationsWhat could go wrong? Technical, org, and dependency risks with concrete responses.HighListing risks without concrete mitigation plans
Milestones & RolloutPhased delivery, feature flags, rollback criteria, success metrics, monitoring.MediumBig-bang launches with no incremental validation
Open QuestionsThings you don't know yet. Focuses reviewer energy on what actually matters.HighOmitting to appear more confident

The Power of Diagrams

Good design docs almost always include at least one architecture diagram. A diagram compresses 500 words of system description into something a reviewer absorbs in 10 seconds. The best diagrams show data flow (what moves where), system boundaries (what's yours vs. external), and failure domains (where blast radius stops). If your doc describes interactions between 3+ systems and has no diagram, you're making reviewers work unnecessarily hard. A rough Excalidraw sketch beats a missing diagram every time.


Process

How a Design Doc Gets Written and Reviewed

The process matters as much as the structure. The most important work happens before the doc exists, and the first draft is always wrong in important ways.

Before You Write a Single Word

The best design docs are pre-aligned. Before opening a blank document, have conversations with the 2–3 people whose opinions matter most: your TL, the person who'll review it most critically, and anyone whose system you're depending on. These conversations answer: "Am I solving the right problem? Is my general direction sane? Are there constraints I don't know about?" A 20-minute hallway conversation can prevent a week of review back-and-forth. If your TL is surprised by anything in the design doc, you skipped this step.

Phase 0
Pre-Align
Hallway chats
~1–3 conversations
Phase 1
Brain Dump
Messy first draft
~1–2 days
Phase 2
Self-Review
Restructure & gaps
~0.5–1 day
Phase 3
Trusted Review
1–2 senior peers
~1–2 days
Phase 4
Broad Review
Full reviewer list
~3–5 days
Phase 5
Approved
LGTM from leads
Phase 3: The most underrated step

Pick reviewers who are skeptical of your approach, not cheerleaders — you want someone who'll find holes before the broad audience does. The 1–2 days this adds saves a week of back-and-forth later. At Google, this is often your TL or a senior peer on an adjacent team who understands the problem space.

Expect 2–3 Major Revisions

Your first draft will be wrong in important ways — maybe your cost model is off, maybe you missed a dependency, maybe the alternatives are thin. That's normal. The best engineers treat early feedback not as criticism but as the design process working. A doc that goes through zero revisions either wasn't reviewed carefully or wasn't ambitious enough.


The First 30 Minutes

The Order That Produces Good Docs

Most engineers write design docs in section order: context, goals, solution, alternatives. This is wrong. The writing order matters as much as the final structure — it shapes how you think.

1

Start with the Problem Statement

Not the solution. Write 3–5 sentences about what's broken, who it affects, and why it matters now. If you can't do this without mentioning your proposed solution, you haven't separated the problem from the approach. Force yourself.

2

Write Non-Goals Immediately

The moment your scope starts expanding in your head — "oh, we could also handle X" — write it as a non-goal. Do this throughout the drafting process, not at the end. Non-goals are live scope defense, not a post-hoc section.

3

Write Alternatives BEFORE the Solution

This is counterintuitive but critical. If you write the solution first, your alternatives will be thin strawmen designed to lose. By exploring 3–4 approaches first, you often discover that your original idea isn't the best one — or you find a hybrid that's better than any single approach.

4

Write Open Questions Throughout

Keep a running list as you write. Every time you think "I'm not sure about this" or "I need to check with team X," capture it immediately. Don't wait until the end. The open questions section should be a curated version of notes you took during writing, not something you brainstorm after you're "done."

5

Write the Solution Last

By this point, if you've done the problem framing, alternatives, and trade-off analysis properly, the solution section should almost write itself. It becomes "obviously, we chose Option A because..." rather than a standalone monolith you have to defend from scratch.

Time Allocation — Actual vs. Optimal

Patterns

Good vs. Bad — Side by Side

The difference between a mediocre and excellent design doc comes down to specificity. Every "weak" example below is something reviewers see weekly. Every "strong" example reflects real decision density.

Problem Statement
Weak
Our current system is slow and we need 
to make it faster. Users have been 
complaining about performance.
Strong
P95 latency for /api/feed degraded from 
120ms→840ms over 6 months as DAU grew 
2M→8M. 23% of users on 3G connections 
experience timeouts. This correlates with 
a 12% drop in D7 retention for new users 
in SEA markets (dashboard: go/feed-perf).
Goals & Non-Goals
Weak
Goal: Improve performance
Goal: Better user experience
Goal: Scalable architecture
Strong
Goal: P95 latency ≤200ms at 10M DAU
Goal: Zero-downtime migration path
Goal: ≤$500/mo incremental infra cost
Non-goal: Redesigning feed ranking 
  (separate effort, go/feed-ranking-q3)
Non-goal: Supporting offline mode
Non-goal: Backward compat with v1 API 
  (deprecated, 0.3% of traffic)
Alternatives Considered — Full Anatomy
Weak
We could use Redis but decided not to.
We considered a rewrite but it would 
take too long.
Strong
Option A: Redis caching layer
+ Reduces DB reads by ~80%
+ Team has operational exp (3 yr)
+ Est: 6 weeks, 1 eng
− Cache invalidation complexity
− New operational dependency
− $340/mo for r6g.xlarge cluster

Option B: Read replicas + connection pool
+ Simpler architecture, no new deps
+ No cache coherence issues
− Only ~3× throughput gain
− Doesn't address serialization overhead
− Est: 4 weeks, 1 eng

Option C: Do nothing + vertical scaling
+ Zero eng time
− Buys ~3 months at current growth
− Monthly cost scales linearly with DAU

Decision: Option A. 80% read reduction 
gives headroom for 2 years at projected 
growth. We accept invalidation complexity 
and mitigate via event-driven updates 
(§4.2). B was close but doesn't solve 
the serialization bottleneck driving 60% 
of current latency.
Open Questions
Weak
[Section omitted, or:]
No open questions at this time.
Strong
1. Cache warming on deploy: cold cache
   → latency spike. Pre-warm from DB or 
   accept first-request penalty? 
   Need SRE input. (Owner: me, ETA 2/25)

2. Team X owns feed ranking — do they 
   need API contract changes? 
   Meeting scheduled 2/25. (Owner: me)

3. Cache hit rate instrumentation: per 
   user segment or per endpoint? 
   Affects dashboard design (§6.1).
   (Owner: @jsmith, ETA 3/1)

The Hardest Section

How to Think About Trade-offs

Trade-offs are the hardest section to write well and the single biggest gap between L4 and L5 docs. Most engineers either skip this section or write vague platitudes. Here's how to think through them systematically.

The Three Types of Trade-offs

Trade-offs you chose

"We chose eventual consistency (30s TTL) over strong consistency because feed freshness ≤30s is acceptable per PM, and strong consistency would require a write-through cache that adds 4 weeks and doubles operational complexity." These are decisions — you had a choice and you made it with eyes open.

Trade-offs imposed by constraints

"We're accepting single-region deployment because multi-region is blocked by the billing team's migration timeline (Q4). This means a regional outage takes down the feed for all users." These aren't your choices — they're reality. Naming them explicitly prevents reviewers from thinking you missed them.

Trade-offs you're deferring

"We're not addressing the write amplification problem in this design. At current write volume (~200 QPS), it's manageable. At 2000 QPS (projected Q2 next year), we'll need a follow-up design. Tracked at go/feed-writes-followup." Time-boxing technical debt is L5 thinking.

How to Quantify When You Don't Have Exact Numbers

You almost never have exact numbers. That's fine. What matters is order of magnitude. "This will cost somewhere between $200–500/month" is infinitely more useful than "this will have some cost." "Latency will increase by roughly 50–100ms" is better than "latency will increase slightly." Use back-of-envelope math, state your assumptions, and let reviewers challenge the assumptions rather than the absence of numbers.

The trade-off sentence template

Every trade-off can be expressed as: "We are choosing [thing A] over [thing B] because [quantified reason], and we accept [specific downside] which manifests as [concrete consequence]." If you can't fill in every blank, you haven't thought it through. If the "quantified reason" is just "it's better," you're not quantifying.


The Unspoken Dimension

Design Docs as Persuasion

No one says this out loud, but design docs are political documents. They build consensus, manage expectations, and — at companies like Google — serve as primary artifacts for promotion. Understanding the persuasion layer makes your docs dramatically more effective.

The Narrative Arc

Every good design doc follows: tension (a problem worth solving) → exploration (the solution space and trade-offs) → resolution (why this approach) → confidence (rollout plan and failure modes). The reader should feel the problem's weight before encountering the solution, understand why alternatives were rejected before reading the chosen approach, and feel confident in the rollback plan before approving.

What a Reviewer Experiences

Reading a good doc

"I understand the problem. I can see they explored the space thoroughly. The chosen approach makes sense given the constraints. I have one concern about failure mode X — oh, they addressed it in §5.3. I trust this person's judgment. LGTM."

Reading a bad doc

"Why are we doing this? This feels like the solution was decided first and the doc was written to justify it. Where are the alternatives? This risk section is suspiciously empty. I have 14 comments and we're going to need at least two more rounds. This is going to take 3 weeks."

Handling Disagreement

When a senior reviewer disagrees with your approach, the worst response is defensiveness. The best: "That's a good point — let me add Option D based on your suggestion and compare it explicitly." Treat feedback as the design process working, not as attack. If you genuinely believe your approach is right after incorporating feedback, state your reasoning clearly and escalate to the decision-maker (TL or area lead). Don't let unresolved disagreements rot — a doc in permanent "under review" is worse than no doc at all.

When Your TL Wants A and a Staff Engineer Wants B

This happens. The move is: document both approaches explicitly in the alternatives section with honest trade-offs. Make it clear you understand both perspectives. Then state your recommendation with reasoning. Let the decision-maker decide. Your job as the doc author is to create clarity around the decision, not to win. If your doc clearly frames the decision such that either the TL or the staff engineer can point to the analysis and say "this is why we chose X," you've succeeded regardless of which option wins.

The promo committee dimension (Google-specific)

At Google, design docs are often the primary evidence of technical depth in promotion packets. Promo committees look for: problem framing that demonstrates understanding beyond your immediate scope, alternatives that show thorough exploration, trade-off analysis that proves mature judgment, and cross-team impact awareness. A well-written design doc for a medium-complexity project can be more compelling for L5 than a brilliant solution to a narrow problem that was never documented. Your doc is your artifact — treat it accordingly.


Seniority Signals

What Separates L4 from L5 Design Docs

The bar shifts from "can you design a working system" to "do you demonstrate depth of reasoning about trade-offs, failure modes, and organizational impact." The radar below shows where the gap is widest.

L4 vs L5+ — Where the Gaps Are

The three biggest gaps: Alternatives Quality (L4 docs have 1 token alternative; L5 docs have 2–3 genuine ones with quantified comparison), Org Awareness (L4 treats the system in isolation; L5 acknowledges on-call burden, partner team capacity, migration cost), and Quantified Trade-offs (L4: "faster"; L5: "3× faster at $2.4K/month additional cost, payback in 6 weeks").

Quantified Trade-offs

Instead of "Option A is faster," write "Option A reduces P95 by 3× but increases storage cost by $2.4K/month and adds 1 new operational dependency." Numbers — even order-of-magnitude estimates — enable actual decision-making.

Failure Mode Thinking

Walk the data path and ask at every hop: "What if this returns garbage? What if this times out? What if this returns 10× the expected data?" Enumerate the top 5 failure modes with blast radius and recovery strategy. This is the skill reviewers look for most.

Organizational Awareness

"This adds a new pager to team X's rotation." "This requires team Y to migrate by Q3 — confirmed capacity with their TL." Acknowledging the human and organizational cost of technical decisions is L5+ territory.

Reversibility Assessment

Distinguish one-way doors (schema changes, public API contracts, data deletion) from two-way doors (internal implementation, feature flags). Call out which decisions are irreversible. Spend review energy proportional to reversibility difficulty.

Scope Discipline

"We will address X in a follow-up, tracked at go/feed-v2-followups." Explicitly deferring work shows you can resist scope creep. Non-goals are your strongest tool — they prove you know the boundaries.

Observability by Default

What metrics ship with the feature? What SLOs are defined? What does the monitoring dashboard look like? Monitoring as afterthought is L4. Monitoring as integral design — with alert thresholds and escalation policy — is L5+.


What Kills Docs

Anti-Patterns

Patterns that consistently produce docs that fail to drive alignment, waste reviewer time, or rot without resolution. If a reviewer has seen one, they've seen a hundred.

The Implementation Spec

Reads like a code walkthrough — method signatures, class hierarchies, pseudocode. Design docs describe what and why, not how at the code level. Implementation belongs in code comments and tech specs.

The Rubber Stamp

Written after the code is already done to satisfy process. Reviewers always detect this — the alternatives feel performative and there are zero genuine open questions. Destroys trust in the review process for everyone.

The Novel

20 pages when 5 would do. Low decision density. Buries critical choices in noise. Reviewers skim or abandon it entirely. If you can't express the core design in 2 pages, you don't understand it yet.

The Omitted Risk

Conspicuously avoids the elephant in the room — the migration risk, the SPOF, the flaky upstream. Reviewers always find it. Better to name it yourself with a mitigation than to have it surfaced as a "blocking concern."

The One True Path

Only the chosen solution, no alternatives. Signals tunnel vision or retroactive documentation. Even when the answer is "obvious," showing you considered alternatives builds reviewer confidence in your judgment.

The Scope Monster

Starts as a caching layer, ends up redesigning the data model, the API, and the deployment pipeline. Scope creep in the doc predicts scope creep in implementation. Aggressive non-goals are your defense.

The Orphan Doc

Approved but never updated as implementation diverges from design. Six months later the doc is actively misleading. Add a "Status" field at the top and update it when reality changes. A doc marked "SUPERSEDED — see go/feed-v3" is better than a stale doc treated as truth.


For Reviewers

How to Review a Design Doc Well

Good reviewing is a skill distinct from good writing. The goal is to improve the design, not to demonstrate your own expertise or rewrite the doc in your image.

≤ 3
major concerns per
review round
48h
target turnaround
time
80/20
architecture decisions
not formatting
The 5 questions every reviewer should ask

1. Is the problem clearly defined and worth solving at this priority?

2. Would the alternatives actually change my mind about the approach?

3. What's the worst failure mode and is it explicitly addressed?

4. Can this be built and rolled out incrementally, with rollback criteria?

5. What's missing that the author might not realize is missing?

"The best design review comment isn't 'I would do it differently.' It's 'What happens when X fails at 3am on a Saturday?'"

— Common wisdom across Google, Stripe, and Meta eng orgs

For Authors: How to Read Review Comments

Not all comments are equal. Blocking concerns (usually prefixed with "blocking:" or stated as "I can't approve until...") require resolution before approval. Strong suggestions ("I think you should consider...") are worth serious engagement. Nits ("optional: you could also...") can be addressed or acknowledged without changing anything. When you get 20 comments, triage first — answer the 3 blocking ones thoroughly, batch the nits, and don't let volume overwhelm your judgment about what matters.


New Frontier

How AI Tools Change Design Doc Writing

As of early 2026, AI coding tools are reshaping how design docs get written. Used well, they accelerate the hardest parts. Used poorly, they produce confident-sounding docs that don't actually think.

Use AI for: Alternatives generation

"Here's my problem and constraints. Generate 5 genuinely different approaches with trade-offs for each." AI excels at expanding solution spaces — it suggests approaches you didn't consider, which you then evaluate with your domain knowledge.

Use AI for: Failure mode brainstorming

"Here's my proposed architecture. What are the 10 most likely failure modes and their blast radius?" Systematic enumeration of edge cases is exactly the kind of thinking that separates L4 from L5 docs.

Use AI for: First-draft prose

Dictate rough thinking, then use AI to structure it into sections. Especially effective for Context/Problem — talk through pain points, let AI organize them into a coherent narrative with data references.

Don't use AI for: The actual decision

AI can enumerate options and trade-offs, but choosing requires judgment about your team's capacity, org politics, technical debt history, and risk tolerance. AI doesn't have your context.

Don't use AI for: Rubber-stamp docs

"Write me a design doc for adding Redis" produces exactly the kind of retroactive, no-genuine-alternatives doc that kills reviewer trust. Use AI to think harder, not to avoid thinking.

Watch out for: Confident hallucination

AI generates plausible-sounding latency estimates and cost projections. Always verify quantitative claims. A doc with fabricated numbers is worse than one with honest "TBD — need to benchmark" notes.


Calibration

Right-Sizing Your Doc

Calibrate to blast radius. If the change touches 1 team, 1–5 pages. If it touches 3+ teams, 5–10+. If it could page someone at 3am who isn't on your team, it definitely needs a doc.

ScopeExampleLengthReviewersTimeline
SNew API endpoint, schema migration0.5–1 pg1–2 peers1–2 days
MNew service, caching layer, auth overhaul2–5 pg3–5 incl. TL1–2 wk
LData pipeline redesign, multi-team feature5–10 pg5–10, x-team2–4 wk
XLPlatform migration, infra overhaul, new storage system10–20+ pg10+, leadership4–8+ wk

Before You Send

Pre-Review Checklist

Run through this before the doc goes to the broad reviewer list. Each item maps to a failure mode that wastes reviewer time or causes extra review cycles.

Structure & Completeness

  • Problem statement includes quantified evidence, not just assertion
  • Every goal is measurable — you could write a post-launch eval for each one
  • Non-goals are explicit and specific, not "everything we're not doing"
  • At least 2 genuine alternatives with quantified trade-offs for each
  • The decision rationale explicitly references alternatives' weaknesses
  • At least one architecture diagram for any multi-component design

Depth & Judgment

  • Trade-offs are quantified (cost, latency, eng-weeks), not just named
  • Risks include concrete mitigations, not "we'll monitor this"
  • Top 3–5 failure modes enumerated with blast radius and recovery
  • Rollout is phased with explicit rollback criteria at each stage
  • Open questions are genuine, specific, and have owners/ETAs
  • Cross-team impact named with specific teams and confirmed capacity

Readability & Persuasion

  • A new team member could follow the doc without verbal context
  • Reads as problem→exploration→resolution, not solution→justification
  • Decision density is high — no paragraph exists without a purpose
  • Length is appropriate for scope
  • Reviewer list includes at least one person who's skeptical of the approach
  • At least one trusted peer has read it and you've incorporated their feedback