Architecture Decision Records
What is an Architecture Decision?
An Architectural Decision (AD) is a software design choice that addresses a functional or non-functional requirement that is architecturally significant. This might, for instance, be a technology choice (e.g., Java vs. JavaScript), a choice of the IDE (e.g., IntelliJ vs. Eclipse IDE), a choice between a library (e.g., SLF4J vs java.util.logging), or a decision on features (e.g., infinite undo vs. limited undo). Do not take the term “architecture” too seriously or interpret it too strongly. As the examples illustrate, any decisions that might have an impact on the architecture somehow are architectural decisions.
It should be as easy as possible to a) write down the decisions and b) to version the decisions.
source: Markdown Any Decision Records
Notes about ADRs
- Every ADR should explain exactly one single decision.
- Decision records should have a unique code (filename) and title
- Example:
ADR0001 - Use an SQS queue to manage outgoing emails
Lifecycle of an ADR
Decision records should start as a draft version, usually in 'proposed' status, then move to other states as decisions are made, such as 'accepted' or 'rejected'.
The document should be managed in an append-only manner. The only part of the document that should evolve is the STATUS paragraph.
When a decision becomes irrelevant it's status should be changed to deprecated, but if the context of the decision changes then a new ADR should be created and the old one's status moved to superseded.
You can cross-link ADRs. For example "Superseded by ADR0032" and when there is some kind of relation between two decisions like the second one is a consequence of the first one.
WHEN should an ADR be created?
- When the decision will affect the work of the developers
- When the decision will be hardly reversible
- When the decision is not obvious to the entire team (but pay attention, the team will change, sooner or later)
ADR Templates
Basic Template Example
MADR Template Example
Resources about ADRs
- Markdown Any Decision Records - Any Decisions Records (adr.github.io) #madr #adr-template
:::note
Most of the Above was copied and pasted from another site, but I didn't copy the link. As soon as I find that resource again I'll post a link here.
:::
Links to good examples:
- Reclaim the Stack!
Great example of an ADR that is well written and easy to understand