Skip to main content
Every technical disaster I’ve witnessed started the same way: someone made a reasonable-sounding decision, didn’t write down why, and six months later nobody could remember the constraints that led to it. The team either cargo-culted around a decision they didn’t understand or reversed it without grasping the original trade-offs — stepping on the same landmine from a different angle. Architecture Decision Records fix this. Not because they’re fancy or process-heavy — because they’re a forcing function for clear thinking. Writing down “why” is harder than it sounds, and the act of doing it catches bad reasoning before it ships. Team planning at a whiteboard
“The best architectures, requirements, and designs emerge from self-organizing teams — but only if those teams write things down.” — Martin Fowler

Why Teams Skip ADRs (and Pay for It Later)

The objections are always the same: “We move too fast for documentation.” “Everyone was in the meeting — we all know why.” “We’ll remember.” You won’t. I’ve been on teams with dozens of engineers where a decision made in Q1 was questioned in Q3 by people who joined in Q2. Without an ADR, the answer is always “I think it was because…” followed by an archaeology expedition through Slack threads and PR descriptions. On smaller teams the stakes are even higher. When you’re a team of 10 engineers, every architectural choice carries disproportionate weight. Choose the wrong database, the wrong deployment model — and you’re living with it for years because you don’t have the headcount to redo it.
A good ADR takes 30 minutes to write and saves dozens of hours of future debate. The best ones are under 500 words. This isn’t bureaucracy — it’s leverage.

The Simple ADR Template

I’ve tried several formats — Michael Nygard’s original, MADR, the Y-statement format. I’ve converged on a structure that’s lightweight enough to actually get written. Here it is as a reference, not a wall of markdown:
SectionWhat Goes HereLength
TitleADR-001: Short descriptive name1 line
Date & StatusDate, plus one of: Proposed, Accepted, Superseded, Deprecated1 line
ContextWhat problem are we solving? What forces are at play — technical, organizational, timeline?2-4 sentences
Options Considered2-3 options with pros, cons, and estimated effort for eachA few bullets per option
DecisionWhich option we chose and why — the reasoning, not just the name2-3 sentences
ConsequencesPositive outcomes, negative trade-offs, and known risksBullet list
Review DateWhen we should revisit this decision1 line
The Review Date is the most underrated field. It forces you to acknowledge that decisions have shelf lives. The technology landscape changes. Your team size changes. A decision that was correct 12 months ago might be wrong today — and that’s fine, as long as you have a mechanism to revisit it.

The Two-Way Door Framework

Jeff Bezos popularized this concept, and it’s the most useful mental model I’ve found for deciding how much process a decision deserves.
One-Way DoorTwo-Way Door
DefinitionDifficult or impossible to reverseEasy to reverse with low cost
ExamplesPrimary database, programming language, cloud provider lock-inCSS library, test framework, linting config
ProcessADR, thorough analysis, stakeholder buy-inQuick decision by the person closest to the work
Time to decideDays to weeksHours
Failure modeUnder-analyzing → expensive mistakesOver-analyzing → wasted time on trivial choices
The failure mode I see most often: teams treat two-way doors like one-way doors. They spend three weeks debating Jest vs Vitest when the migration cost is a half-day of find-and-replace. Meanwhile, they treat one-way doors — like “let’s use a proprietary NoSQL database for everything” — as two-way doors and commit after a 30-minute Slack discussion.
If the reversal cost is measured in weeks or months, or if the blast radius spans your entire platform, it’s a one-way door. Write the ADR. If it’s a single service and reversible in hours — just decide and move.

Real Trade-Off Examples

ADRs shine when you’re comparing concrete options. Here’s how a comparison table does the heavy lifting: Example: Choosing an internal API approach
CriteriaGraphQLtRPCREST
Type safetyCodegen required (extra build step)End-to-end, zero codegenManual types or codegen
Client complexityApollo/urql, cache managementSimple function callsfetch + types
Public API suitabilityExcellentPoor (TypeScript-only)Excellent
Team familiarityModerateLow (newer technology)High
Verdict for internal APIOverhead without payoffBest fit if TS end-to-endBest fit if multi-language
The table makes the reasoning visible. Anyone reading it later — even someone who joined the team a year from now — can see what was compared and what mattered. That’s the whole point.

How to Present Trade-offs to Leadership

Engineers often struggle to communicate technical decisions upward. The mistake is leading with technology names. Nobody above you in the org chart cares whether you use Kafka or SQS. They care about cost, timeline, risk, and capability.
Instead of…Say…
”We should use Kafka""Option A handles 10,000 tx/min, costs $800/month, 2 weeks to build"
"We need to refactor the auth module""Every new feature takes 3x longer because of the auth architecture"
"Let’s adopt NestJS""This framework enforces patterns that prevent the architecture drift we’re seeing as we hire”
Frame every technical decision in terms of time to deliver, cost, risk, and what it unlocks. Save the technical depth for the ADR document that engineers will reference.
Include a confidence level with your recommendation: “I recommend Option B with high confidence. The risk is X, and we can mitigate it by Y.” This gives leadership a clear signal and an honest assessment — both of which build trust.

When to Revisit a Decision

An ADR isn’t a tombstone — it’s a living document. Revisit when:
  • The context changed. You assumed 100 req/s; you’re at 1,000. The ADR was for a different scale.
  • The team changed. You assumed 3 senior engineers; you now have 12 mixed-level. Complexity tolerance shifted.
  • The technology matured. The “too risky” option from 2 years ago might be stable now.
  • You hit a predicted consequence. Every ADR lists negative trade-offs. When those become painful, it’s time to reassess.
When the review date arrives, scan the ADR and ask: “Are the assumptions still valid?” If yes, push the review date out. If no, write a new ADR that supersedes the old one.

Making ADRs Stick

ADRs only work if the team actually writes them:
  1. Store them in the repo — a docs/adr/ directory, searchable, reviewed in PRs. Not in a wiki that nobody visits.
  2. Make them part of the PR process — any PR that introduces a dependency, changes infrastructure, or alters architecture should include or reference an ADR.
  3. Keep them short — if it takes more than an hour to write, the decision is more complex than you realized (which is itself useful information).
  4. Reference them in code review — when someone asks “why do we do it this way?”, link to the ADR. Over time, the team internalizes that answers live in a known location.
The best engineering decisions aren’t the ones where you pick the “right” technology. They’re the ones where you understand the trade-offs, document them clearly, and give your future self the context to know when the decision should change.