// Leadership
Writing Design Docs That Get Read and Approved
A structure for design docs that busy reviewers actually read: problem, goals, non-goals, alternatives, risks and a rollback plan.
Md Nayeem HossainFeb 16, 20264 min read// Leadership
A structure for design docs that busy reviewers actually read: problem, goals, non-goals, alternatives, risks and a rollback plan.
Md Nayeem HossainFeb 16, 20264 min readThe most expensive bugs I have seen were not in code. They were in designs: a data model that could not support a requirement nobody asked about, an integration that assumed a third-party API worked differently than it did, a migration plan with no way back. All of them would have been caught by an hour of discussion before the first line of code.
A design document is how you have that discussion cheaply. Writing them well is one of the clearest differences between a mid-level and a senior engineer.
Not everything needs a design doc. I write one when a change:
For smaller changes, a good pull request description is enough.
Start with why. Describe the problem, who has it and what it costs today — with numbers where possible. If reviewers do not agree on the problem, they will never agree on the solution.
Affiliates currently wait up to 7 days for payouts because finance processes them manually every Monday. Payout-related support tickets make up 34% of affiliate tickets.
Goals define success. Non-goals are just as important: they prevent scope creep and endless review comments about things you deliberately chose not to solve.
Explain the approach clearly enough that a reviewer could spot a flaw. Include a diagram of the components and data flow, the data model changes, the API changes and the key sequences. Describe the unhappy paths as carefully as the happy path: what happens when the payment provider times out, or a payout fails halfway?
This section builds trust. Show that you explored other approaches and explain why you rejected them:
Batch payouts via nightly cron. Simpler, but still leaves up to 24 hours of delay and creates a single large failure point. Rejected in favor of event-driven processing.
A design doc without alternatives looks like a decision looking for approval, not a decision that was made carefully.
Be honest about what could go wrong and what you do not know yet. Reviewers trust a doc that names its risks far more than one that claims to have none. List open questions explicitly, with who can answer them.
How will this reach production safely? Feature flags, phased rollout, data migration steps, monitoring and — critically — how to undo it if something goes wrong.
Security, privacy, performance, cost, monitoring and alerting. A short paragraph on each shows the design has been thought through beyond the code.
Your reviewers are busy. Make the document easy to skim:
The doc does not become useless after approval. Link it from the epic and from the code. Update it when the design changes significantly during implementation. Months later, when someone asks "why does this work like this?", the answer is already written down.
A good design doc states the problem with evidence, defines goals and non-goals, explains the design including its failure modes, shows the alternatives you rejected, names its risks honestly and plans the rollout and rollback. Write it for busy readers, share it early, and keep the decision recorded. An hour spent writing it can save weeks of building the wrong thing.