ADR: Capture Context, Not Just Conclusions
An Architecture Decision Record captures why a significant technical choice was made, so teams understand trade-offs without relitigating them. Use it when a decision is costly to reverse or crosses team boundaries.
Why it exists
Software teams repeatedly face the same technical crossroads, but institutional memory fades as people rotate, priorities shift, and code evolves without explanation. The result is a graveyard of unexplained patterns where every new engineer asks why a library was chosen, why a database was sharded a certain way, or why a service boundary exists. An ADR exists to freeze the reasoning that shaped a system at a specific moment in time, making it cheaper to onboard new teammates and safer to revisit old choices.
The mental model
Think of an ADR as a time-capsule for your brain. It is not a requirements document or a user manual; it is a snapshot of the forces, constraints, and fears that led to a decision. The goal is not to prove you were right, but to give future maintainers enough context to know when the original assumptions have changed and the decision should be overturned.
How it works
A typical ADR is a single lightweight file, often stored in a docs folder, numbered sequentially for easy reference. It follows a simple structure: a short title, a status such as proposed or accepted, the context describing the problem and constraints, the decision itself, and the consequences including accepted trade-offs and rejected alternatives. Once accepted, the record is treated as immutable; if the decision changes, you write a new ADR that supersedes the old one rather than editing history.
When to use it
Write an ADR when a decision is architecturally significant, meaning it is costly to undo, affects multiple teams or services, or establishes a pattern that others will follow. Examples include choosing a cloud provider, adopting an event-driven architecture, or mandating a specific authentication strategy. If skipping the write-up would force the next engineer to read thousands of lines of code to reconstruct your intent, you need an ADR.
When not to use it
Do not use an ADR for trivial choices like renaming a variable, patching a dependency, or picking a linter rule that has no structural impact. Also avoid using it as a living design document that gets updated continuously; that confusion turns it into overhead and trains teams to ignore it. If the decision can be reversed in an afternoon without side effects, the cost of documentation outweighs the benefit.
One canonical example
A platform team decides to move from REST to gRPC for internal service communication. They write ADR 0012 explaining that REST was causing payload bloat and schema drift, that GraphQL was rejected because it added client complexity without solving the binary protocol need, and that gRPC was chosen despite its poorer browser support because all traffic was service-to-service. Six months later, a frontend team asks about browser-facing endpoints. They read ADR 0012, immediately understand the boundary, and propose a new BFF pattern rather than forcing gRPC where it was never intended.
Interview question
A senior engineer claims ADRs are unnecessary because git history and code comments already record technical choices. Which response best reflects the actual value of an ADR?
- a.ADRs are primarily a lightweight filing format, numbered sequentially for easier searching than code comments
- b.ADRs replace requirements documents by capturing user needs and system behavior in narrative form
- c.ADRs should be kept as living documents and updated continuously as the architecture evolves
- d.ADRs freeze the forces, constraints, and trade-offs behind a decision so future maintainers know when assumptions have changedCorrect
Why? this is the answer
The card describes ADRs as time capsules that capture the reasoning behind decisions, not just the outcomes, so future maintainers can recognize when original assumptions have changed. Option C is tempting because continuously updating documentation seems like good practice, but the card explicitly warns against treating ADRs as living documents.
Just read this? Test yourself on what you have been reading.
- #adr
- #architecture
- #documentation
- #decision-making
- #team-practices
Put your scrolling time to good use
Learn one idea, try a quiz and save useful cards for revision. Tezvyn makes it easy to learn and stay current in your tech field, a few minutes at a time.
The iPhone app is on the way
We are building it. Until it lands, nothing here is held back from you: every interview card, your saved cards, streaks and the job board all work in Safari, plus hundreds of free practice quizzes of thirty questions each. Sign in and it all carries over to the app the day it arrives.
Want it as an icon? Tap Share at the bottom of Safari, then Add to Home Screen. It opens full screen and the cards you have read stay available offline.
We are hiring for this. Every open role lists the topics its interview covers, so you can prepare for the real thing rather than guessing.
See open roles