Architectural Decision Records (ADR)
Entwurfsentscheidungen systematisch dokumentieren
ADRs können auch im selben Repo zum Code eingecheckt werden. So können ADRs bei Diskussionen erstellte werden (z.B.: im Status Proposed) und bei der Implementierung im selben PR wie der Code updated werden. Dadurch werden sie auch gereviewed.
Kontext
- Fragestellung - Warum und Wozu?
- Einflüsse - Wer, Was, Wie beeinflusst die Entscheidung?
- Stakeholder, Randbedingungen, Qualitätsanforderungen
- Kriterien - Bewertungsmassstäbe
- Pro, Cons ist oft nicht gut, weil sie schon oft biased sind
- Nach was will ich überhaupt bewerten?
- Danach schreibe ich nicht auf was pros/cons sind sondern welche Entscheidung erfüllt die Kriterien (am besten)
- Beispiele:
- Kosten
- Teamerfahrung
- Teamskalierbarkeit
- Softwareskalierbarkeit
- Komplexität
- Testbarkeit
Alternativen - Lösungsmöglichkeiten
Entscheidungen - Welche Lösung und warum!
- Sind immutable aber neue Entscheidungen können diese "überschreiben". Die Dokumentation bleibt. (bzw. ADRs können auch ins Archiv verschoben oder als deprecated markiert werden). Ich möchte gerne die aktuell gültigen ADRs sehen/finden.
Konsequenzen - Positive und negative Folgen
- Was erlaubt uns nun die Entscheidung? Was verhindert diese?
- Entscheidungen haben oftmals einen "Haltbarkeitswert" - Sie sollten nach einer gewissen Zeit wieder betrachtet werden.
Template Example
Title
[date]
[status]
ADR: A short noun phrase containing the architecture decision
Context
In this section of the ADR we will add a short one- or two-sentence description of the problem, and list the alternative solutions.
The issue motivating this decision, and any context that influences or constrains the decision.
Decision
In this section we will state the architecture decision and provide a detailed justification of the decision.
The change that we're proposing or have agreed to implement."
Consequences
In this section of the ADR we will describe any consequences after the decision is applied, and also discuss the trade-offs that were considered.
What becomes easier or more difficult to do and any risks introduced by the change that will need to be mitigated.
ADR Example
Use Markdown Architectural Decision Records
Context and Problem Statement
We want to record architectural decisions made in this project independent whether decisions concern the architecture ("architectural decision record"), the code, or other fields.
Which format and structure should these records follow?
Considered Options
- MADR 4.0.0 – The Markdown Architectural Decision Records
- Michael Nygard's template – The first incarnation of the term "ADR"
- Sustainable Architectural Decisions – The Y-Statements
- Other templates listed at https://github.com/joelparkerhenderson/architecture_decision_record
- Formless – No conventions for file format and structure
Decision Outcome
Chosen option: "MADR 4.0.0", because
- Implicit assumptions should be made explicit.
Design documentation is important to enable people understanding the decisions later on.
See also "A rational design process: How and why to fake it". - MADR allows for structured capturing of any decision.
- The MADR format is lean and fits our development style.
- The MADR structure is comprehensible and facilitates usage & maintenance.
- The MADR project is vivid.