Back to archive

Engineering

Design Docs Are Coordination Tools

Why the real value of a design doc is shared assumptions, explicit tradeoffs, and a durable decision path.

Design Docs Are Coordination Tools

Design docs are often treated as architecture archives: write down the system, attach diagrams, collect comments, and preserve the record. That is useful, but it misses the main job. A design doc coordinates people before code makes disagreement expensive.

The thesis

A design doc is a coordination tool, not an architecture museum.

The value is not that the document perfectly describes the future system. The value is that it makes assumptions, tradeoffs, ownership, sequencing, and rejected alternatives visible while change is still cheap. A good design doc lets people disagree about the right things early. A weak one creates the appearance of alignment while each reader silently fills in different blanks.

Principal engineering is often less about having the clever design and more about making the decision legible enough that the organization can execute it.

The production pattern

I see design docs fail most often when a project crosses boundaries. One group changes an API. Another depends on data freshness. Another owns operational response. Product cares about rollout. Security or compliance cares about access and audit. Everyone agrees in meetings because the happy path sounds reasonable.

Then implementation begins. One reader assumed the first version would be backward compatible. Another assumed a migration window. Someone expected manual review. Someone else expected full automation. The data owner thought stale reads were acceptable. The caller thought they were not. The on-call rotation inherits alerts for a system whose ownership model was never written down.

The design did not fail only in code. It failed as coordination.

The model

I want design docs to answer six coordination questions.

Decision: what decision is being made right now? A doc that mixes exploration, approval, status, and reference material becomes hard to act on.

Assumptions: what must be true for this design to work? Assumptions should be easy to challenge: traffic shape, data quality, dependency behavior, staffing, migration order, user tolerance, and operational capacity.

Tradeoffs: what is the design buying and what is it giving up? Latency for consistency, speed for reversibility, automation for review, platform reuse for local control, or simplicity for future flexibility.

Rejected alternatives: what serious options were considered and why were they not chosen? Rejections are decision memory. They prevent the same debate from restarting later without context.

Ownership: who owns build, launch, operation, cost, support, data repair, and future changes? Component ownership is not enough when the user promise crosses components.

Revisit triggers: what signal should cause the decision to be reopened? A design without revisit triggers tends to become permanent by neglect.

This model keeps the document from becoming a narrative essay. It makes the decision inspectable.

Where this goes wrong

The first mistake is writing for approval instead of truth. A doc that hides weak assumptions may get through review faster, but it makes execution slower. The point is to expose uncertainty while there is still room to act.

The second mistake is over-documenting static architecture and under-documenting sequence. Many failures live in rollout, migration, compatibility, ownership transfer, and rollback. A beautiful target-state diagram does not explain how the organization gets there.

The third mistake is treating comments as alignment. Comments are input. Alignment is a decision with named tradeoffs and owners. If a review ends with unresolved comments and no decision record, readers will preserve their own version of reality.

The counterpoint is that not every change needs a formal design doc. Small, local, reversible work can use an issue, pull request, or short note. Heavy templates can slow teams and train them to write for process. The document should scale with blast radius, irreversibility, and coordination cost.

What I do now

I ask for the smallest document that can coordinate the decision. For a narrow change, that may be one page. For a platform boundary, it may require diagrams, migration plans, failure modes, and explicit operating contracts. Size follows risk.

I read design docs looking for hidden disagreement. Words like "eventually," "simple," "temporary," "owned by the platform," and "backward compatible" often need unpacking. They can be true, but they are also places where different people carry different definitions.

I make rejected alternatives first-class. A serious alternative deserves a fair summary, not a straw version. When the organization later asks why the design did not choose another route, the answer should be available without reconstructing old conversations.

I also require decision closure. A doc should end with proceed, proceed after named changes, or revisit with missing evidence. The decision record should state what was chosen, why, what was rejected, who owns it, and when to revisit.

Finally, I prefer docs that remain useful after launch. Not as exhaustive architecture archives, but as decision memory. Future engineers need to know which assumptions mattered, which risks were accepted, and which signals should trigger a new decision.

Closing takeaway

Write design docs to coordinate action: expose assumptions, price tradeoffs, assign ownership, preserve rejected alternatives, and leave a clear decision path.