Skip to main content

The Y Files - explain decisions, not just code

A woman writes a letter to her past self to use ADRs. A glowing clock suggests she has traveled back in time.

The question I find myself asking more than any other is “Why?”…

  • Why did we choose a custom CI/CD pipeline configuration instead of the standard one?
  • Why is this a separate microservice instead of part of the core app?
  • Why did we choose this weird database instead of something mainstream?
  • Why are passwords hashed this way and not that?

Unfortunately, when the “why” behind decisions goes undocumented, it doesn’t just gracefully fade away—it comes back to haunt you.

By the time we get around to asking those questions, the people who knew the answers are often long gone, or maybe just have had too many nights of sleep since then. The result? They become unsolved mysteries. And whether it’s a new teammate or future-you, someone will be playing software detective without a clue or a motive.

So let’s talk about how to prevent every “why” from turning into a cold case.

🔗The truth is out there…write it down!

We need a way to capture the context of our decisions.

A decision without context, no matter how grounded in reasoning at the time, guarantees future confusion when context inevitably changes. Was it a performance trade-off? A legacy system constraint? A temporary workaround that became permanent? 1 Knowing the answers to these questions usually leads to the question at hand: How can I safely make a change now that it’s been several weeks, months, or even years?

Without a trail of reasoning, it’s easy to second-guess decisions that may still be sound, repeat gotcha mistakes, or simply waste time and resources unraveling past logic.

Architectural Decision Records (or ADRs) bridge that gap.

These lightweight documents capture key decisions, along with their context, alternatives, and consequences. They give future readers (including future-you) a window into the context, constraints, and rationale that shaped the system. Think of them as diary entries, but with fewer feelings and more foresight. It’s a way of saying “We thought this through, and here’s how we got here.”

🔗I want to believe understand

If code is the what, ADRs are the why, and those two things belong together. Not every small decision needs an ADR—reserve them for documenting significant decisions that shape the structure, behavior, or direction of a software system. Storing your architectural decisions in source control means they evolve with your system, live alongside the code they affect, and are versioned just like everything else.

When writing an ADR, you don’t need to reinvent the wheel. Below are two templates based on what we use at Particular Software for smaller (yet still significant) and bigger decisions. We have gone through many iterations to arrive at what we feel works well, while keeping it simple, structured, and GitHub-friendly.

Here’s a very simple ADR template for small decisions:

# Description of architecture decision

## Context

<!-- Describe the problem/context and the reason(s) a decision needs to be made. -->

## Decision

<!-- State the decision with the rationale. -->

## Risks

<!-- Risks, how they are quantified, and how they might be mitigated. -->

## Alternative approaches considered

<!-- Alternative approaches considered and why they weren't chosen. -->

And now here’s a silly example using that template. This is clearly not an “architectural” decision, but we didn’t want to set the internet afire by doing something controversial like tabs versus spaces:

# Official company whiteboard marker color

## Context

Everyone is using different colored markers and they clash.
We need a uniform color to reduce color noise.

## Decision

Dark blue markers have been selected as the official color.

It is high contrast and easy to read. They're also available
at a steep discount from the local marker depot if we buy a
3 year supply.

## Risks

Some people really hate blue and might not read messages
written in them. We can mitigate this by introducing the
blue markers gradually.

## Alternative approaches considered

Red is too aggressive, yellow is too hard to read, and green
smells like moldy feet. Black would have been acceptable but
we would have to pay full price.

Bigger decisions need more to support. A richer ADR template can capture more context: underlying assumptions, the criteria used to pick between alternatives, impacted stakeholders and their needs, impacts on other areas of the business, and the consequences of not following the recommendation over time.

Here’s an example of an ADR for choosing the coffee source for the breakroom using that richer template. It had better get followed too, or remembering why we made decisions will be the least of our problems. :wink:

🔗Summary

Whether you use a predefined template or create your own, the key is the habit—make documenting architectural decisions part of your team’s routine. Architecture is full of trade-offs, and future-you deserves to know what led to them.

To learn more about ADRs, check out Microsoft’s Architecture decision record article and AWS’ ADR process.

Humorous WANTED poster for a missing ADR

Share on Twitter

About the author

Jo Palac

Jo Palac is a software architect at Particular Software who believes in leaving breadcrumbs for her future self, and still holds a small grudge against her past self for not starting sooner.


  1. Or these days, was it an AI hallucination nobody caught?

Don't miss a thing. Sign up today and we'll send you an email when new posts come out.
Thank you for subscribing. We'll be in touch soon.
 
We collect and use this information in accordance with our privacy policy.