Book a call
Book a call

Architecture Decision Records: A Practical Guide

What Architecture Decision Records are, why they matter, and how to write good ones — with a copy-ready ADR template and the anti-patterns to avoid.
Abstract 3D render of a translucent blue cube with internal layered structure, symbolizing architecture decisions and system layers

An Architecture Decision Record (ADR) is a short document that captures one significant architectural decision — the context, the choice, and the consequences. That's it. No 90-page design doc, no wiki page nobody updates: a single, dated, version-controlled record of why you decided what you decided. ADRs matter because architecture doesn't live in diagrams; it lives in the decisions teams make every week. When those decisions aren't written down, the reasoning leaves with the people who made it — and next quarter someone relitigates a trade-off that was already settled, or worse, quietly undoes it without knowing why it was made. ADRs are the cheapest insurance against that.

Why architecture decision records are worth the effort

  • They survive team rotation. The rationale outlives the person who had it in their head. New engineers can read why, not just what.
  • They stop the same debate recurring. A decision with a written record and status ("we chose X over Y because Z") ends the quarterly re-argument.
  • They make trade-offs explicit. Writing down the options you didn't pick, and why, is where most of the value is.
  • They're auditable. In regulated contexts, a trail of dated decisions with rationale is evidence, not overhead.
  • They keep knowledge in your organisation, not a vendor's. An engagement that leaves ADRs in your repos leaves you able to change the system yourself — the opposite of vendor lock-in.

What goes in an ADR

Keep it short — one decision per record, ideally a page. The widely used structure (originally from Michael Nygard) has just a few fields:

  • Title — a short noun phrase, numbered (e.g. "ADR-014: Use event sourcing for the ledger").
  • Status — Proposed / Accepted / Deprecated / Superseded (by ADR-NNN).
  • Context — the forces at play: the problem, the constraints, the requirements that make this decision necessary.
  • Decision — what you're doing, stated plainly ("We will…").
  • Consequences — what becomes easier and what becomes harder as a result, including the risks you're accepting.

Optionally add Options considered (the alternatives and why they lost) and Related decisions (links to other ADRs).

A copy-ready ADR template

1# ADR-NNN: <short title of the decision>
2 
3Status: Proposed | Accepted | Deprecated | Superseded by ADR-NNN
4Date: YYYY-MM-DD
5Deciders: <names / roles>
6 
7## Context
8What is the problem, and what forces (technical, business, regulatory,
9team) make a decision necessary now? What constraints apply?
10 
11## Options considered
121. <Option A> — pros / cons
132. <Option B> — pros / cons
143. <Option C> — pros / cons
15 
16## Decision
17We will <the choice>, because <the reasoning>.
18 
19## Consequences
20- Positive: what this makes easier.
21- Negative: what this makes harder, and the risks we accept.
22- Follow-ups: anything this decision now requires.

Best practices for writing good ADRs

  • Write it when the decision is made, not after. ADRs authored retroactively lose the real context and become box-ticking.
  • One decision per record. If you're documenting five things, you have five ADRs.
  • Record the options you rejected. The "why not" is often more useful to the next reader than the "why".
  • Store them with the code, in the repo (/docs/adr/ or similar), versioned alongside what they describe — not in a separate wiki that drifts.
  • Never edit an accepted ADR to change the decision. Supersede it with a new one and set the old status to "Superseded by ADR-NNN". The history is the point.
  • Keep them short. If it's growing past a page or two, it's probably more than one decision.
  • Make writing them a team ritual, not one architect's chore — decisions are better when the people affected help record them.

Anti-patterns to avoid

  • The ADR graveyard. A folder created once and never added to. ADRs only work as a habit.
  • Design docs disguised as ADRs. A 20-page document isn't an ADR; it's a design doc. Keep the decision record separate and short.
  • Editing history. Rewriting an accepted ADR erases the very context that makes it valuable.
  • No status field. Without status, readers can't tell a live decision from a superseded one.

F. A. Q.

What is an Architecture Decision Record?

A short, version-controlled document that captures one significant architecture decision — its context, the choice made, and the consequences — so the reasoning survives beyond the people who made it.

What should an ADR contain?

At minimum: title, status, context, decision, and consequences. Optionally the options considered and links to related ADRs. One decision per record, ideally a single page.

Where should ADRs be stored?

In the code repository, versioned alongside the system they describe (commonly /docs/adr/), so they don't drift the way a separate wiki does.

How are ADRs different from design documents?

A design doc explores a solution in depth; an ADR records a single decision and its rationale concisely. They complement each other — the ADR is the durable "why", the design doc is the detailed "how".

When should you write an ADR?

Whenever you make a consequential, hard-to-reverse architectural choice — service boundaries, data ownership, a technology selection, an integration approach — and at the moment the decision is made, not months later.