Architecture Knowledge Management: Decisions, Rationale and Reality
Research treats architecture as a set of decisions with rationale. Here is how that compares with decision records, wikis and tribal knowledge in real teams.
Architecture knowledge management is the study of how design decisions and the reasons for them are captured, shared and reused. It grew from the observation that most documentation records what a system looks like but not why it looks that way, and the why is what a newcomer or a future maintainer most needs.
What the research says
A formative idea came from Anton Jansen and Jan Bosch, who in 2005 argued that software architecture should be viewed as a composition of design decisions rather than only of components and connectors. Philippe Kruchten and colleagues worked on ontologies of architectural decisions, describing types of decisions, their relationships and their status. Related work by Antony Tang and others examined design reasoning and rationale, and the field produced tooling for recording decisions and linking them to requirements and components.
A recurring finding in practitioner surveys is that engineers recognize the value of recording rationale but find the cost high and the payoff delayed. Studies of rationale documentation consistently describe a gap between the elaborate models in the research literature and the lightweight approaches teams will actually maintain. Research also notes that knowledge vaporizes: when the decisions are not recorded, the reasons leave with the people who made them, and later teams either repeat discussions or reverse decisions without understanding the constraints.
What practitioners see
The practitioner response arrived in lightweight form. Michael Nygard's 2011 blog post proposed architecture decision records, short documents with a title, context, decision and consequences, stored in the repository next to the code. The format spread widely, with variants such as MADR and command line helpers for managing numbered records. Teams value that records are small, versioned and reviewable in the same pull request as the change.
In practice several problems appear. Records get written for the first few decisions and then forgotten. Decisions are recorded after the fact with a justification that was not really the original reasoning. Records are never revisited, so a superseded decision still looks active unless its status is updated. Wikis fill with pages that are not found when needed and are not trusted when found.
Teams also say that a great deal of the useful knowledge lives in conversation: chat threads, design review comments and the memory of senior engineers. Searching for it is unreliable.
Gaps
- There is little rigorous evidence that decision records reduce rework or onboarding time; the case rests on surveys, experience and plausibility.
- Research tools for rationale capture have seen limited industrial uptake.
- Few studies address how to keep knowledge current, which is the failure that practitioners mention most.
- Questions of discoverability, such as how a developer finds the relevant decision at the moment of need, are under-studied.
How to apply it
Adopt a short decision record template and keep it in version control. Write a record when a decision is hard to reverse, affects multiple teams, or was disputed. Include the alternatives rejected and why, as that is the part that vanishes fastest.
Make the writing part of the workflow: put the record in the same pull request that implements the decision, and ask for it in design review. Record status explicitly, such as proposed, accepted, deprecated or superseded by a later record.
Link records from the code and from the places engineers look, such as module readmes and onboarding guides. Review them periodically, and retire or update stale ones. Capture the key points of important chat or meeting discussions in a record rather than relying on the thread.
Key takeaways
- Research frames architecture as a set of decisions plus rationale, and rationale is the knowledge most easily lost.
- Lightweight decision records near the code succeed where heavyweight rationale models did not.
- The main failure modes are abandonment, retroactive writing and stale status.
- Evidence of measurable benefit is limited, so judge by your own onboarding and rework experience.
- Tie records to existing workflow, such as the pull request, to keep them alive.
Research papers
The papers and primary sources behind this article.
- Software Architecture as a Set of Architectural Design Decisions
Jansen, A., Bosch, J. ยท WICSA ยท 2005
- Architecture Decisions: Demystifying Architecture
Tyree, J., Akerman, A. ยท IEEE Software ยท 2005
- Documenting Architecture Decisions (blog post, primary source for ADRs)
Nygard, M. ยท Cognitect blog ยท 2011