adr / madr Goto Github PK
View Code? Open in Web Editor NEWMarkdown Architectural Decision Records
Home Page: https://adr.github.io/madr/
License: Other
Markdown Architectural Decision Records
Home Page: https://adr.github.io/madr/
License: Other
Please consider adding a branch for each major version to allow easy linking to the correct documents and template. e.g., stable-1
, stable-2
, stable-3
.
This would allow linking to (for example) the latest 2.x template without pulling in 3.x features until we are ready for them.
Proposal: Remove the section about "Sustainable Architectural Decisions" in the README.md (https://github.com/adr/madr/blob/master/README.md#background-information).
Reason: Alternatives to the MADR are linked in the example file already. Also they they are mentioned on summary pages like https://adr.github.io and https://github.com/joelparkerhenderson/architecture_decision_record. Adding a section about alternatives within the MADR readme just lengthens the document and distracts the reader.
Solution: Remove the section.
Michael Nygard's template offers a Status field. See http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions. This should be supported by MADR, too. It should, however, be optional or less prominent to make it easier for newcomers. Maybe two variants of MADR?
adr-tools offers automatic setting of the status field. MADR, however, does not want to rely on tooling: It should be possible to create an ADR by just using copy'n'paste of template.md
.
Greetings π First just want to thank you for these awesome projects!
My team has been looking for a way to capture our decisions more consistently, and your tools and the processes they facilitate seem like an absolutely perfect fit. I'd anticipated that given our size we'd likely need to end up with a mechanism to categorize records, and I was encouraged by what I saw in https://github.com/adr/madr/blob/main/docs/decisions/0010-support-categories.md. However, IIUC the categorization feature appears to be future looking (ostensibly in the v3 beta release) so I have a few questions I'm hoping you can assist me with:
Sometimes, one wants to write down an argument, which is neither pro nor con.
Options:
Example:
Real world example:
### Bugsnag
- Good, because it offers a Slack integration for faster feedback.
- Good, because it offers a Github integration to link to possible commits and PRs.
- Good, because it offers bot front-side/server-side/serverless error tracking.
- OK, because it was ranked the **\#5** as the best Javascript (client-side) error logging service in a community survey.
- Bad, because it's expensive. (**\$199/mo** for **450k events** and **15 collaborators**)
- Bad, because it's pricing includes a fixed set of collaborators.
In the paper Architectural Decision Guidance across Projects by Olaf Zimmermann, Lukas Wegmann, Heiko Koziolek and Thomas Goldschmidt, it is distinguished between "problem space" and "solution space"
Currently, we offer "MADR" as concept for the "solution space", where concrete solutions are written down. In addition, it can be abstracted from the solution space to the "problem space" to offer a collection of solutions, where one can pick from.
For instance: Concidered Options: "Maven, Gradle, Ant". They all have their "global" pros and cons. When going "locally", i.e., to a concrete project, new pros/cons are added and one option is chosen. Moreover, a context is added. -- That means, the format of the "global MADRs" differs from the format of the "local MADRs".
Question: How should the "global MADRs" be called?
Current thoughts:
Problem Space | Solution Space |
---|---|
PMADR (for problem MADR) | SMADR (for solution MADR) |
AMADR (for abstract MADR) | IMADR (for instanitated MADR) |
CMADR (for challenge MADR) | SMADR (for solution MADR) |
GMADR (for global MADR) | MADR |
GMADR (for generic MADR) | MADR |
GMADR (for generic MADR) | SMADR (for specialized MADR) |
The MADR template was pushed to the popular architecture_decision_record repository recently.
This template however has a different format for the User Story, than documented in hereβ¦
Current MADR template:
https://github.com/adr/madr/blob/master/template/template.md
User Story: [ticket/issue-number]
Pushed MADR template:
https://github.com/joelparkerhenderson/architecture_decision_record/blob/master/adr_template_madr.md
User Story: [ticket/issue-number]
I like the changes in the pushed template. May I prepare a PR to add this change to this repository?
See page 18 and 19 of http://www.iso-architecture.org/42010/templates/42010-ad-template.pdf
What happened to them? I don't see a discussion about their removal in either the changelog or adrs. I always found them to be the most important part of the template.
Refs adr/adr-manager#155
The "c" should be capitalized for "Negative consequences" in the template.
Quoting https://stackoverflow.com/a/7115411/873282
Do we need Assumptions, Constraints, Risk and Issues?
Depends on how detailed / formal you want to be. In terms of a Decisions Register we'd normally use one doc per area / decision, although recently we've been experimenting with OneNote.
At the very least you want to record (for each option):
A succinct bullet-point list of pros & cons (etc) is usually sufficient - it doesn't need to be a big doc.
For a more in-depth / formal / complex scenario you'd want to go further, this is the format we were using in such cases:
Summary
Evaluation Criteria
(This is important as it sets out the criteria you used to score the available options, including weightings etc).
Summary of Recommendations
[Option 1β¦N]
Recommendation
When installed, the bot checks whether template.md
is outdated. It creates a PR if so.
Similar to https://dependabot.com/
The current adr-tools support (npryce/adr-tools#43) uses tables to describe links.
Currently, I lean towards adding the links at the bottom of a MADR.
See https://github.com/adr/madr/blob/master/template/template.md for the current template.
See https://medium.com/olzzio/adr-any-decision-record-916d1b64b28d for the reasoning
Follow-up to #92.
See thomvaill/log4brains#12 for details
<!-- markdownlint-disable no-duplicate-heading -->
MD024, because the option name is sometimes used as title of the ADRMaybe put .markdownlint.yaml
file aside
Miro gets more and more important. What if ADRs are brainstormed using miro and then markdown files are generated by a tool.
Unable to load user documentation at https://adr.github.io/madr/
-- 404. Is this a known issue?
D:\>curl -I https://adr.github.io/madr/
HTTP/1.1 404 Not Found
Coming from the discussion of status at #2 and seeing https://stackoverflow.com/a/7115411/873282, we should think of template-lean.md
and template-full.md
.
Zimmermann et al. compared other templates at https://www.ifs.hsr.ch/fileadmin/user_upload/customers/ifs.hsr.ch/Home/projekte/ADMentor-WICSA2015ubmissionv11nc.pdf:
In addition
In many CHANGELOG.md templates, there is a reference back to the template itself so that when I create a true instance of the CHANGELOG.md, someone can read it and know where to go to find the template it was created from to create another instance. I'd like to see this in the template for MADR.
See https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md
The website lists a fork of adr-tools
as the suggested tool for a more automated approach to using MADR, however the PR was rejected and closed, and the fork is now archived, marked as superseded by log4brains (https://github.com/thomvaill/log4brains).
As such, does it make sense to update the docs on the website to link straight there?
@GitbookIO deletes comments when synchronizing with GitHub. Thus, our <!-- optional -->
markers get lost. Maybe, it's time for template.md
and template-advanced.md
. (or template-min.md
and template-max.md
). Without placeholders, but other syntax highlighting possiblities.
Can we just use ADRs instead of Design docs/RFCs for large change proposals? This will save people the effort of writing a design doc and then also recording the design doc or RFC outcome as an ADR, which seems a bit cumbersome.
This is required for large repositories (refs #10)
e.g. ADR Manager?
The autogenerated TOC has no trailing newline.
This is problematic if you run a markdown linter that lints according to the commonmark spec. Since we autogenerate (adr -u) the TOC and we do linting in a continuous integration context this always fails.
A flag for adr -u to add a newline after generation would be useful.
README.md:3 MD047/single-trailing-newline Files should end with a single newline character
(deleted)
As written in the summary this repository βprovides an initial directory structure and files to document Architectural Decisions using Markdown and Architectural Decision Records.β
The files (= the template) are explained in the README, the directory structure however is not. It's just presumed in the section Create a new ADR.
It would be nice to explain that the directory structure uses NNNN-title-with-dashes.md
format and why it does so (other ADRs styles for example recommend using YYYY-MM-DD Title without Dahes
or YYYY-MM-DD-title-with-dashes
, so this difference should be explained somewhere).
Currently, I think https://chirpy.cotes.page/ seems to be better to present MADR. The current theme does not support TOCs (just-the-docs/just-the-docs#625). And it seems that the page does not look that well on wide screens.
Users are confused that the main page does not display the full template any more (#93).
Regarding #3 I just asked myself: How can I identify which version of MADR was used in a repository?
Idea: Suggest as best practice to document the version of MADR which was used initially. For example in the Initial decision file. So that somebody who writes a ADR may decide "We will use MADR in version 1.3.0 to document ADRs" and later "We update all existing ADRs to follow MADR version 2.0.18" etc.
Alternative: Add the version to the template file.
What do you think?
"Outcome" has "Positive Consequences" and "Negative Consequences" sections. "Options" just have a single list with "Good" and "Bad" prefixes.
Example - source: https://github.com/archivematica/archivematica-architectural-decisions/blob/main/0000-use-markdown-architectural-decision-records.md
---
layout: page
status: accepted
adr: "0000"
title: Use Markdown Architectural Decision Records
deciders:
date:
---
## Context and problem statement
We want to record architectural decisions made in this project.
Which format and structure should these records follow?
## Considered options
* [MADR][0] 2.1.2 β The Markdown Architectural Decision Records
* [Michael Nygard's template][1] β The first incarnation of the term "ADR"
* [Sustainable Architectural Decisions][2] β The Y-Statements
* Other templates listed at @joelparkerhenderson's [repository][3].
* Formless β No conventions for file format and structure
## Decision outcome
Chosen option: "MADR 2.1.2", 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][4].
* The MADR format is lean and fits our development style.
* The MADR structure is comprehensible and facilitates usage & maintenance.
* The MADR project is vivid.
* Version 2.1.2 is the latest one available when starting to document ADRs.
[0]: https://adr.github.io/madr/
[1]: http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions
[2]: https://www.infoq.com/articles/sustainable-architectural-design-decisions
[3]: https://github.com/joelparkerhenderson/architecture_decision_record
[4]: https://doi.org/10.1109/TSE.1986.6312940
Rendered output:
Replace [option 1}
by {option 1}
.
Idea from https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-template.md
Example
{Deprecated|Proposed|Accepted|Declined}
Reason: Not conflicting with markdown
See https://ozimmer.ch/practices/2020/05/22/ADDefinitionOfDone.html for details
This is a checklist.
Is this a thing of MADR or a thing of ADR-Manager?
Let's imagine that the latest number in the ADR numbering sequence is 5.
Dev A creates a PR with an ADR (he/she denotes that ADR with number 6).
Dev B creates a PR with an ADR (he/she denotes that ADR with number 6).
Dev A and Dev B merge at a different point in time.
Now we have two ADRs with different names but the same number.
One possible solution is to have a lock file that would contain the last number. We would have to increment this number each time we create a new ADR. This way after Dev A merges, Dev B can't merge due to conflict that needs to be resolved.
The con of this solution is that a Dev may forget to modify the lock file.
Are there any other propositions on solving this issue?
A template w/o the guiding comments, just the headings
We noticed an intersection between MADR and RACI, and felt the need to add a "consulted" and "informed" field in addition to "deciders". Would it be beneficial to "upstream" these fields to MADR?
Refs #8
From template, section "More Information":
and/or define when this decision when and how the decision should be realized
(deleted)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.