Architecture Decision Record

Master this essential documentation concept

Quick Definition

A document that captures an important technical or architectural decision made during software development, including the context, options considered, and reasoning behind the chosen approach.

How Architecture Decision Record Works

graph TD A[User Interface] --> B[API Gateway] B --> C[Service Layer] C --> D[Data Layer] D --> E[(Database)] B --> F[Authentication] F --> C

Understanding Architecture Decision Record

A document that captures an important technical or architectural decision made during software development, including the context, options considered, and reasoning behind the chosen approach.

Key Features

  • Centralized information management
  • Improved documentation workflows
  • Better team collaboration
  • Enhanced user experience

Benefits for Documentation Teams

  • Reduces repetitive documentation tasks
  • Improves content consistency
  • Enables better content reuse
  • Streamlines review processes

Keeping Architecture Decision Records Out of Video Silos

Many teams walk through architecture decisions in recorded design reviews, engineering all-hands, or async Loom updates — explaining the context, the options considered, and why a particular approach won out. In the moment, this feels thorough. Six months later, when a new engineer asks why the system is structured a certain way, that reasoning is buried somewhere in a video timestamp nobody can find.

This is where video-only approaches break down for architecture decision records specifically. An ADR is only useful if it's searchable, referenceable, and linkable from a pull request or onboarding doc. A 45-minute architecture review recording is none of those things. Your team ends up either re-explaining decisions repeatedly or making changes without understanding the original constraints that shaped them.

Converting recorded architecture discussions into structured documentation lets you extract the exact content an architecture decision record needs: the problem statement, the alternatives evaluated, and the rationale for the chosen direction. A recorded system design session, for example, can become a formal ADR that lives alongside your codebase — complete with the nuanced reasoning your architects actually voiced, not a sanitized summary written after the fact.

If your team regularly discusses technical direction on video but struggles to turn those conversations into durable records, see how video-to-documentation workflows can help →

Real-World Documentation Use Cases

Documenting a Database Migration from PostgreSQL to CockroachDB

Problem

A platform team switches from PostgreSQL to CockroachDB for global distribution, but six months later new engineers keep questioning why the non-standard database was chosen, reopening the same debates and slowing onboarding.

Solution

An ADR captures the evaluated alternatives (PostgreSQL with Citus, Amazon Aurora Global, CockroachDB), the constraints driving the decision (multi-region writes, CAP theorem trade-offs, operational cost), and the explicit rationale, giving new engineers a single authoritative source to read instead of interrogating senior engineers.

Implementation

['Create ADR-0023-cockroachdb-adoption.md in the /docs/adr directory, filling in the context section with the specific scaling problem: 400ms write latency for EU users hitting a US-East PostgreSQL primary.', 'List each evaluated option with a pros/cons table covering consistency model, operational overhead, licensing cost, and team familiarity.', 'Record the final decision with explicit trade-offs acknowledged, such as accepting eventual consistency in partition scenarios in exchange for active-active multi-region writes.', 'Link the ADR from the database README, the infrastructure Terraform module, and the onboarding guide so it surfaces naturally during code review and setup.']

Expected Outcome

New engineers understand the database choice within their first week without requiring a 1-on-1 with the platform lead, and the team stops relitigating the decision in quarterly architecture reviews.

Recording the Adoption of GraphQL over REST for a Partner API

Problem

A product team ships a GraphQL API to replace REST endpoints, but partner developers and internal mobile teams keep filing tickets asking why REST was abandoned and whether REST will return, creating support overhead and eroding trust in the API roadmap.

Solution

An ADR documents the specific driver — partners needed to fetch nested order, customer, and inventory data in a single request, causing 7 sequential REST calls and 2.3s load times on mobile — and records that REST was kept for webhook callbacks where GraphQL offered no advantage.

Implementation

