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. -- Michael Nygard
When building or maintaining software, there's often moments when we ask, "What were they thinking?" This happens when we are trying to figure out why something was done a certain way, leading to speculation, humor, or criticism[0]. Given the constraints we face when writing code, it's important to make sure that important decisions are well-documented and transparent. Architecture Decision Records (ADRs) are one such tool. They provide a structured way to capture the reasoning behind key decisions.
ADRs consist 4 key sections [0]:
Optionally, when an ADR is rejected, you can add a section:
At GeneNetwork, we manage ADRs within our issue tracker, organizing them under the path "/topics/ADR/<project-name>/XXX-name.gmi". The "XXX" represents a three-digit number, allowing for an easy, chronological order of the proposals as they are created.
Here is a template for a typical ADR in Genenetwork:
# [<project>/ADR-<XXX>] Title * author: author-name * status: proposed * reviewed-by: A, B, C ## Context Some context. ## Decision Decisions. ## Consequences Consequences.
Here are some examples of Genenetwork specific ADRs: