How to Write an Effective Software Design Document

2026-07-03 · page · source ↗ · source summary

Michael Lynch's pragmatic field guide to design docs, drawn from experience at Google, Microsoft, and his own startups. An excerpt from Refactoring English: Effective Writing for Software Developers. The core insight: design docs aren't about completeness — they're about focusing investment where being wrong is expensive.


The Guiding Principle

Lynch's central question: "What's the penalty for being wrong?" This is the filter that separates design-level decisions from implementation details. Language choice and storage backends are high-penalty — hard to change, expensive to get wrong. Pagination style ("load more" vs. display all) is trivially changeable. Specifying everything defeats the purpose. The design doc exists to force thinking on the decisions that hurt to reverse.

This converges with Specifications as the Product's economic argument from the opposite direction. Where that thesis says "specs are the durable asset because code is disposable," Lynch says "design docs are insurance against the decisions that are expensive to unwind." Same destination, different framing.

Lynch's reader-first philosophy also converges with Make Better Documents, Anil Dash's ten-rule field manual for business communication. Dash's rules — know your audience, state conclusions first, kill the formatting — are the general case of what Lynch prescribes for design docs specifically. Both treat the document as a tool for transferring context from someone who has it to someone who needs it.

When to Write One

Six yes/no questions. Any single yes makes it likely worthwhile; two or more makes it "almost certainly" so:

  1. Multi-person coordination?
  2. More than three months of full-time work?
  3. Will remain in production beyond six months?
  4. Cross-team coordination?
  5. Ambiguous or unclear requirements?
  6. Would design time prevent a catastrophic outcome?

The honesty about "sometimes the right amount to invest is zero" is refreshing. This isn't process theater — it's a cost-benefit calculation keyed to project risk.

The 23-Component Checklist

"A good design doc can save you years of development time."

Lynch walks through 23 components, from title to alternatives considered. The list is comprehensive but the treatment is pragmatic:

High-value components:

Components most teams skip that they shouldn't:

The components that reveal Lynch's big-company experience:

The Security, Privacy, Legal Considerations, and Logging sections wouldn't appear in a startup's design doc template. They're artifacts of Google/Microsoft compliance requirements. But the principle behind them is sound even for small teams: documenting why threats are considered unlikely is still useful, because "reviewers might identify threats you overlooked."

Key Quotes

"A good design doc can save you years of development time."

Commentary: The ROI claim is aggressive but defensible. A week spent on design that prevents a year of wrong-path implementation is a 52x return. The hard part is knowing which week.

"What's the penalty for being wrong?"

Commentary: This is the line that earns the article a permanent place in the wiki. It's a decision filter, a prioritization heuristic, and a bullshit detector in seven words. Everything else in the 23-component checklist is scaffolding around this question.

"Reviewers don't have your mental picture of the system."

Commentary: The argument for diagrams, but also the argument for the entire document. The author has context the reader doesn't. The design doc exists to transfer that context. If you skip it because "everyone already knows," you've confused your mental state with the team's.

"Sometimes, the right amount to invest in a design doc is zero."

Commentary: The honesty that saves the article from being process propaganda. Lynch isn't selling a methodology — he's providing a toolkit and trusting you to know when to use it.

Key Themes

Critical Analysis

The article is better than its genre. "How to write a design doc" is a well-worn topic that usually produces either academic formalism (IEEE 830) or process propaganda (Scrum ceremonies extended to documentation). Lynch avoids both. His Google pedigree gives him credibility, but his startup experience keeps him honest — the admission that "sometimes zero is the right amount" is something a career Googler wouldn't say and a process consultant couldn't say.

The penalty-for-being-wrong filter is the keeper. It's a genuinely useful heuristic that applies beyond design docs. What tests to write? What to monitor? What to document? What to review? The answer each time: whatever's expensive to get wrong. This is Lynch's real contribution and it's a better decision heuristic than most frameworks that took entire books to develop.

The 23 components are too many for most teams. Lynch doesn't claim you need all 23 — he's providing a menu, not a template. But the Security/Privacy/Legal/Logging tail betrays enterprise assumptions. A 3-person startup doesn't need a Legal Considerations section in their design doc. The risk is that junior engineers will cargo-cult the full checklist and produce 50-page documents that nobody reads, missing Lynch's own point about investment calibration.

The SLO section is underrated and under-explained. Lynch treats SLOs as a single component in a 23-item list, but they're arguably the most important one. A design doc without measurable success criteria is a wish list. The jump from "the system should be fast" to "p50 latency <=200ms" is the difference between engineering and aspiration. More space on this would have been justified.

What's conspicuously absent: design doc review. The article is about writing design docs, not about the review process that makes them valuable. Lynch links to a separate article on getting useful feedback, but the write/review cycle is where design docs earn their keep or fail. Vibe Coding as a Team Sport's two-gate review pattern and The End of Code Review's argument for architectural coherence through design docs (not per-commit review) are the complementary pieces.

The example design doc is a power move. Lynch wrote a complete design doc for "Little Moments" before writing any code and is adhering to it during implementation. This is the strongest possible endorsement of his own advice. Most authors in this genre don't eat their own dog food.

Comparison to SDDW: SDDW (Spec-Driven Development Workflow) is the operational implementation of the spec-first philosophy for AI-assisted development. Lynch's article is the human-scale version — no agents, no pipeline, just one engineer writing a document for other engineers. But the underlying principles are identical: make decisions before code, capture rationale, separate design from implementation. SDDW automates the process; Lynch explains the craft.

Comparison to Slowing Down: Slowing Down in the Age of Coding Agents argues the bottleneck has shifted from code production to thinking. Lynch's design doc is the artifact that results from that thinking. Odendahl annotates agent-generated designs on e-ink; Lynch writes them from scratch. Same insight, different toolchain.

What the article gets right that almost everyone else gets wrong: The Alternatives Considered section. Most design docs present the chosen approach as inevitable. Lynch understands that documenting rejected alternatives — especially the ones that seemed appealing — is more valuable than documenting the chosen one. It preempts review arguments, captures research that would otherwise be lost, and prevents future teams from re-litigating decisions without the original context. This alone justifies the design doc's existence.


Sources: How to Write an Effective Software Design Document Last updated: 2026-07-03