['Write ADR-0041-graphql-partner-api.md capturing the quantified problem: average partner integration required 7 REST calls per page load, measured via API gateway logs.', 'Document three options evaluated: REST with compound documents (JSON:API), gRPC streaming, and GraphQL with persisted queries, including which partners were consulted during the evaluation.', 'State the decision boundary clearly — GraphQL for query/mutation operations, REST retained for webhooks and file upload endpoints — so future engineers know the scope.', 'Publish the ADR in the developer portal alongside the API reference so external partners can read the rationale without filing a support ticket.']

Expected Outcome

Partner support tickets asking 'why GraphQL' drop to near zero, and the mobile team confidently builds against the API knowing REST endpoints for webhooks are intentionally preserved and stable.

Capturing the Decision to Adopt a Monorepo with Nx for Frontend Packages

Problem

A frontend platform team migrates 12 separate npm packages into a Nx monorepo, but three months later two senior engineers propose splitting them back out, unaware of the specific CI/CD and versioning problems that originally drove the consolidation.

Solution

An ADR records the exact pain points that justified the monorepo — 45-minute cross-package integration cycles, inconsistent TypeScript config drift across repos, and inability to make atomic changes spanning the design system and consuming apps — making the original constraints visible before any reversal is attempted.

Implementation

['Draft ADR-0007-nx-monorepo-frontend.md immediately after the migration decision, while the context is fresh, including the specific metrics: 45-min CI time, 12 repos with diverged ESLint configs, and 3 incidents caused by mismatched peer dependency versions.', "Document the alternatives evaluated: Turborepo, Lerna with independent versioning, and keeping separate repos with a private npm registry, with a scoring matrix against the team's criteria.", "Record dissenting opinions from engineers who preferred Turborepo, acknowledging their concerns about Nx's opinionated project graph, so future readers understand the decision was not unanimous.", 'Set a review date of 12 months in the ADR metadata so the team formally revisits whether the monorepo is still serving its purpose rather than drifting indefinitely.']

Expected Outcome

The proposal to split the monorepo is evaluated against documented original constraints rather than anecdote, and the team either validates the reversal with new evidence or confidently continues with Nx based on the recorded rationale.

Documenting the Choice of Event Sourcing for an Audit-Heavy Compliance Service

Problem

A fintech team builds a compliance ledger using event sourcing, but auditors and new backend engineers repeatedly ask why the system stores events instead of current state, and compliance engineers spend hours in meetings explaining the architectural pattern rather than building features.

Solution

An ADR explains that regulatory requirements mandate a complete immutable history of every state change to customer accounts, that traditional CRUD with audit log tables was rejected because it allowed retroactive record deletion, and that event sourcing was selected specifically to satisfy SOC 2 Type II and PCI-DSS audit trail requirements.

Implementation

['Write ADR-0015-event-sourcing-compliance-ledger.md with the regulatory constraint as the opening context: PCI-DSS Requirement 10.2 mandates tamper-evident logs of all access and changes to cardholder data.', 'Document the rejected CRUD-plus-audit-log approach with a concrete failure scenario: a database admin with DELETE privileges could remove both the record and its audit entry, which fails the tamper-evidence requirement.', 'Describe the event sourcing implementation chosen — Apache Kafka with log compaction disabled on the compliance topic, events stored in append-only S3 with Object Lock — linking to the infrastructure ADR for storage.', 'Attach a link to the external compliance requirement documents and the internal legal sign-off email so auditors can trace the decision back to its regulatory source.']

Expected Outcome

During the next SOC 2 audit, the compliance team shares the ADR directly with auditors as evidence of intentional design, reducing the audit preparation time by an estimated two days and eliminating recurring internal architecture explanation meetings.

Best Practices

Write the ADR at Decision Time, Not After Implementation

ADRs written weeks after a decision is implemented lose the critical context of what alternatives were seriously considered and why they were ruled out. The moment of decision is when the trade-offs are most clearly understood by the team. Capturing the ADR as a pull request opened alongside the implementation PR ensures the reasoning is recorded before institutional memory fades.

