Published on

The ambiguity of architecture decision records

Authors

"I architect"

Imagine that there is a discussion during the daily standup where the team is trying to overcome a technical challenge.

Discussion
Dylan, Developer: Yesterday, I made changes in BVM to support asynchronous job scheduling.
Don, Developer: What is BVM?
David, Developer: Wait Dylan, why?
Dylan, Developer: Somehow it felt right, I mean we already have parts of code that use in-memory eventing so I thought that we could move from in-process to database. I am quite sure that we will need it some day.
Don, Developer: Guys, could you explain what a BVM is?

Adam, Architect, greatly delayed, enters the virtual room

Adam, Architect: Sorry for being late, had architecture guild where we discussed a common way of using common services. Can I help somehow?
Don, Developer: Hey Adam! Maybe you could tell me what BVM is...
Adam, Architect: BVM? Why are you asking about it now?
Don, Developer: Dylan mentioned it's going to support async job scheduling, but I still don't understand what it is.
Adam, Architect: Wait, what? I don't want to destroy your ideas, but I never said anything about async job scheduling - neither in BVM or elsewhere.
Dylan, Developer: I don't want to disappoint you Adam, but someone needed to make this decision as we were in the dead corner - it felt like a natural place, I mean, BVM.
Don, Developer: So, what exactly is BVM?

All looked at each other, confused.

"I decide"

Imagine that we are in a meeting, observing a discussion related to the architecture of a new part of the system.

Discussion
Dylan, Developer: I believe we should use BVM service to start the whole workflow.
David, Developer: BVM? What about Integration Platform - didn't we decide to use it next time for this type of job?
Don, Developer: Sorry for a dummy question, but I am new here - what is...
Adam, Architect: I don't want to destroy your ideas, but I planned this architecture long time ago - here is the primary sketch I did 2 years ago.

All looked at the PowerPoint presentation that Adam, Architect is showing them.

David, Developer: Adam, this won't work. Your sketch misses one important part - configuration API isn't ready, as our Shared Host Integration Terminal team is still gathering requirements from the entire company.
Adam, Architect: Wait, so we don't use CCP - Common Configuration Platform?
Dylan, Developer: Yhm, no. We wrote our own to deliver sooner.
Adam, Architect: Just to remind you, I am the single point for making decisions. You really need to ask me to get a green light.

All developers looked at each other, confused.

Confused people remained confused, PowerPoint presentation kept all the decisions, completely ignoring the facts that happened since 2 years passed, when this presentation was made.

"I record"

Next time, there was another meeting named "Dev team & arch sync", where the same people gathered. There was no agenda, 25 min planned.

Discussion
Adam, Architect: Hey guys! I've learned about recording decisions using a special template, hence I prepared a short decision record on using abstract classes. It is available on department's sharepoint. If you have any questions we can continue, else just go for lunch.

All looked at the Word document describing the decision that Adam, Architect is showing them.

David, Developer: Adam, what about TypeScript and SPAs - we don't use abstract classes.
Adam, Architect: So why don't you just start using them?
Dylan, Developer: Well, I think we should focus on the recent outage and finding a way to improve how we handle the excessive load.
Adam, Architect: Just to remind you, I am the single point for making decisions. You really need to ask me to get a green light.

All developers looked at each other, confused.

Where is the value?

Have you experienced something similar, dear Reader?

Decisions in PowerPoint slides, outdated and forgotten Word documents that are never read.

Produced by individuals, not even architects, but in total isolation from "the doers".

"Architecture Decision Records are not needed, as no one reads them" - one might say.

"Only architects should decide, as they have the big picture" - another one could argue.

Well, both observations, and many others, might be actually "true".

It varies from company to company, team to team, and even person to person.

It's a slippery slope to say "we do ADRs here" and not fall into Tools make fools type of a problem.

But as with other tools (and I believe ADRs are "just" a tool), the value is in the reason we use them.

Often, people are not aligned on why they do certain things.

A solution is picked and all just do what is needed to satisfy going in this direction.

What about other options?

What is the current context?

Every best practice, when misapplied, becomes an anti-pattern.

Are there any design constraints?

Any Decision Records?

Turns out that we often "feel" what might be a good approach for a given problem.

Considering that we are dealing with an actual problem, not the one that got "solutioned" (or in other words, "coming up with a problem to bravely solve it").

It might be that the real value of "Architecture Decision Records" is not in recording decisions, but in thinking about them.

Going through the processes of collaborative designing, sketching, and figuring out the surroundings.

It's very easy (as a reminder - Simple isn't easy!) to look at ADRs as a static "thing", just being there.

Magic starts when we think of it as a process.

A stream of events that is produced when people meet together and become the Overmind - all to collectively bring multitude of perspectives, experiences and knowledge.

During such sessions, all learn - sometimes it's about approaching architectural problems, dealing with trade-offs, and in other times - just learning that patience is really vital when working together.

A nice side effect is that we get a record that more-a-less captures the context, rejected options and the solution candidate.

Recently, LLMs can help with mundane tasks like formatting, etc.

What's more, when decisions are recorded, LLMs could help with building the knowledge stream of decisions.

Of course, it's a different problem how to make it useful, but we have tools at our disposal.

Design Deciding Process?

Similar to a Zen Koan, we could express:

Conclusion 🔍

“When a wise man points at a collaborative designing with recording decisions, the fools look at recording decisions, not at a collaborative designing.”

Play a role in the stream, participate in the process, experience Panta rhei!

Slow down and become one with the Overmind.

Laying down the options, seeing the current context - this really contributes to better understanding.

And seeing those trade-offs.

A true power of a senior engineer or an architect is the ability to "produce" more senior engineers and architects, not solving hard problems or drawing eye-catching sketches.

No single ninja, rockstar developer or hero architect will provide a long-term value.

Conclusion 🔍

The Toyota Production System (TPS) embodies the wisdom of ordinary people through its foundational principles that empower every employee to contribute to continuous improvement and quality.