Discussing and Tracking architectural decisions with ADR

In big projects like Operaton, keeping track of architectural decisions is hard. Although Open Source projects are working in the open, there is often a well informed “inner circle” of developers who knows the code base very well, and others contributing sporadically.

With this constellation, there are two issues:

  • Agreeing on necessary architectural changes in the first place
  • Documenting the changes, the reasoning and the consequences

For both issues, architecture decision recors (ADR) are a possible solution: https://adr.github.io/

They provide a template, tooling and workflows to propose, discuss and agree on architecture decisions. At the same time they serve as documentation. The linked website is a good point of entry, so I won’t summarize more and risk diluting the information, but encourage you to read the material on this site. Another good starting point is the initial(?) article on the topic by Michael Nygard: Documenting Architecture Decisions

Is this something we should adopt? Do you see value in them, or maybe risks?

Here is a first topic that could be possibly discussed with an ADR.

Should we drop support for MariaDB as it was done in the C7 reposistory here? => chore(engine/ci): remove MariaDB as support env (#5036) · camunda/camunda-bpm-platform@b877f10 · GitHub

Yes, I believe we should adopt ADRs in Operaton — but focus their use on major architectural decisions only. These are the kinds of changes that have a broad or lasting impact on the system, are difficult to reverse, or significantly affect how contributors interact with the codebase.

ADRs would help address two recurring challenges in open-source projects like Operaton. First, they improve transparency, making architectural reasoning visible and accessible beyond the core group of contributors. Second, they help preserve knowledge that often gets lost over time or buried in issues, code reviews, or chats.

They can also serve as a tool to improve communication and coordination. By providing a shared structure and a documented decision process, ADRs make it easier for contributors to propose changes, understand trade-offs, and participate in architectural discussions — especially in a distributed, asynchronous environment.

That said, there are challenges. One is ensuring that ADRs stay in sync with implementation. If code evolves but ADRs aren’t updated, they risk becoming misleading. Another is the housekeeping effort — as the project grows, we’ll need a way to identify outdated or superseded ADRs and manage them appropriately.

To keep the process lightweight, I would suggest starting with the MADR template, which is Markdown-based and easy to work with in Git. However, one important question we’ll need to address early on is where to store the ADRs. Options include a dedicated documentation repository, a wiki, or directly alongside the code — for example, in a /adr/ folder within the main repo. Personally, I lean toward storing them with the code to ensure they evolve together, but this should be discussed and agreed upon by the team.

Looking a bit further ahead, I’ve been considering whether we might eventually adopt a more comprehensive proposal format, inspired by Kafka’s KIP process. I’ve tentatively called this POEX (Proposal for Operaton Extension). A POEX would be used to design and justify significant features or system changes before implementation begins. It would cover motivation, technical design, compatibility considerations, and alternatives. Once a POEX is accepted, its conclusions could be formally recorded in an ADR — offering a clear and traceable path from idea to implementation.

That said, we should start small. Use ADRs for major topics only, keep the process lean at first, and revisit the idea of POEX and extended workflows if and when the need arises.

1 Like

+1 for MADR :slight_smile:

Main reason: neglected options are also included

We mainly put it in “docs/decisions” folder in our projects. See jabref/docs/decisions at main · JabRef/jabref · GitHub for a rather minimal example.

For a use of an older version of MADR see here for a live use: fxa/docs/adr at main · mozilla/fxa · GitHub

3 Likes

I think storing them with the project does make sense. This way, an ADR could be discussed and evolved on a PR. In the end, all participating committers would have to approve it and with the merge it is accepted.

I expect that discussions could take a while. Respective PRs should be Draft mode and we should agree on a branch naming strategy.

My proposal (analog to repo linked by @koppor ):

  • Store ADRs in docs/adr/XXX-short-name.md (3 digits should be enough)
  • Store images and other files (if applicable) at docs/adr/assets/XXX-some-file.xyz
  • Store the template in a Pull Request Template
1 Like

+1 for storing the ADRs in docs/adr/. That keeps them close to the code.

@kthoms: it might be helpful to initialize the folder with the MADR template. This would provide a consistent structure for everyone and make it easier for contributors to get started.

One additional thought: should we consider allowing mermaid diagrams in ADRs?

GitHub renders Mermaid diagrams natively (docs here), so they can help visualize ideas clearly. Could be a lightweight way to improve clarity without requiring external tools.

1 Like

I would be fine with Mermaid diagrams, have used them also.

1 Like

Note that we switched from docs/adr to docs/decisions in 2022 (madr/CHANGELOG.md at develop · adr/madr · GitHub), because we thought (and still think), that path is more newcomer friendly. Our bet: Junior developers do not know about the term “adr” at all. Moreover, they start discussion what is an architectural decisions, and what not - and is decisions 0045 really an ADR? - To avoid that, we use the generic term “decisions”.

We did not place an ADR for MADR regarding this (into madr/docs/decisions at develop · adr/madr · GitHub), but we can do if you think, its worth to dig deeper.

1 Like

The ADR template will be integrated into the repository. You can track the implementation in the following PR and related issue:

1 Like