ADR-MB-001: Use ADRs to define architecture decisions
Status
Accepted
Context
One of the hardest things to track during the life of a project is the motivation behind certain decisions. A new person coming on to a project may be perplexed, baffled, delighted, or infuriated by some past decision.
Decision
We will keep a collection of records for "architecturally significant" decisions: those that affect the structure, non-functional characteristics, dependencies, interfaces, or construction techniques.
We will keep ADRs in the project repository under adr/adr-mb-NNN.md
ADRs will be numbered sequentially and monotonically. Numbers will not be reused.
If a decision is reversed, we will keep the old one around, but mark it as superseded.
We will use a format with just a few parts, so each document is easy to digest. The parts are:
Title: These documents have names that are short noun phrases.
Context: This section describes the forces at play, including technological, political, social, and project local. These forces are probably in tension, and should be called out as such. The language in this section is value-neutral. It is simply describing facts.
Decision: This section describes our response to these forces. It is stated in full sentences, with active voice. "We will …"
Status: A decision may be "proposed" if the project stakeholders haven't agreed with it yet, or "accepted" once it is agreed. If a later ADR changes or reverses a decision, it may be marked as "deprecated" or "superseded" with a reference to its replacement.
Consequences: This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future.
Consequences
One ADR describes one significant decision for a specific project. It should be something that has an effect on how the rest of the project will run.
The consequences of one ADR are very likely to become the context for subsequent ADRs. This is also similar to Alexander's idea of a pattern language: the large-scale responses create spaces for the smaller scale to fit into.
Developers and project stakeholders can see the ADRs, even as the team composition changes over time.