Professional Documents
Culture Documents
dassiorleando_architecture-decision-record_ Architecture decision record (ADR) examples for software planning, IT leadership, and template documentation
dassiorleando_architecture-decision-record_ Architecture decision record (ADR) examples for software planning, IT leadership, and template documentation
dassiorleando_architecture-decision-record_ Architecture decision record (ADR) examples for software planning, IT leadership, and template documentation
dassiorleando /
architecture-decision-record
Architecture decision record (ADR) examples for software planning, IT leadership, and template documentation
README
Contents:
Templates:
Examples:
CSS framework
Environment variable configuration
Metrics, monitors, alerts
Microsoft Azure DevOps
Monorepo vs multirepo
Programming languages
Secrets storage
Timestamp format
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).
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:
Decision identification:
https://github.com/dassiorleando/architecture-decision-record 2/7
7/15/24, 1:59 PM dassiorleando/architecture-decision-record: Architecture decision record (ADR) examples for software planning, IT leadership, …
Both personal and collective experience, as well as recognized design methods and practices, can assist
with decision identification.
Ideally maintain a decision todo list that complements the product todo list.
Decision making:
A number of decision making techniques exists, both general ones and software architecture specific
ones, for instance, dialogue mapping.
ADs are used in software design; hence they have to be communicated to, and accepted by, the
stakeholders of the system that fund, develop, and operate it.
Architecturally evident coding styles and code reviews that focus on architectural concerns and
decisions are two related practices.
ADs also have to be (re-)considered when modernizing a software system in software evolution.
Hence, experiences with past decisions, both good and bad, can be valuable reusable assets when
employing an explicit knowledge management strategy.
Decision documentation:
See traditional software engineering and architecture design processes, e.g. table layouts suggested by
IBM UMF and by Tyree and Akerman from CapitalOne.
Decision guidance:
The steps above are adopted from the Wikipedia entry on Architectural Decision
A number of decision making techniques exists, both general ones and software architecture specific
ones, for instance, dialogue mapping.
For example:
If you like using Google Drive and online editing, then you can create a Google Doc, or Google Sheet.
If you like use source code version control, such as git, then you can create a file for each ADR.
https://github.com/dassiorleando/architecture-decision-record 3/7
7/15/24, 1:59 PM dassiorleando/architecture-decision-record: Architecture decision record (ADR) examples for software planning, IT leadership, …
If you like using project planning tools, such as Atlassian Jira, then you can use the tool's planning
tracker.
If you like using wikis, such as MediaWiki, then you can create an ADR wiki.
$ mkdir adr
$ vi database.txt
Write anything you want in the ADR. See the templates in this repository for ideas.
Examples:
choose-database.md
format-timestamps.md
manage-passwords.md
handle-exceptions.md
The name has a present tense imperative verb phrase. This helps readability and matches our commit
message format.
The name uses lowercase and dashes (same as this repo). This is a balance of readability and system
usability.
Rational: Explain the reasons for doing the particular AD. This can include the context (see below), pros
and cons of various potential choices, feature comparions, cost/benefit discussions, and more.
https://github.com/dassiorleando/architecture-decision-record 4/7
7/15/24, 1:59 PM dassiorleando/architecture-decision-record: Architecture decision record (ADR) examples for software planning, IT leadership, …
Specific: Each ADR should be about one AD, not multiple ADs.
Timestamps: Identify when each item in the ADR is written. This is especially important for aspects that
may change over time, such as costs, schedules, scaling, and the like.
Immutable: Don't alter existing information in an ADR. Instead, amend the ADR by adding new
information, or supersede the ADR by creating a new ADR.
Include rationale and considerations based on social and skills makeups of your teams.
Include pros and cons that are relevant, and describe them in terms that align with your needs and
goals.
Explain what follows from making the decision. This can include the effects, outcomes, outputs, follow
ups, and more.
Include information about any subsequent ADRs. It's relatively common for one ADR to trigger the need
for more ADRs, such as when one ADR makes a big overarching choice, which in turn creates needs for
more smaller decisions.
Include any after-action review processes. It's typical for teams to review each ADR one month later, to
compare the ADR information with what's happened in actual practice, in order to learn and grow.
When an AD is made that replaces or invalidates a previous ADR, then a new ADR should be created
ADR template for business case (more MBA-oriented, with costs, SWOT, and more opinions)
Teamwork advice
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.
https://github.com/dassiorleando/architecture-decision-record 5/7
7/15/24, 1:59 PM dassiorleando/architecture-decision-record: Architecture decision record (ADR) examples for software planning, IT leadership, …
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 capabilties, pricing plans, license agreements, etc.
Templates:
In-depth:
Architectural Decision Guidance across Projects: Problem Space Modeling, Decision Backlog
Management and Cloud Computing Knowledge (ifs.hsr.ch)
Tools:
Company-Specific Guidance:
https://github.com/dassiorleando/architecture-decision-record 6/7
7/15/24, 1:59 PM dassiorleando/architecture-decision-record: Architecture decision record (ADR) examples for software planning, IT leadership, …
Examples:
See also:
Releases
No releases published
Packages
No packages published
https://github.com/dassiorleando/architecture-decision-record 7/7