Skip to content

Architecture Decision Recordλ︎

Architecture Decision Record (ADR) is a formal way to capture a significant decision which impacts the current or future system.

Everyone can learn from the history of desisions taken during the evolution of the project without adding burden to the current project team.

Once decisions are made and delivered the ADR document should be treated as immutable, so it becomes a perminant record. Should a decision need to be changed or significantly altered, then a new ADR document should be created that references the orginal ADR.

Scopeλ︎

Create an ADR for architecturally significant decision that affects the software project or product

  • Structure (patterns such as microservices)
  • Non-functional requirements (security, high availability, and fault tolerance)
  • Dependencies (coupling of components)
  • Interfaces (APIs and published contracts)
  • Construction techniques (libraries, frameworks, tools, and processes)

Functional and non-functional requirements are the most common inputs to the ADR process.

Scenariosλ︎

ADRs work well in the following scenarios:

Onboarding

New team members are able to find answers to why decisions were made in the project, allowing focus on new challenges whilst appreciating the existing approach.

Review ADRs when

  • specific questions arise from learning a codebase
  • when making related architectural decisions
  • better understand how the team think and their priorities

Ownership handover:

During a transfer of project the new maintenance team sees the resulting code, but that does not show how and why the project got to its current state.

It is hard to know what are the critical paths of the project, the parts that are very robust and parts that should be treated delicately.

The new maintainers can

  • review past decisions to understand the current state.
  • avoid repeating the same discussion points
  • revisit topics in the future with knowledge of the historical context.
  • review decisions quickly and effectively to understand priorities at the time they were made

Alignment:

Teams can align on best practices across the organization when ADRs detail why certain decisions were made and alternatives were decided against.

ADR's could also be used to capture decisions that form an aspect of the overall engineering strategy, e.g. choice of programming language

Simple ADR template

# Title

## Contributors
- who owns the responsibility for the decision
- contact details for all those involved (if the decision has follow-on or questions arise)

## Status

Define the status of the decision along with the date of change into that state

- proposed <date> 
- accepted <date> 
- rejected <date>  
- deprecated  <date> 
- superseded <date>

## Context

- Primary Issue motivating the decision or change?
- Business context & value
- Timeframe for decision (usually tied to value)

## Decision

Detail of the decision and any change to be made, including how that change is to be realised (i.e. 3rdc party product, bespoke development, migration, testing, deployment, etc.)

Reference additional documentation already created or too be created as part of the change.

## Consequences

Define how the decision impacts the project (and/or organisation), highlighing the benefits and constraints 

- aleviated constraints
- added constraints
- intentional technical debt
- business risks

## Alternatives

Summary of the alternatives considered, incluing references to related documentation

Backfill decisionsλ︎

Decisions made before ADRs became part of the engineering workflow can be retrospectively created, although they may only be a partial record and contain historical inaccuracies regarding the original decsion.

Identify undocumented decisions during a retrospective or an architectural peer review, deciding which decisions are the most valuable to document.

Referencesλ︎

🌐 ADR management tools

🌐 Architectural Decision Records - Amazon

🌐 Example ADR - Amazon

Architecture Decision Record Examples