Engineering 24 min read

Architecture Decision Records: The Missing Piece

MMNMNOTE
architecture-decision-recordsadrmadrmichael-nygarddocumentationsoftware-architectureengineering-processmarkdownmnmnote

The single habit that fixes most engineering documentation is also the cheapest: write a 200-word markdown file each time the team picks one architectural option over another, number it 0001-use-postgres.md, and commit it next to the code. That habit is called an Architecture Decision Record. It is fifteen years old, the templates are free, and most teams still skip it.

The original 2011 essay is by Michael Nygard, the author of Release It! — a Pragmatic Bookshelf title now in its second edition (January 2018) 1. The essay is one paragraph long where it matters: an ADR is a short numbered document that captures the context, the decision, and the consequences of one architectural choice 2. ThoughtWorks moved the technique to its "Adopt" ring in November 2017 — the canonical legitimization moment for the practice — and has kept it there ever since 3. The canonical templates live on GitHub at 16.5k stars 4 and 5.6k stars 5 (both counts as of 17 July 2026). The MADR project, the markdown-flavoured fork most teams now use, sits at 2.3k stars and shipped v4.0.0 on 17 September 2024 — still the current release as of 17 July 2026 6.

The single habit that makes ADRs work

Write the decision down the day the team makes it, in the same repository as the code, in a numbered markdown file with five sections — title, status, context, decision, consequences. That is the practice. Everything else — review meetings, labels, generators — is optional 2. A team that adopts the minimum still captures more than one that does not.

The reason the habit matters is that code does not record why. AWS's prescriptive guidance, written by Darius Kunce and Dominik Goby in March 2022, names the failure mode plainly: "A decision is made without any justification, and people don't understand why it was made. This results in the same topic being discussed multiple times." 7 The second failure mode is worse: "The decision isn't captured in an architectural decision repository, so team members forget or don't know that the decision was made." 7 An ADR closes both gaps with a flat file the size of a tweet thread.

Joel Spolsky, in April 2000, gave the deeper reason in one sentence — "It's harder to read code than to write it." 8 Code that compiles is the output of a decision; the inputs were the alternatives the team rejected, the trade-offs they accepted, the constraints that mattered that morning. None of those facts survive in git blame. The ADR is the only place they get written down.

The five-minute version

The five-minute ADR ships when the team is busy. It is one file, five sections — write it before the pull request merges. AWS, MADR, and Nygard converge on the same spine, only the optional sections differ 7 6 2. If you skip a record, skip the optional sections, not the spine.

Open a markdown file inside docs/decisions/ (the MADR convention 6) named 0007-adopt-opentelemetry.md. Write the title in plain English. Set the status to Proposed. Write two sentences of context naming the constraint that forced the decision. Write one sentence stating the choice in active voice. Write a short bulleted list of consequences. Save. Open a pull request. Total elapsed time: five minutes.

The Nygard template is the spine the rest of the ecosystem inherits. The exact section headings are these 9:

# Title

## Status
What is the status, such as proposed, accepted, rejected,
deprecated, superseded, etc.?

## Context
What is the issue that we're seeing that is motivating
this decision or change?

## Decision
What is the change that we're proposing and/or doing?

## Consequences
What becomes easier or more difficult to do because
of this change?

That is the whole template — four headings, four prompts, no ornament. Nygard wrote in the original essay that the decision section "is stated in full sentences, with active voice. 'We will …'" 2. The grammar matters. A passive voice ADR ("It was decided that …") fails the read-aloud test. The active voice is the same active voice every good engineering document uses.

The seven steps fit on an index card:

  1. Create docs/decisions/0007-adopt-opentelemetry.md.
  2. Title in noun phrase form ("Adopt OpenTelemetry for request tracing").
  3. Status: Proposed.
  4. Two sentences of context — the constraint, the alternatives in scope.
  5. One sentence of decision in active voice — "We will adopt OpenTelemetry."
  6. A short bulleted list of consequences — the new things possible, the new things harder.
  7. Open the pull request. Move status to Accepted on merge.

