
6 February '26
You make architecture decisions all the time. Most of them never get written down. In the moment, the reasoning feels obvious. Months later, it is not. Context fades, people change, and decisions turn into unexplained constraints. When the same question comes up again, the team has no shared answer and the discussion starts from scratch.
Architecture Decision Records solve this by capturing why a decision was made at the time it mattered. An ADR does not try to explain everything. It records enough context to prevent the same debate from happening again. Teams often document what they built, but rarely why they built it that way. This gap creates friction. New engineers struggle to understand constraints. Senior engineers rely on memory. Over time, architectural intent erodes and decisions start to look accidental.
An ADR is not a design document or a specification. It exists to preserve reasoning, not to persuade. If it takes hours to write, it has failed. The value comes from speed, clarity, and focus.
A good ADR explains the situation that forced a choice, states the decision clearly, and admits the tradeoffs. Context matters most. Describe the constraints and forces that made the decision necessary. Skip the backstory and stay concrete. The decision itself should be direct and unambiguous. Every real decision has downsides, and writing them down builds trust and makes future changes easier.
This matters even more in microservice architectures. Microservices increase the number of decisions with long term impact. Service boundaries, communication patterns, data ownership, and deployment models all carry cost. Without written context, teams fall back on tribal knowledge that does not scale. ADRs give microservice systems memory. They explain why a service owns its data, why communication is asynchronous, or why certain tradeoffs were accepted, even as implementations change.
Consider a common example like database per service. Shared schemas create tight coupling and block deployments. The decision is for each service to own its data. The consequences include duplication, harder queries, and more complex reporting. That short record is enough to stop the same discussion from repeating later.
ADRs should live with the code and be versioned alongside it. Simple Markdown files are usually enough. When ADRs live in wikis or external tools, they decay and get ignored. Not every decision needs an ADR. Write one when a decision is hard to reverse, affects multiple teams, or carries ongoing cost. Disagreement is often a signal that the reasoning is worth capturing.
ADRs are allowed to age. When a decision changes, mark the old record as superseded and link to the new one. Do not rewrite history. The record matters because it shows what the team knew at the time.
The real payoff is less friction. Teams stop rehashing old arguments and move faster with more confidence. If your team keeps revisiting the same architecture questions, write one ADR this week. Keep it short, focus on the why, and move on.
Geert P. Thiemens
The Moai team
Sign up for the monthly update!