Skip to content

Commit ac9f524

Browse files
authored
Merge pull request #386 from bci-oss/378-introduce-adr
Introduce Architecture Decision Records
2 parents 78de46f + 8448be7 commit ac9f524

File tree

5 files changed

+120
-1
lines changed

5 files changed

+120
-1
lines changed

.github/workflows/pull-request-check.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ name: Check New Pull Request
22
on:
33
pull_request:
44
branches:
5-
- main
5+
- main
6+
paths-ignore:
7+
- 'documentation/decisions/**'
68
jobs:
79
build-and-test:
810
name: ${{ matrix.os }} build

CONTRIBUTING.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ Model (SAMM) and supports its use.
1818
* For general discussions of the ESMF, modeling questions etc. we use the [community forum](https://www.eclipse.org/forums/index.php/f/617/).
1919
* For discussions specific to development, the preferred way is the [developer mailing list](https://accounts.eclipse.org/mailing-list/esmf-dev).
2020

21+
## Architecture Decision Records
22+
23+
Decisions on code and architecture are documented using [Markdown Any Decision
24+
Records](https://adr.github.io/madr/) in [documentation/decisions/](https://github.com/eclipse-esmf/esmf-sdk/tree/main/documentation/decisions).
25+
2126
## Branching
2227
We follow the [Git branching guidance](https://docs.microsoft.com/en-us/azure/devops/repos/git/git-branching-guidance?view=azure-devops).
2328

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Use Markdown Any Decision Records
2+
3+
## Context and Problem Statement
4+
5+
We want to record any decisions made in this project independent whether decisions concern the architecture ("architectural decision record"), the code, or other fields.
6+
Which format and structure should these records follow?
7+
8+
## Considered Options
9+
10+
* [MADR](https://adr.github.io/madr/) 3.0.0 – The Markdown Any Decision Records
11+
* [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) – The first incarnation of the term "ADR"
12+
* [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) – The Y-Statements
13+
* Other templates listed at <https://github.com/joelparkerhenderson/architecture_decision_record>
14+
* Formless – No conventions for file format and structure
15+
16+
## Decision Outcome
17+
18+
Chosen option: "MADR 3.0.0", because
19+
20+
* Implicit assumptions should be made explicit.
21+
Design documentation is important to enable people understanding the decisions later on.
22+
See also [A rational design process: How and why to fake it](https://doi.org/10.1109/TSE.1986.6312940).
23+
* MADR allows for structured capturing of any decision.
24+
* The MADR format is lean and fits our development style.
25+
* The MADR structure is comprehensible and facilitates usage & maintenance.
26+
* The MADR project is vivid.

documentation/decisions/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Decisions
2+
3+
This directory contains decision records for esmf-sdk.
4+
5+
For new ADRs, please use [adr-template.md](adr-template.md) as basis.
6+
More information on MADR is available at <https://adr.github.io/madr/>.
7+
General information about architectural decision records is available at <https://adr.github.io/>.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
---
2+
# These are optional elements. Feel free to remove any of them.
3+
status: {proposed | rejected | accepted | deprecated | … | superseded by [ADR-0005](0005-example.md)}
4+
date: {YYYY-MM-DD when the decision was last updated}
5+
deciders: {list everyone involved in the decision}
6+
consulted: {list everyone whose opinions are sought (typically subject-matter experts); and with whom there is a two-way communication}
7+
informed: {list everyone who is kept up-to-date on progress; and with whom there is a one-way communication}
8+
---
9+
# {short title of solved problem and solution}
10+
11+
## Context and Problem Statement
12+
13+
{Describe the context and problem statement, e.g., in free form using two to three sentences or in the form of an illustrative story.
14+
You may want to articulate the problem in form of a question and add links to collaboration boards or issue management systems.}
15+
16+
<!-- This is an optional element. Feel free to remove. -->
17+
## Decision Drivers
18+
19+
* {decision driver 1, e.g., a force, facing concern, …}
20+
* {decision driver 2, e.g., a force, facing concern, …}
21+
*<!-- numbers of drivers can vary -->
22+
23+
## Considered Options
24+
25+
* {title of option 1}
26+
* {title of option 2}
27+
* {title of option 3}
28+
*<!-- numbers of options can vary -->
29+
30+
## Decision Outcome
31+
32+
Chosen option: "{title of option 1}", because
33+
{justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}.
34+
35+
<!-- This is an optional element. Feel free to remove. -->
36+
### Consequences
37+
38+
* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …}
39+
* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …}
40+
*<!-- numbers of consequences can vary -->
41+
42+
<!-- This is an optional element. Feel free to remove. -->
43+
## Validation
44+
45+
{describe how the implementation of/compliance with the ADR is validated. E.g., by a review or an ArchUnit test}
46+
47+
<!-- This is an optional element. Feel free to remove. -->
48+
## Pros and Cons of the Options
49+
50+
### {title of option 1}
51+
52+
<!-- This is an optional element. Feel free to remove. -->
53+
{example | description | pointer to more information | …}
54+
55+
* Good, because {argument a}
56+
* Good, because {argument b}
57+
<!-- use "neutral" if the given argument weights neither for good nor bad -->
58+
* Neutral, because {argument c}
59+
* Bad, because {argument d}
60+
*<!-- numbers of pros and cons can vary -->
61+
62+
### {title of other option}
63+
64+
{example | description | pointer to more information | …}
65+
66+
* Good, because {argument a}
67+
* Good, because {argument b}
68+
* Neutral, because {argument c}
69+
* Bad, because {argument d}
70+
*
71+
72+
<!-- This is an optional element. Feel free to remove. -->
73+
## More Information
74+
75+
{You might want to provide additional evidence/confidence for the decision outcome here and/or
76+
document the team agreement on the decision and/or
77+
define when this decision when and how the decision should be realized and if/when it should be re-visited and/or
78+
how the decision is validated.
79+
Links to other decisions and resources might here appear as well.}

0 commit comments

Comments
 (0)