Giter VIP home page Giter VIP logo

architecture-decision-record's Introduction

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

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:

  • AD: architecture decision

  • ADL: architecture decision log

  • ADR: architecture decision record

  • AKM: architecture knowledge management

  • ASR: architecturally-significant requirement

How to start using ADRs

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

Decision identification:

  • How urgent and how important is the AD?

  • Does it have to be made now, or can it wait until more is known?

  • 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.

  • Group decision making is an active research topic.

Decision enactment and enforcement:

  • 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.

Decision sharing (optional):

  • Many ADs recur across projects.

  • Hence, experiences with past decisions, both good and bad, can be valuable reusable assets when employing an explicit knowledge management strategy.

Decision documentation:

  • Many templates and tools for decision capturing exist.

  • See agile communities, e.g. M. Nygard's ADRs.

  • See traditional software engineering and architecture design processes, e.g. table layouts suggested by IBM UMF and by Tyree and Akerman from CapitalOne.

For more:

How to start using ADRs with tools

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

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.

  • 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.

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.

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:

  • choose-database.md

  • format-timestamps.md

  • manage-passwords.md

  • handle-exceptions.md

Our file name convention:

  • 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.

  • The extension is markdown. This can be useful for easy formatting.

Suggestions for writing good ADRs

Characteristics of a good ADR:

  • Rationale: Explain the reasons for doing the particular AD. This can include the context (see below), pros and cons of various potential choices, feature comparisons, cost/benefit discussions, and more.

  • 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.

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

  • Explain your organization's situation and business priorities.

  • 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.

Characteristics of good "Consequences" section in an ADR:

  • 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.

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

  • When an AD is made that replaces or invalidates a previous ADR, then a new ADR should be created

ADR example templates

ADR example templates that we have collected on the net:

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.

For more information

Introduction:

Templates:

In-depth:

Tools:

Company-Specific Guidance:

Examples:

See also:

  • REMAP (Representation and Maintenance of Process Knowledge)

  • DRL (Decision Representation Language)

  • IBIS (Issue-Based Information System)

  • QOC (Questions, Options, and Criteria)

  • IBM’s e-Business Reference Architecture Framework

architecture-decision-record's People

Contributors

adrienharnay avatar anotherthomas avatar asifrc avatar biggianteye avatar billsaysthis avatar danielcompton avatar dominiqueplante avatar elfotografo007 avatar esparta avatar flavono123 avatar florentpastor-wk avatar idisposable avatar jj avatar joelparkerhenderson avatar kalm42 avatar kimchhickey avatar koppor avatar mkiehl avatar nb avatar phillduffy avatar php-coder avatar pogopaule avatar prathik avatar ryandutton avatar skawaguchi avatar socadk avatar tmc avatar xeptore avatar xpepper avatar zifius avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

architecture-decision-record's Issues

Readme sentence duplication

the sentence

A number of decision making techniques exists, both general ones and software architecture specific ones, for instance, dialogue mapping.

is duplicated twice in the readme.
Is this supposed be that way or is it an accidental error?

May I Translate This GitHub Repository into Korean?

Hello,

I would like to inquire about the possibility of translating the content of this GitHub repository into Korean. I'm seeking to know if there are any specific permissions or guidelines for initiating such a translation. Before commencing the translation work, I would appreciate your guidance on any necessary permissions or discussions.

I believe that your input or approval may be required before I proceed with the translation work. Your cooperation and guidance would be greatly appreciated.

Thank you!

Confusion around »Characteristics of good "Consequences" section in an ADR«

All of the advice in the suggestions for writing good ADRs are pretty well laid out and helpful (thank you for that btw), but i get confused about the following passage:

Characteristics of good "Consequences" section in an ADR:

*  Right approach - "We need to start doing X instead of Y"
*  Wrong approach - Do not explain the AD in terms of "Pros" and "Cons" of having made the particular AD

So is the "wrong approach" not explaining pros & cons (meaning they have to be there?
Is the wrong approach of pros & cons just to mention them in context of the particular AD that has been arrived at, meaning they can be listed, but should remain non-opinionated in the context of the decision drivers?
Is the wrong approach to explain why it is good having made the concerned AD at all? (this is my best guess, but i couldn't think of any cons of having made and documented an AD)
Or does it actually mean that listing pros/cons is discouraged?

If the latter applies, i'm specifically confused because MADR listing positive (pros) and negative consequences (cons) as part of their template (actually as sub-sections of the decision that was arrived at).

Can you kindly shed some light on this and clarifiy?

Maybe it would help to rewrite this section in-line with the other ones above this passage, b/c all of them just list what should be there, rather than what shouldn't. Having a "do not" section may be helpful, but only if it follows good advice on what the consequences section should contain. I guess the "Right approach / wrong approach"-prefix is part of my confusion and could be dropped, in terms of harmonizing it with the way the first paragraph (Characteristics of a good ADR) is written.

I hope my question makes any sense 😉

Spaces in file names

You should not recommend using spaces in file names. It is better to only allow non-whitespace ASCII characters. That will make life more easier when doing scripted stuff because there are lot of tools which does not escape paths correctly.

First ADR should always be about why we introduce ADRs in a project!

If you introduce ADRs into a project (or organisation), then the decision to introduce ADRs should be recorded as an ADR.

This ADR context should explain:

  • WHY documenation of architectural decisions is required,
  • WHY introducing ADRs it is a architectural decision and not a normal decision
  • WHY the ADR approach is best for your project (maybe what other approaches you had considered)

To collect some examples as inspiration to others: Please attach to this github issue your ADR, that introduces ADRs to your project. (This may help others to put arguments when introducing ADRs) ;-)

Consequences - e.g.:

  • enables the "future me" to recall the old context correctly when reviewing this decision e.g. 12 month in the future (when i hopefully will have gained more knowledge)
  • enables your team mates to "review", "accept" and "operate" on this decision (better team knowledge)
  • enables team mates to challenge decisions today or in the future (by being able to detect changes in old and latest context)
  • enables future team mates to join the project more easyer
  • enables to reduce the communication overhead involved when decision is not written down (1:1-chats for knowledge-transfer; imaging team sizes of >10)
  • ...your argument here...

Or do you think that ADR is not a AD at all?

Funding

  • You can sponsor this specific effort via a Polar.sh pledge below
  • We receive the pledge once the issue is completed & verified
Fund with Polar

Suggest adding a Licence

In many contexts, especially commercial, people are not allowed to use, or may worry about using, ideas & templates from places such as GitHub unless there is an explicit statement that they have been published for people to re-use.

Can I suggest adding, with the agreement of the authors of the current content, a LICENSE.txt file with an appropriate license for re-use, assuming that this is the intention here, so that people can re-use without any worries. I would hope that you would all agree to CC0 or MIT so as to allow anybody to freely use the ideas and templates.

i18n

Hey!

Thanks a lot foe this amazing work, we just started to use it, and we feel it was missing and it is the right thing to do moving forward.

I will translate one of the template for a french project, do you have an idea where would be the best place foe people to find it? Maybe 'index-fr.md' ?
I can also PR an adr for that ;)

Cheers!

Typo in repo description.

Hey @joelparkerhenderson, just noticed this typo:

Architecture decision record (ADR) examples for software planning, IT leadership, and template documenation

documenation > documentation

BTW, I've been linking people to your repo for awhile now because it's the best collection of ADR knowledge. Keep up the good work!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.