Architecture Decision Records¶
Overview¶
- An Architecture Decision Record (abbr. ADR) is any document that captures
decisions and context of how an architecture decision was made and its resulting
context.
- In modern codebases, tests and readable code can replace documentation.4
- Large documents are not read often and smaller, atomic writing is easiest for consumption.
- In any system, we want to avoid blind acceptance and reversal
- Significant decisions are those that "affect the structure, non-functional characteristics, dependencies, interfaces, or construction techniques."1
Benefits¶
- Onboarding can include an understanding of the why behind a decision
- Handover can be smooth
- Since stakeholders can read and digest these, you can have multi-discipline best practice alignment2
- Keep why and how out of the original maintainer's brain
When to Write¶
- Backfilling decisions
- Large change proposals (these can be rejected too!)
- Small/lightweight changes too
Sections¶
Context¶
- Describe forces at play.
- Political, social, project specific
Consequences¶
- Resulting context (positive, negative, and neutral)
- i.e. Why or why not a decision was made5
- Larger ADRs provide context for smaller, subsequent ADRs
Tips¶
- Lightweight markup language
- Less than 2 pages
- Use a sequential naming scheme.
- Don't use these to replace good commit messages.3
Template¶
Used by RedHat.3
RedHat ADR Template
- Number/Date: A unique increasing number and date that usually follows the ADR-nnnn pattern to help sort them from old to new
- Title: Indicates the content
- Context (Why): Describes the current situation and why you made this decision or thought it necessary—some variations explicitly break out an "alternatives covered" section to ensure all considerations get recorded
- Decision (What/How): Describes the what and how of the feature
- Status: Describes the status; note that ADRs can be superseded later by newer ADRs
- Consequences: Describes the effect of the decision, listing positive and negative aspects
Further Reading¶
https://cloud.google.com/architecture/architecture-decision-records
https://github.com/peter-evans/lightweight-architecture-decision-records
https://github.com/operate-first/blueprint/tree/main/adr
-
Nygard, Michael. “Documenting Architecture Decisions.” Cognitect.Com, 15 Nov. 2011, https://www.cognitect.com/blog/2011/11/15/documenting-architecture-decisions. ↩
-
Engineering, Spotify. “When Should I Write an Architecture Decision Record.” Spotify Engineering, 14 Apr. 2020, https://engineering.atspotify.com/2020/04/when-should-i-write-an-architecture-decision-record/. ↩
-
hrupp. Why You Should Be Using Architecture Decision Records to Document Your Project. 16 Dec. 2021, https://www.redhat.com/architecture-decision-records. ↩↩
-
“Lightweight Architecture Decision Records | Technology Radar.” Thoughtworks, https://www.thoughtworks.com/radar/techniques/lightweight-architecture-decision-records. Accessed 31 May 2024. ↩
-
ckittel. Architecture Decision Record - Microsoft Azure Well-Architected Framework. 14 Nov. 2023, https://learn.microsoft.com/en-us/azure/well-architected/architect-role/architecture-decision-record. ↩