Steps 1–2 collapse if you have a CLI installed. The npryce/adr-tools shell tool, at 5.6k stars on GitHub and last released July 2018, scaffolds files of this exact shape with adr new "Adopt OpenTelemetry" 5. The MADR project ships its own templates and a Gitpod link to start a record without local setup 6. Either tool removes the friction — and friction is the only thing standing between your team and the practice.

The thirty-minute version

The thirty-minute ADR is the one you write when getting the decision wrong will cost months of refactor. It is the same five sections, with optional MADR fields filled in: decision drivers, considered options, pros and cons, and a confirmation section naming how the decision will be measured 6. Default to this past month three.

The MADR long template — currently at v4.0.0, dual-licensed MIT and CC0 — adds five optional sections to Nygard's spine: Decision Drivers, Considered Options, Pros and Cons of the Options, Confirmation, and More Information 6. The point is to capture not only the choice but the rejected alternatives and the reasons. The Andrew Harmel-Law article published on Martin Fowler's bliki in December 2021 names the function of these sections directly: "these key elements operate like a thinking checklist, and prompt the decide-ee regarding what they need to think about, and more importantly have conversations about." 10

The expanded skeleton, in the MADR style, reads like this. Each heading is real; the bracketed prompts are the questions the writer must answer.

---
status: proposed
date: 2026-07-17
deciders: [alice, bob, carol]
consulted: [security-team]
informed: [#engineering channel]
---

# Use Postgres 17 for the document service

## Context and Problem Statement
Why are we choosing a database? What constraint is the
forcing function — latency, durability, vendor cost?

## Decision Drivers
- Latency budget under 50 ms p99
- Single-writer model — strong consistency required
- Small-scale infra budget under $20/month

## Considered Options
- Postgres 17 (managed)
- SQLite + Litestream
- DynamoDB

## Decision Outcome
Chosen option: "Postgres 17", because it satisfies the
strong-consistency requirement at the lowest operational
cost while keeping the door open to read replicas.

## Consequences
- Good, because the team already runs psql daily.
- Bad, because we now own a stateful service.

## Confirmation
The decision is confirmed if the p99 latency on the
document API stays under 50 ms for thirty consecutive days
after launch.

That is the format ThoughtWorks recommended in its 2017 Adopt entry, the format AWS recommends in its 2022 prescriptive guide, and the format the MADR project ships as adr-template.md 3 7 6. The thirty-minute version is not a different document. It is the five-minute version with the optional sections honestly answered.

The Confirmation section is the one most teams skip and the one that pays off most. AWS's guidance is clear about why: "ADRs and the decision log they create represent decisions made by the team and provide a history of all decisions." 11 An ADR with a measurable confirmation criterion gives the next team a way to know whether the decision was right. Without it, the record is a snapshot. With it, the record is a hypothesis.

Where to keep your ADRs and how to number them

Keep them in the source repository, in a folder called docs/decisions/ or docs/adr/, in numbered markdown files with the convention NNNN-title-in-kebab-case.md. ThoughtWorks made this convention its Adopt-ring recommendation in November 2017 for a stated reason: store the details in source control "instead of a wiki or website, as then they can provide a record that remains in sync with the code itself" 3. A wiki drifts. A docs/decisions/ folder lives in the same pull request as the code that implements the decision.

The numbering convention comes from Nat Pryce's 2014-vintage adr-tools shell utility — 0001, 0002, 0003, with leading zeros so they sort correctly in any file browser 5. The MADR project follows the same convention with the format NNNN-title.md 6. AWS recommends the same shape with a Status: Proposed | Accepted | Rejected | Superseded lifecycle 11. Three independent communities converged on the same naming because the alternative — latest-database-decision-final-v3.md — fails the moment the team grows past two people.

When a new ADR supersedes an old one, do not delete the old file. Set its status to Superseded by ADR-0042 and create the new record. AWS phrases the rule with the precision of an immutability constraint: "When the team accepts an ADR, it becomes immutable. If new insights require a different decision, the team proposes a new ADR." 11 An ADR log is a chain. The chain is the value. A team that overwrites old records loses the only artefact that explains why the new record exists.

Common mistakes

Most teams that try ADRs and quit do so for the same five reasons. The Joel Parker Henderson repository — 16.5k stars, the canonical English-language ADR resource — puts the warning in its teamwork advice: "decision records are a way for teams to think smarter and communicate better; decision records are not valuable if they're just an after-the-fact forced paperwork requirement." 4 The five mistakes below all collapse into that one line.

The fifth mistake — skipping consequences — is the one that breaks the practice silently. Andrew Harmel-Law's piece on Martin Fowler's bliki names the cost of skipping it: "I have always seen better, faster, more accountable decisions, and most importantly decisions which are understood and owned by those who implement them." 10 The accountability lives in the consequences section. Without it, the record is documentation theatre.

Why the ADR log is the most evergreen thing in your repo

An ADR log is the rare engineering artefact that gains value as it ages. Code gets rewritten; the reasoning behind it does not, because the constraints that produced it were real on the day they were written. Andy Matuschak's frame for durable notes fits the log exactly: notes written and organized to "evolve, contribute, and accumulate over time, across projects" 12.

That durability depends on the format, not the tool. A docs/decisions/ folder of numbered markdown files survives every editor, wiki migration, and vendor change the team will live through — the same local-first argument that applies to any plain-text archive you intend to keep. Wiki-link syntax — [[0007-adopt-opentelemetry]] — connects records to the specs that reference them in any editor that supports it, so the chain of reasoning stays navigable without a database behind it.

Frequently Asked Questions

These are the questions that come up every time the topic surfaces on r/ExperiencedDevs and Hacker News. The answers are the honest version, written for the engineer who has read this far and is wondering whether the practice is worth the friction. The short version: it is, but not for the reasons most blog posts give.

Who invented architecture decision records?

Michael Nygard published "Documenting Architecture Decisions" on the Cognitect blog on 15 November 2011 2. Nygard is a software architect and the author of Release It!, second edition (Pragmatic Bookshelf, January 2018), whose publisher biography described him at the time as "a professional programmer and architect for more than 15 years" 13. ThoughtWorks moved the technique to its Adopt ring in November 2017, which is when the practice went mainstream 3.

What is the difference between MADR and the Nygard template?

The Nygard template has four sections — Status, Context, Decision, Consequences 9. MADR adds optional Decision Drivers, Considered Options, Pros and Cons, Confirmation, and More Information 6. MADR is at v4.0.0 (released 17 September 2024), dual-licensed MIT/CC0 6. The format itself has academic provenance: Kopp et al.'s 2018 paper "Markdown Architectural Decision Records: Format and Tool Support" gave the project its scholarly footing 14. Use Nygard for the spine; switch to MADR when decisions get controversial enough to need recorded alternatives.

Where should I store my ADRs?

In the source repository, in docs/decisions/ or docs/adr/, in numbered markdown files. ThoughtWorks specifically recommended source-control storage when they promoted the technique to Adopt in November 2017 3. The MADR convention is NNNN-title.md inside docs/decisions/ 6; the npryce adr-tools default is doc/adr/NNNN-title.md 5.

What is the difference between an ADR and an RFC?

RFCs are larger pre-decision documents; ADRs are smaller post-decision records. HashiCorp's RFC template includes Background, Proposal, Implementation, UI/UX, and Abandoned Ideas sections 15. Oxide Computer's RFD process, published as RFD 1 in July 2020, sits in the same family 16. Spotify frames the relationship cleanly — write an RFC first, then create an ADR once a solution is decided 17.

Are ADRs worth the time on a small team?

Yes, especially on a small team. The smaller the team, the higher the per-person cost of forgetting why a decision was made. Spotify reported in April 2020 that "ADRs have made it easier for teams to align on best practices." 17 On a team of one, future-you is the next member — and has forgotten why.

Should every decision get an ADR?

No. AWS lists five categories worth recording — structure, non-functional requirements, dependencies, interfaces, and construction techniques 11. Spolsky's heuristic from "Things You Should Never Do" applies: capture the decisions future developers will be tempted to undo without understanding the constraints 8. A naming-convention does not need an ADR. A database choice does.

What tooling should I use?

Three options, all free and open source. The npryce adr-tools shell utility (5.6k GitHub stars, v3.0.0, July 2018) for command-line scaffolding 5. The MADR project for templates only — clone, copy adr-template.md, write 6. Log4brains by Thomas Vaillant (1.5k stars, v1.1.0, 17 December 2024) for a static-site preview with hot reload 18. Star counts as of 17 July 2026. Pick one in fifteen minutes.

Can ADRs replace technical documentation?

No, and they are not trying to. ADRs document why a decision was made; reference documentation describes how the system works. Steph Ango's file-over-app rule applies: "digital artifacts that last … must be files you can control, in formats that are easy to retrieve and read." 19 Reference docs, runbooks, and onboarding guides sit alongside the ADR log.

The first ADR

Write one ADR a week for thirty days, and the second time someone re-litigates the tracing decision, you will hand them ADR-0007 instead of repeating yourself. The record is cheaper than the argument, every time. Open 0001-use-adrs.md and write the first one tonight.


Drafting those records before they ship to your repo works in any markdown editor — MNMNOTE is a browser-based one that runs without an account.

References

Footnotes

  1. Pragmatic Bookshelf. "Release It! Second Edition: Design and Deploy Production-Ready Software." January 2018. ISBN 9781680502398, 376 pages. https://pragprog.com/titles/mnee2/release-it-second-edition/. Michael Nygard biography (as published with the 2018 second edition): "Michael Nygard has been a professional programmer and architect for more than 15 years… has written and co-authored several books, including 97 Things Every Software Architect Should Know." Re-verified 2026-07-17.

  2. Nygard, M. (15 November 2011). "Documenting Architecture Decisions." Cognitect blog. https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions. Direct quotes including "stated in full sentences, with active voice. 'We will …'" and "Developers and project stakeholders can see the ADRs, even as the team composition changes over time." Accessed 2026-05-16. 2 3 4 5

  3. ThoughtWorks. "Lightweight Architecture Decision Records." Technology Radar. First listed Trial in November 2016; promoted to Adopt in November 2017 and re-confirmed in May 2018. https://www.thoughtworks.com/radar/techniques/lightweight-architecture-decision-records. Nov 2017 Adopt entry: "We recommend storing these details in source control, instead of a wiki or website, as then they can provide a record that remains in sync with the code itself. For most projects, we see no reason why you wouldn't want to use this technique." Re-verified 2026-07-17. 2 3 4 5 6

  4. joelparkerhenderson/architecture-decision-record. GitHub repository (now hosted under the architecture-decision-record organization; the original URL redirects). 16.5k stars, 2.8k forks as of 17 July 2026. https://github.com/joelparkerhenderson/architecture-decision-record. From the "Teamwork advice for ADRs" section: "decision records are a way for teams to think smarter and communicate better; decision records are not valuable if they're just an after-the-fact forced paperwork requirement." Re-verified 2026-07-17. 2

  5. Pryce, N. "adr-tools: Command-line tools for working with Architecture Decision Records." GitHub repository. 5.6k stars, 631 forks as of 17 July 2026. Latest release v3.0.0 (25 July 2018), still current. Default directory doc/adr. https://github.com/npryce/adr-tools. Re-verified 2026-07-17. 2 3 4 5

  6. adr/madr. "Markdown Architectural Decision Records (MADR)." GitHub repository. 2.3k stars, 464 forks as of 17 July 2026. Latest release v4.0.0 (17 September 2024), still current; dual-licensed "MIT OR CC0-1.0". https://adr.github.io/madr/ and https://github.com/adr/madr. "Markdown Architectural Decision Records (MADR) – decisions that matter." Re-verified 2026-07-17. 2 3 4 5 6 7 8 9 10 11 12 13

  7. Kunce, D., & Goby, D. (initial publication 16 March 2022). "Using architectural decision records to streamline decision-making during development." AWS Prescriptive Guidance. https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/introduction.html. (The guide has been retitled and the earlier welcome.html URL now returns 404.) Quotes include the three anti-patterns and "Capturing the decision, the context, and considerations that led to the decision in the form of an ADR enables current and future stakeholders to collect information about the decisions made and the thought process behind each decision." Re-verified 2026-07-17. 2 3 4

  8. Spolsky, J. (6 April 2000). "Things You Should Never Do, Part I." Joel on Software. https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/. "It's harder to read code than to write it." Accessed 2026-05-16. 2

  9. joelparkerhenderson/architecture-decision-record. "Decision record template by Michael Nygard." GitHub repository (English locale). https://github.com/joelparkerhenderson/architecture-decision-record/blob/main/locales/en/templates/decision-record-template-by-michael-nygard/index.md. Canonical template text quoted verbatim. Accessed 2026-05-16. 2 3

  10. Harmel-Law, A. (15 December 2021). "Scaling the Practice of Architecture, Conversationally." martinfowler.com. https://martinfowler.com/articles/scaling-architecture-conversationally.html. "These key elements operate like a thinking checklist." "I have always seen better, faster, more accountable decisions, and most importantly decisions which are understood and owned by those who implement them." Accessed 2026-05-16. 2

  11. Kunce, D., & Goby, D. (March 2022). "ADR process." AWS Prescriptive Guidance. https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/adr-process.html. "When the team accepts an ADR, it becomes immutable." Five categories of architecturally significant decisions enumerated. Accessed 2026-05-16. 2 3 4 5

  12. Matuschak, A. "Evergreen notes." https://notes.andymatuschak.org/Evergreen_notes. "Evergreen notes are written and organized to evolve, contribute, and accumulate over time, across projects." Accessed 2026-05-16.

  13. Pragmatic Bookshelf. "Release It! Second Edition." January 2018. ISBN 9781680502398. https://pragprog.com/titles/mnee2/release-it-second-edition/. Michael Nygard biography (as published with the 2018 second edition): "Michael Nygard has been a professional programmer and architect for more than 15 years." Re-verified 2026-07-17.

  14. Kopp, O., Armbruster, A., & Zimmermann, O. (2018). "Markdown Architectural Decision Records: Format and Tool Support." Proceedings of the 10th Central European Workshop on Services and their Composition (ZEUS 2018), Dresden, Germany, 8–9 February 2018. CEUR-WS Vol-2072, pp. 55–62. https://ceur-ws.org/Vol-2072/. Scholarly foundation for the MADR project. Re-verified 2026-07-17.

  15. HashiCorp. "How to use RFCs to make better technical decisions." How HashiCorp Works. https://www.hashicorp.com/how-hashicorp-works/articles/rfc-template. RFC template sections: Summary, Background, Proposal, Implementation, UI/UX, Abandoned Ideas. On the Background section: "as a newcomer to this project (new employee, team transfer), can I read the background section and follow any links to get the full context of why this change is necessary?" Verified 2026-07-17 via the Internet Archive snapshot of 15 January 2025 (https://web.archive.org/web/20250115192937/https://www.hashicorp.com/how-hashicorp-works/articles/rfc-template); the live URL rate-limits automated requests.

  16. Frazelle, J. (24 July 2020). "RFD 1 Requests for Discussion." Oxide Computer Company. https://oxide.computer/blog/rfd-1-requests-for-discussion. "Writing down ideas is important: it allows them to be rigorously formulated (even while nascent), candidly discussed and transparently shared." Re-verified 2026-07-17.

  17. Blake, J. (14 April 2020). "When Should I Write an Architecture Decision Record." Spotify Engineering. https://engineering.atspotify.com/2020/04/when-should-i-write-an-architecture-decision-record. "An Architecture Decision Record (ADR) is a document that captures a decision, including the context of how the decision was made and the consequences of adopting the decision." "ADRs have made it easier for teams to align on best practices across Spotify." Accessed 2026-05-16. 2

  18. Vaillant, T. "log4brains: Architecture Decision Records (ADR) management and publication tool." GitHub repository. 1.5k stars, 112 forks as of 17 July 2026. v1.1.0 released 17 December 2024, still current; Apache 2.0. https://github.com/thomvaill/log4brains. Re-verified 2026-07-17.

  19. Ango, S. (1 July 2023). "File over app." https://stephango.com/file-over-app. "If you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read." Accessed 2026-05-16.