-
Егор Ивков authoredЕгор Ивков authored
ADR Process
Overview
An architectural decision record (ADR) is a document that describes a choice the team makes about a significant aspect of the software architecture they’re planning to build.
The ADR process outputs a collection of architectural decision records. This collection creates the decision log. The decision log provides the project context as well as detailed implementation and design information.
Project members skim the headlines of each ADR to get an overview of the project context. They read the ADRs to dive deep into project implementations and design choices. When the team accepts an ADR, it becomes immutable. If new insights require a different decision, the team proposes a new ADR. When the team accepts the new ADR, it supersedes the previous ADR.
When ADR is needed
In our context usually an ADR is based on functional requirements represented as an epic. Some signs that you might need an ADR:
- Implementing a new major feature
- Huge refactoring in codebase
- The solution can not be expressed in a couple of sentences in an issue
- The solution has several alternatives that need to be considered
- The decision in previous ADR needs to be reconsidered
How to propose an Architectural Decision
Make a copy of adr-template in this directory. Rename it to {creation-date}-{adr-title}.md
(e.g. 01-01-2024-plugins.md
).
We use the date so it's possible to sort them correctly by file name.
Fill the sections that you find relevant for the discussion. Feel free to add additional sections if needed. The template is not strict. You can use any ADR structure that feels best for a particular case. See these ADR examples for inspiration:
- Cassandra SEP - Ganeral Purpose Transactions
- Rust RFC - Lifetime Ellision
- TiKV - Use Joint Consensus
Both Russian and English languages are allowed for ADRs.
Open a merge request to this repository and start the ADR discussion in the comments. The suggested prefix for the commit and MR name is adr:
.
Google Docs
Alternatively if you prefer Google Docs, you can open an empty MR with a link to ADR Google Doc where the discussion will happen. Though it will be still needed to fill the ADR here and merge the MR for ADR to be accepted.
What happens next?
Then as the owner of an ADR and a merge request it's your task to drive it to completion. Get comments from the relevant stakeholders, set deadlines and schedule ADR review meetings as suggested by AWS Guidlines.
ADR - Accepted
ADR is accepted when the merge request is approved by the relevant stakeholders. Then the status
in the template is set to accepted
and the MR is merged. So every ADR that this repository contains should be a final decision with no unanswered questions.
ADR - Rejected
If the suggested change is rejected it is also important to merge the ADR, with the rejected
status and rationale of the rejection.
ADR - Superseded
When there is a need to make an update on the decision that was previously taken. Instead of updating an old ADR,
one should make an alternative ADR with a reference to the previous one on this topic.
When such an MR is approved, the previous ADR's status is changed to superseded by ...
.
Useful Links
- AWS Guidlines for ADR process
- ADR Github Org
- Source of our ADR template