✓ Do: Open the ADR pull request at the same time as the implementation PR, requiring the ADR to be merged before or alongside the code change, enforced via a PR template checklist item asking 'Does this change require an ADR?'
✗ Don't: Do not retroactively document decisions months later by asking engineers to reconstruct their reasoning from Slack history and commit messages, as the resulting ADR will omit the rejected alternatives that were never committed to code.

Record Rejected Alternatives with Specific Disqualifying Reasons

An ADR that only describes the chosen solution provides no value over a README. The decision record becomes genuinely useful when it explains why plausible alternatives were not chosen, giving future engineers the information they need to know whether those alternatives are worth revisiting. Each rejected option should have at least one concrete, specific reason for rejection rather than a vague preference.

✓ Do: List each seriously evaluated alternative with a specific disqualifying constraint, such as 'Redis Cluster was rejected because our cloud provider's managed Redis does not support cluster mode in the eu-west-2 region, which is required by our data residency policy.'
✗ Don't: Do not write alternatives sections that say 'Option B: Use Redis. Pros: fast. Cons: complex.' without explaining why the complexity was disqualifying in your specific context, as this gives future engineers no basis for re-evaluation.

Use Superseded Status Instead of Editing or Deleting Old ADRs

When a decision changes, editing the original ADR destroys the historical record of what the team believed and knew at a previous point in time. A new ADR that explicitly supersedes the old one preserves the full decision history, which is invaluable for understanding why a system evolved the way it did and for post-incident reviews. Both ADRs should link to each other bidirectionally.

✓ Do: Create ADR-0052-migrate-from-jwt-to-opaque-tokens.md with a 'Supersedes: ADR-0019' field, and update ADR-0019's status to 'Superseded by ADR-0052' with a direct link, so anyone reading either document can navigate the full decision history.
✗ Don't: Do not edit ADR-0019 to change the decision from JWT to opaque tokens, as this erases the record of why JWT was originally chosen and makes it impossible to understand whether the original constraints have changed or the decision was simply wrong.

Anchor Context in Measurable Constraints, Not Opinions

ADR context sections written as opinions ('the team felt the current approach was too slow') become meaningless over time because opinions change and cannot be verified. Context anchored in measurable constraints ('p99 API latency was 1.8s under 500 concurrent users, exceeding our 500ms SLA') gives future engineers objective criteria to evaluate whether the original problem still exists. Quantified constraints also make it clear when a decision should be revisited.

✓ Do: Write context statements with specific metrics, regulatory citations, or reproducible failure scenarios: 'The current XML parsing library allocates 4x the payload size in heap memory, causing OOM kills on instances with less than 2GB RAM, which is 60% of our production fleet.'
✗ Don't: Do not write context as subjective team sentiment such as 'everyone agreed the old approach was hard to maintain' or 'the team wanted something more modern,' as these statements cannot be evaluated by engineers who were not present for the discussion.

Store ADRs in the Repository They Govern, Versioned with the Code

ADRs stored in a separate wiki or shared drive become disconnected from the codebase they describe, making them invisible during code review and difficult to find when debugging a system. Storing ADRs as Markdown files in a /docs/adr directory within the repository ensures they are versioned alongside the code, appear in git blame and log history, and can be referenced in pull requests and commit messages. Engineers encounter them naturally rather than needing to know where to look.

✓ Do: Place ADRs at /docs/adr/NNNN-short-title.md within the service repository, reference them in code comments where the decision manifests (e.g., '// See docs/adr/0023-cockroachdb-adoption.md for why we use SERIALIZABLE isolation here'), and include an ADR index in the repository README.
✗ Don't: Do not store ADRs exclusively in Confluence, Notion, or a shared Google Drive folder, as these locations are not consulted during code review, are not versioned with the code, and become orphaned when team members leave or tools are migrated.

How Docsie Helps with Architecture Decision Record

Build Better Documentation with Docsie

Join thousands of teams creating outstanding documentation

Start Free Trial