Our current ADR process is a bit cumbersome. Let's update it by using Github project boards and PRs!
- Using just filenames can result in naming collisions if another ADR is updated first
- The current "Status" field in the ADR itself can get out of sync with the actual status
- It is currently necessary to manually copy a template in order to initiate a PR
- The current process necessitates email list discussion which can become separate from the decision itself
- Continuing to use the existing process - this has the above drawbacks
- Using a different tool to track issues - this would separate the decision from the discussion
We have created:
- A new project board
- A new issue template
- A new process for using them, described below, that supersedes the previous process
Chosen option: use github project boards as described below. Reasoning:
- We only update the file when a decision has been reached, thus avoiding naming conflicts
- We can use columns in project boards to represent status
- We can use the built-in issue template mechanism in github to enforce consistency
- Github offers a built-in discussion feature so we can capture discussion next to where the decision is made
Explanation of new process - to be added as a separate description later (updated diagram also to be posted as a comment here):
-
Draft: To create a new ADR:
- Create a new issue in github or zenhub.
- Select the template "Architectural Decision Record".
- Select "Project", then "Repository", and set it to "Architecture decision records" This will create a new issue, add it to the "Draft" column (to be done via github actions), and assign the core project maintainers to approve
-
Screenshots/diagrams: If you need to add diagrams or screenshots/pictures, please add them to the comment section of the issue.
-
Ready for Discussion : The core project maintainers (for now the USDS folks until we have regularized this process) will review - they will:
- Add the "Ready for Discussion" label if the issue is well-formed / has enough detail
- Move the issue to the "In Discussion" column
- Setup a public comment period - this is the period within which we need to come to a decision (more on this below)
-
In Discussion : Once the item is in the "In Discussion" column, you have until the period specified to come to a decision. People can leave comments directly on the ticket There are several outcomes:
- Consensus In the event of consensus within the expressed timeline, move to the next step
- Concerns If there are concerns raised, ensure that those that disagree understand the reasoning behind the decision and address concerns with specific mitigation steps. Request confirmation that concerns have been addressed. If so, move to the next step!
- Discuss In the event that disagreement persists, discuss the decision with the group in the next biweekly sync. We will take a vote on next steps (opt-outs are OK!), and move forward.
-
Decided: Once the comment period has elapsed, move the issue to "Decided". This is where the issue will wait before you have created a Pull Request. Please at this time add one of the following labels:
- "Approved" -- Decision Record has been approved
- "Rejected" -- Decision Record has been rejected
- "Superseded" -- Decision Record has been made obsolete by another record (leave in comment) -- please add this to any record your record supersedes.
-
Pull Request: Once decided, you should create a pull request to create a file in
docs/decisions
- name itXXXX
whereXXXX
is one greater than the largest decision record in the directory. Copy and paste the record from the issue. As for diagrams and- We recommend Mermaid for diagrams! Create a file with a
.mmd
extension and referencefilename-mmd.svg
in your docs, and Github Actions will automatically create the svg fore you! Preview diagrams with the Mermaid Live Editor. - To keep things organized, create a folder with the name
XXXX-files
and put supporting ADR material there.
- We recommend Mermaid for diagrams! Create a file with a
-
Merge: once the PR has been approved, merge and close
- ADRs no longer have the above-named limitations
- We'll need to discuss and socialize these changes.
- Good, because it's maybe a little less involved
- Bad, because it requires keeping a fragile text file up to date, and separates discussion from decision, and is not as integrated into the process
e.g. Trello etc.
- Good, because there are other tools that are purpose-built to move tickets left -> right
- Bad, because this is yet another tool we've got to integrate, and it separates discussion from decision again