How to read and document decisions
Certain decisions affect and influence the architecture, as such they are worth documenting explicitly. During implementation countless small decisions are done, however it’s not about documenting everyday programming choices (which are often done in Git commits for example).
Structure
- Problem
-
Describe the problem that this decision should solve or requirements that need to be implemented. It should be understandable even if not having participated in discussions (link to requirements and other decisions in the next sections).
- Relevant requirements
-
List and link any requirements that influence the problem or constraint the proposals.
- Relevant decisions
-
List and link any dependent decisions related to these decisions. This is most used in cases where previous decisions lead to new problems or follow-up decisions.
- Proposals
-
Multiple proposals outline which alternatives were considered for deciding. Describe them detailed enough for traceability and comprehensibility. Consider something like the following AsciiDoc source:
== Proposals [qanda] (1) Proposal 1:: (2) Description of proposal 1 Proposal 2:: Description of proposal 2
1 qanda
(read: Q&A for a FAQ page) formats the proposals with numbering and highlighting.2 The title of the proposal, to be referenced from the Decisions
section. - Decision
-
What’s the accepted proposal? One line identifying the proposal should be enough.
- Rationale
-
What are the main reasons why a proposal was chosen? The reasons shouldn’t extend the description of a proposal, only further explain why this proposal was in favor of others.
Certain types of decisions don’t impact the architecture. In those cases, consider just documenting a definition even if the definition took multiple discussions. |