Home

Awesome

<!-- browser: architecture-decision-record tracker: 2bd6622ec3beeeddd8ff55cf0ccf2efc version: 3.0.0 updated: 2023-11-07T20:42:12Z contact: Joel Parker Henderson (http://joelparkerhenderson.com) options: commentable -->

Architecture decision record (ADR)

An architecture decision record (ADR) is a document that captures an important architecture decision made along with its context and consequences.

Contents:

Templates:

Examples:

Translations into more languages

<div class="include" data-path="locales/en/what-is-an-architecture-decision-record">

What is an architecture decision record?

An architecture decision record (ADR) is a document that captures an important architectural decision made along with its context and consequences.

An architecture decision (AD) is a software design choice that addresses a significant requirement.

An architecture decision log (ADL) is the collection of all ADRs created and maintained for a particular project (or organization).

An architecturally-significant requirement (ASR) is a requirement that has a measurable effect on a software system’s architecture.

All these are within the topic of architecture knowledge management (AKM).

The goal of this document is to provide a fast overview of ADRs, how to create them, and where to look for more information.

Abbreviations:

</div> <div class="include" data-path="locales/en/how-to-start-using-adrs">

How to start using ADRs

To start using ADRs, talk with your teammates about these areas.

Decision identification:

Decision making:

Decision enactment and enforcement:

Decision sharing (optional):

Decision documentation:

For more:

</div> <div class="include" data-path="locales/en/how-to-start-using-adrs-with-tools">

How to start using ADRs with tools

You can start using ADRs with tools any way you want.

For example:

</div> <div class="include" data-path="locales/en/how-to-start-using-ADRs-with-git">

How to start using ADRs with git

If you like using git version control, then here is how we like to start using ADRs with git for a typical software project with source code.

Create a directory for ADR files:

$ mkdir adr

For each ADR, create a text file, such as database.txt:

$ vi database.txt

Write anything you want in the ADR. See the templates in this repository for ideas.

Commit the ADR to your git repo.

</div> <div class="include" data-path="locales/en/file-name-conventions-for-adrs">

File name conventions for ADRs

If you choose to create your ADRs using typical text files, then you may want to come up with your own ADR file name convention.

We prefer to use a file name convention that has a specific format.

Examples:

Our file name convention:

</div> <div class="import" data-path="locales/en/suggestions-for-writing-good-adrs">

Suggestions for writing good ADRs

Characteristics of a good ADR:

Characteristics of a good "Context" section in an ADR:

Characteristics of good "Consequences" section in an ADR:

A new ADR may take the place of a previous ADR:

</div>

ADR example templates

ADR example templates that we have collected on the net:

<div class="import" data-path="locales/en/teamwork-advice-for-adrs">

Teamwork advice for ADRs

If you're considering using decision records with your team, then here's some advice that we've learned by working with many teams.

You have an opportunity to lead your teammates, by talking together about the "why", rather than mandating the "what". For example, 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.

Some teams much prefer the name "decisions" over the abbreviation "ADRs". When some teams use the directory name "decisions", then it's as if a light bulb turns on, and the team starts putting more information into the directory, such as vendor decisions, planning decisions, scheduling decisions, etc. All of these kinds of information can use the same template. We hypothesize that people learn faster with words ("decisions") over abbreviations ("ADRs"), and people are more motivated to write work-in-progress docs when the word "record" is removed, and also some developers and some managers dislike the word "architecture".

In theory, immutability is ideal. In practice, mutability has worked better for our teams. We insert the new info the existing ADR, with a date stamp, and a note that the info arrived after the decision. This kind of approach leads to a "living document" that we all can update. Typical updates are when we get information thanks to new teammates, or new offerings, or real-world results of our usages, or after-the-fact third-party changes such as vendor capabilities, pricing plans, license agreements, etc.

</div>

For more information

Introduction:

Templates:

In-depth:

Tools:

Company-Specific Guidance:

Examples:

See also: