Architecture Decision Record (ADR)
A free Architecture Decision Record (ADR) template: title, status, context, decision, consequences and alternatives considered, with a numbered example and guidance on when to write one.
- Best for
- Teams making decisions that are expensive to reverse: databases, frameworks, boundaries between services
- Length
- One to two pages
- Sections
- 7
An ADR records one decision and why it was made, at the time it was made. Six months later it answers the question every new engineer asks: why is it built like this?
ADRs are short, numbered and never edited after they are accepted. When a decision changes, write a new ADR that supersedes the old one.
Tip. Write the ADR before the decision is final and share it for comments. An ADR written afterwards tends to justify rather than explain.
01
Title and number
A short noun phrase that names the decision, with a sequential number. Numbers make ADRs easy to reference in code reviews and commit messages.
markdown# ADR 0014: Use Postgres logical replication for the analytics pipeline02
Status
One of Proposed, Accepted, Deprecated or Superseded, plus the date and the people who decided. If it is superseded, link to the new ADR.
textStatus: Accepted, 2026-03-11 Deciders: data platform team Supersedes: ADR 000903
Context
The forces at play: the problem, the constraints, what the team knew and did not know. Write it so that someone without the meeting can follow it. Facts, numbers and links, not opinions.
textNightly batch exports from the orders database take 3h 40m and block reporting until 9 a.m. Volume grows about 8% a month. The analytics team needs data that is no more than 15 minutes old. We run Postgres 16 on a managed service that supports logical replication.04
Decision
The choice, stated in one or two sentences in the active voice, followed by the details that matter for implementation.
textWe will stream changes from the orders database to the warehouse with Postgres logical replication and a Debezium connector, and retire the nightly export once two weeks of parallel runs match.05
Consequences
What becomes easier and what becomes harder, honestly. Include new operational work, costs and risks. This is the section future readers trust most.
- Reporting data is minutes old instead of a day old
- A new service to run and monitor: the connector
- Schema changes on orders now need a replication check
- Batch export code can be deleted
06
Alternatives considered
Each serious option with one or two lines on why it was not chosen. This stops the same debate from restarting every quarter.
- Faster batch exports: does not meet the 15-minute requirement
- Dual writes from the application: risk of drift, needs changes in five services
- A managed CDC product: higher cost, same operational shape
07
References
Links to the design doc, benchmarks, tickets and any discussion threads, so the evidence is one click away.
Mistakes to avoid
- Editing an accepted ADR when the decision changes, which erases the history it exists to keep.
- A context section that only makes sense to people who were in the meeting.
- Listing only the benefits in Consequences.
- Writing ADRs for small, easily reversed choices, so the important ones get lost.
- Storing ADRs somewhere engineers never look. Keep them next to the code or linked from it.
Questions about this template
- When should we write an ADR?
- When a decision is expensive to reverse or affects more than one team: choosing a datastore, a framework, a service boundary, an auth model. Skip it for choices that can be undone in an afternoon.
- Where should ADRs live?
- Many teams keep them as markdown in a docs/adr folder in the repository. With Signcodify Git sync, that folder publishes as a readable, searchable section of your docs and stays in step with the repo.
- Can an ADR be changed after it is accepted?
- Fix typos, but do not change the decision. Write a new ADR that supersedes it and update the status of the old one to point to the new one.
Last updated October 30, 2026
Suggest an editUse this template in Signcodify
It opens in the block editor with every section above in place. Sync it to your repository or publish it to your docs site.