The Design Document Problem
Design documents are written at a moment of high context: the team has been thinking intensively about a problem, the constraints are understood, the trade-offs have been debated, and the decision has been made. The design document captures that context. It is the most complete record of why a system was built the way it was built.
Two years later, the design document is rarely found. It exists — engineers are disciplined about writing design docs — but finding it requires knowing it exists, knowing where it was saved, and knowing what it was called. A new engineer working on the same system can read the code; they cannot read the reasoning behind it, because the reasoning is in a document that's effectively invisible.
This is the design document problem in its simplest form: the creation discipline exists but the organization discipline doesn't, so the documents exist but aren't useful.
The second version of the problem: design documents are written, filed, and never updated. The system evolves; the design document doesn't. Eventually the document describes a system that no longer exists, and engineers stop trusting design docs because they're known to be unreliable historical artifacts.
Both problems have structural solutions.
What Design Documents Are For
A design document serves three purposes:
Forcing clarity before implementation: Writing a design document forces the author to articulate the problem, the trade-offs, and the reasoning before writing any code. The act of writing exposes gaps that weren't visible in conversation. ("We've been discussing this migration strategy for two weeks, but I realize I don't actually know how we'd handle in-flight requests during the cutover.") This pre-implementation clarity is the most immediate and reliable benefit of the design doc.
Decision record: The design document records what was decided and why. When someone asks "why is the authentication service using JWT rather than session tokens?" the design doc is where the answer should be. Not in Slack history, not in a team member's memory — in the design doc.
Onboarding material: A new engineer who reads the design documents for the systems they'll work on gets context that the code alone can't provide: the problem the system was solving, the alternatives that were considered and rejected, and the constraints that shaped the design.
These three purposes suggest what a design document system needs to support: a document that is produced before implementation, preserved accurately, findable when needed, and updated when the system changes materially.
The Naming Convention That Makes Docs Findable
The most common organizational failure in design doc archives is inconsistent naming. "Design doc: new auth" and "authentication-redesign-v3" and "Auth Service — Draft (final).gdoc" and "DESIGN - User Authentication (Jan 2025)" all refer to similar topics and will not be found by the same search.
A consistent naming convention solves this at the source:
Format: [YYYY-MM] [System/Component]: [Short description of decision or design]
Examples:
2025-10 Authentication Service: Migration from session tokens to JWT
2026-02 Payment Processing: Batch reconciliation architecture
2026-08 API Gateway: Rate limiting strategy
The date prefix sorts documents chronologically in any file listing. The system name makes the subject area immediately clear. The description distinguishes between multiple documents about the same system.
Status prefix (optional but useful): Prepend [DRAFT], [REVIEW], [FINAL], [SUPERSEDED] to the title to indicate document status. A [SUPERSEDED] document should link to the document that superseded it.
The rule: If you can't find a design document using a combination of the system name and a rough date, the naming convention has failed. Enforce it at document creation time.
The Folder Structure
Design documents should be organized by system or product area, not by date or author.
By system (recommended):
Design Docs/
Authentication/
2025-10 Authentication Service: Migration from session tokens to JWT.md
2024-03 Authentication Service: OAuth 2.0 integration.md
Payments/
2026-02 Payment Processing: Batch reconciliation architecture.md
2025-06 Payment Processing: Fraud detection pipeline.md
Infrastructure/
2026-08 API Gateway: Rate limiting strategy.md
2025-11 Deployment Pipeline: Blue-green deployment rollout.md
Archive/
[SUPERSEDED documents]
This structure makes it easy to find all design documents for a specific system, which is the most common retrieval pattern: "I'm working on the payments service — what design decisions have been made here?"
The archive folder: Superseded documents should be moved to an Archive folder (or tagged as Archived) rather than deleted. The reasoning in a superseded document often contains context about why the first approach was tried and why it didn't work — that context is useful for future engineers considering the same direction.
The Design Doc Template
A design document that answers the questions engineers will actually ask about a system in the future:
# [System]: [Decision/Design Description]
**Date:** YYYY-MM-DD
**Author(s):** [Names]
**Status:** Draft | Under Review | Final | Superseded
**Superseded by:** [Link, if applicable]
**Reviewers:** [Names]
---
## Problem
[What problem does this design solve? Why does this problem need to be solved now?
2-4 sentences.]
---
## Background and Constraints
[Context that shaped the design: existing system state, business constraints,
technical constraints, relevant external factors. What does someone reading this
document six months from now need to know to understand why the design looks the
way it does?]
---
## Proposed Design
[The design itself: architecture, key components, data flows, APIs.
Diagrams where they add clarity. Enough detail that an engineer can implement
from this document without making major unstated decisions.]
---
## Alternatives Considered
### [Alternative A]
[Description + reason not chosen]
### [Alternative B]
[Description + reason not chosen]
---
## Trade-offs and Risks
[What does this design sacrifice? What are the known risks? What assumptions
could turn out to be wrong?]
---
## Implementation Plan
[High-level phases of implementation. Key milestones. Dependencies.]
---
## Open Questions
[Unresolved questions as of the writing date. May be filled in as the
design is reviewed or during implementation.]
---
## Outcome and Retrospective
[To be filled in post-implementation: what happened? Was the design
accurate? What would be done differently?]
The "Outcome and Retrospective" section is the part most often skipped and most valuable in the long run. It converts the design document from a snapshot of intent into a record of what actually happened.
The Retrospective Section: Closing the Loop
A design document written before implementation is a hypothesis. What makes a design doc genuinely useful as a historical record is knowing whether the hypothesis was correct.
The retrospective section, added 2-6 months after implementation, answers:
- Was the design implemented as written, or were significant deviations made? What were they and why?
- Were the trade-offs and risks as predicted? Were there risks that weren't anticipated?
- What did the team learn during implementation that they wish they'd known when writing the document?
- If you were designing this system again from scratch, what would you do differently?
A design doc with a retrospective is worth 10x a design doc without one. It's the difference between a pre-implementation plan and an actual record of what was built and learned.
The retrospective doesn't need to be long. A well-written retrospective section is often 200-300 words. The discipline is adding it — which requires someone to remember to do it, 3-6 months after the document was written and the team has moved on.
Implementation: Add a calendar reminder for 3 months after the design is finalized, assigning the original author (or the system's current owner) to add the retrospective. Or add it as a project close-out item in the project tracker.
Linking Design Docs to Code
A design document that's not linked from anywhere is harder to find than one that is. The link strategy:
In the codebase README (or service README): List major design documents for the service in the README. Brief description + link. "Authentication Service design history" → links to the Auth folder in the design docs.
In code comments (selectively): For the most non-obvious design decisions — the ones where a reader would ask "why is this done this way?" — include a reference to the design doc: // See design doc: [link] for context on the token refresh strategy. Don't do this for every decision; only for the ones where the answer is genuinely non-obvious from the code.
In ADRs: Architecture Decision Records (ADRs) are sometimes more concise alternatives to full design docs for specific decisions. A full design document can reference related ADRs; ADRs can reference the parent design document.
In ticket descriptions (link to the design doc from the implementation tickets): When the implementation begins, link the design document from the project or ticket. Engineers who pick up implementation work find the context immediately.
Keeping Design Docs Current
The failure mode: a design document describes a system architecture that was changed 18 months ago. New engineers read it, implement against it, and are confused when the actual system behaves differently.
When to update a design document:
- When a major implementation deviation occurs (the system was built differently from the design)
- When a significant architectural change is made post-launch
- When the design document's described approach is formally superseded by a new design
When to supersede (not update):
A design document describes a decision made at a point in time. If the decision is being reversed or replaced, write a new design document and mark the old one as superseded with a link to the new one. Don't rewrite history — the original reasoning has value even when it's been overturned.
When to archive:
When a system has been deprecated or replaced entirely, archive its design documents. Label them [ARCHIVED] with a note about when the system was retired. Delete nothing.
Tools
Google Docs or Notion: Low friction, collaborative, good for design documents that need real-time feedback during the review period. The weakness: search quality depends on folder organization and naming; link rot is a risk as the organization changes.
Confluence: Strong for teams already on Atlassian. Powerful search and versioning. Higher contribution friction than Google Docs.
A docs/design/ folder in a Git repository: Markdown files, version-controlled, reviewed via PR, searchable via code search. The gold standard for engineering organizations that use docs-as-code. All the advantages of version control (history, blame, PR-based review) applied to design documents.
GitHub Discussions or GitLab Wiki: Co-located with code. Good for project-specific design docs; less suitable as the canonical location for cross-project or infrastructure design docs.
For most engineering teams: Notion (fast to start, searchable, reasonable organization tools) or a docs/design/ folder in a shared documentation repository (most maintainable long-term). The choice matters less than the naming convention and the discipline to link docs from the codebase.
Worked Example: Priya's Payments Design Doc Archive
Setup: Priya is a senior engineer who has been on the payments team for two years. In that time, the team has written 12 design documents. Eight of them are in Google Docs in a folder called "Payments — Design Docs." Two are in someone's personal Drive. One is a Notion page. One was sent in a Slack message and was never saved.
A new engineer asks about the reconciliation architecture. Priya spends 20 minutes finding the right document.
What she does:
She creates a consistent naming convention and reorganizes the eight Google Docs: 2024-XX Payments: [description]. She finds the two in personal Drive and requests them to be moved to the shared folder. She recreates the Notion page in Google Docs. She asks in Slack if anyone has the original design note — someone pastes it and she creates a doc from it.
She adds a Design Docs section to the payments team README with links to all 12 documents.
She adds a reminder to her calendar to write retrospectives for the three most recent designs (all still relatively new implementations).
The next engineer who asks about reconciliation takes 2 minutes to find the answer.
Key Takeaways
- The naming convention is the highest-leverage intervention:
[YYYY-MM] [System]: [Decision description] makes docs sortable, scannable, and findable without institutional memory.
- Organize by system, not by date: engineers look for design docs by the system they're working on, not by when they were written.
- The retrospective section converts a hypothesis into a record: adding 200-300 words on what actually happened, 3-6 months post-implementation, is the practice that makes design docs genuinely useful as historical references.
- Link design docs from the codebase: a README link and selective code comments create discoverability that naming and organization alone don't provide.
- Supersede, don't delete: when a design is overturned, the original reasoning has historical value — mark as superseded and link to the new doc; delete nothing.
Conclusion
Design documents are among the highest-value artifacts an engineering team produces — dense with reasoning, trade-off analysis, and constraint context that code alone can't convey. The organizational discipline that makes them useful is simpler than the intellectual discipline of writing them: a consistent naming convention, organization by system, links from the codebase, and retrospective sections added after implementation. Teams that maintain this discipline have a searchable record of why their systems were built the way they were, which accelerates both onboarding and future design work. Teams that don't have a folder of documents that are technically filed but practically lost.
Try WebSnips free — save and annotate design documents, architectural references, and technical proposals with your own context notes, tag by system and decision type, and build the organized engineering knowledge base that makes every future design better-informed.