I Forgot Why I Made a $2 Million Architecture Decision
By Chetan Dhandal
I once stared at my own code comment and felt like I'd entered the Twilight Zone:
// TODO: Figure out why we're using MongoDB here instead of PostgreSQL
// Someone said it was important but nobody remembers why
// DON'T CHANGE THIS - last person who tried broke production for 3 days
The problem? I wrote that comment. Two years earlier. And I genuinely couldn't remember why I'd chosen MongoDB.
When new regulatory requirements hit, my team spent 6 months reverse-engineering my own decision. The delay cost us $2 million in penalties and a major client relationship. I was the architect. I made the call. And I'd forgotten my own reasoning.
That's when I learned about Architecture Decision Records (ADRs) the hard way. Let me save you from making the same expensive mistake.
What Are ADRs? (And Why I Wish Someone Had Told Me Sooner)
An Architecture Decision Record is just a short document that captures one architectural decision. I think of it as a letter to my future self that answers: "What were you thinking?"
Here's what I learned: ADRs aren't just about WHAT you decided. They're about:
- WHY you made the decision (the context that seemed so obvious at the time)
- WHAT alternatives you considered (and why you rejected them)
- WHAT trade-offs you accepted (because there's always a trade-off)
- WHAT consequences you expected (so you can tell if it worked)
The first time I wrote an ADR, I felt silly. "I'll remember this," I thought. Six months later, when a junior developer asked why we chose eventual consistency over strong consistency, I pulled up that ADR and saved myself an hour-long archaeology session through git history.
The ADR That Saved My Black Friday
Let me show you an actual ADR I wrote that saved my team from a catastrophic mistake. I was architecting an e-commerce platform for a startup, and we were three months away from our first Black Friday. During load testing, I watched our database fall over when we simulated even a fraction of the traffic we expected.
I wrote ADR-009 documenting our decision to use eventual consistency for inventory updates. It captured our context (race conditions during flash sales), our decision (optimistic locking with command queues), the alternatives we rejected (pessimistic locking, pre-allocation, overselling), and the trade-offs we accepted.
Six months later, a new engineer on my team suggested "simplifying" the inventory system by switching to pessimistic locking. "It's just cleaner," he said. I pulled up this ADR, and we walked through why that would be a disaster during Black Friday. That 5-minute conversation, backed by documented reasoning, saved us from a change that would have taken down our biggest sales day of the year.
This is the real power of ADRs: they preserve not just decisions, but the reasoning that led to them.
Three Things ADRs Do That I Never Expected
1. They Make AI Assistants Actually Useful
I use AI coding assistants all the time now, but they used to drive me crazy. They'd generate code that looked great but violated every architectural decision I'd carefully made. Then I started feeding them my ADRs.
Before ADRs, I'd ask: "Add inventory management to the order service" and get a synchronized, strongly-consistent solution that was incompatible with our architecture. Now I say: "Add inventory management to the order service. Follow ADR-009 for eventual consistency patterns." The AI generates event-sourced, eventually consistent solutions that align perfectly.
My ADRs became the instruction manual for my AI pair programmer. Game changer.
2. They Saved My Team When I Got Promoted
Here's something nobody tells you about becoming a software architect: you become the single point of failure for institutional knowledge. Every decision lives in your head, and when you get promoted or move to a different team, that knowledge vanishes.
I experienced this firsthand. When I got promoted and moved to a different division, my old team struggled for months. They'd ping me on Slack asking why we stored user sessions in Redis instead of the database, and I'd search through 2-year-old commits trying to remember.
After I started writing ADRs, my transition became smooth. My replacement could onboard himself by reading through the decision records. No more emergency Slack messages asking "what were you thinking?"
3. They're Lifesavers at 3 AM
I'll never forget the night payments started failing for our Brazilian users. It was 3 AM. I was on call. And I was staring at error logs that made zero sense.
Without ADRs, I would have spent hours digging through code. Instead, I searched our ADRs and found ADR-024 ("Use ISO-4217 currency codes") and ADR-031 ("Brazilian payments require CPF tax ID"). Hypothesis: new payment service isn't passing CPF field. Verified in 15 minutes.
I fixed the issue, went back to bed, and thanked my past self for writing those ADRs. Without them, I'd have been up all night spelunking through code trying to figure out why Brazil was special.
When Should You Actually Write an ADR?
Here's my rule of thumb: if you spend more than 30 minutes debating a decision, write an ADR. That debate time is a signal that the decision matters and the context will be valuable later.
I write ADRs when I:
- Choose a technology or framework - "Why React over Vue?" Future you will want to know.
- Define an architectural pattern - "Why microservices for this service but monolith for that one?"
- Make security decisions - "Why JWT over sessions?" Security audits love these.
- Establish integration approaches - "Why REST here but GraphQL there?"
- Accept technical debt - "Why are we shipping this quick-and-dirty solution?" Document it before it becomes permanent.
- Choose data storage - "Why PostgreSQL for users but Elasticsearch for search?"
- Define API paradigms - "Why async event-driven instead of synchronous?"
If you're thinking "but I'll remember this obvious decision," you won't. I promise.
Five ADR Mistakes I Made (So You Don't Have To)
Mistake 1: Writing a Novel
My first ADR was 12 pages long. Nobody read it. Not even me, six months later when I needed to reference it.
What I learned: If your ADR is longer than 2 pages, you're documenting multiple decisions. Split them up. Future you wants quick answers, not a dissertation.
Mistake 2: Playing Time Machine
I once wrote ADRs for every possible future scenario. "We might need microservices someday, so let me document that decision now." Waste of time.
What I learned: Document decisions when you make them, not when you might make them. If the decision isn't real yet, neither is the ADR.
Mistake 3: Writing Orphaned ADRs
I wrote beautiful ADRs and filed them away. Nobody knew they existed. I watched developers repeat the same debates I'd already resolved and documented.
What I learned: ADRs are useless if people don't know about them. I now link them in code comments, PR templates, and onboarding docs. Make them discoverable.
Mistake 4: Letting ADRs Go Stale
I had an ADR saying "We use Jenkins for CI/CD." We'd migrated to GitHub Actions a year ago. A new developer found that ADR and spent a day trying to set up Jenkins.
What I learned: Old ADRs are worse than no ADRs because they lie to you. I now review ADRs quarterly and mark outdated ones as "Superseded by ADR-XXX."
Mistake 5: Seeking Perfect Consensus
I once delayed an ADR for three weeks trying to get everyone to agree. The project stalled while we debated.
What I learned: Document the decision that was made, even if not everyone agreed. Include dissenting opinions in the ADR. Someone is responsible for the decision,document it and move forward.
How I Actually Started Using ADRs (Without Overwhelming My Team)
When I first tried to implement ADRs, I made the mistake of trying to document everything at once. My team looked at me like I'd lost my mind when I suggested we write ADRs for 30 past decisions.
Here's what actually worked:
Week 1: Just Start
I created a simple folder structure and wrote my first three ADRs:
- ADR-001 for our most confusing decision
- ADR-002 for our most recent major decision
- ADR-003 for a decision we kept re-debating
That's it. Three ADRs. Not 30. Just the ones that would provide immediate value.
Week 2: Make It Easy
I added one checkbox to our PR template: "No architectural changes" or "ADR created: ADR-___"
No pressure. No mandates. Just awareness.
Week 3: Document as You Go
The next time I made an architectural decision, I wrote the ADR before implementing it. It took 20 minutes. The clarity it gave me was worth hours of future confusion.
The First Month
After one month, I had 8 ADRs. Just 8. But those 8 ADRs answered 90% of the "why did we..." questions my team had. That's when others started writing them too.
The Template I Use (Keep It Simple)
I tried complicated ADR templates with 15 sections. Nobody used them. Here's the template that actually works:
- Status: Proposed | Accepted | Rejected | Deprecated | Superseded by ADR-XXX
- Context: What problem are we solving? What constraints are we working under?
- Decision: What are we doing about it?
- Consequences: What becomes easier? What becomes harder? What are the risks?
That's it. Three sections. If you can't explain your decision in this format, you probably don't understand it well enough yet.
How I Know ADRs Are Working
You might wonder "is this actually helping?" Here's what I've noticed since I started writing ADRs:
The Numbers:
- Onboarding new developers: Used to take 6 weeks to get productive. Now takes 3-4 weeks.
- Reversed architectural decisions: Used to happen monthly. Now maybe once a quarter.
- Architecture review meetings: Used to take 2 hours. Now often done async in 30 minutes.
- "Why did we...?" Slack messages: I used to get 5-10 per week. Now maybe 1-2.
The Feel:
But honestly, the numbers don't tell the whole story. I know ADRs are working when someone links to an ADR in a PR without me asking, or a new developer says "Oh, I read about this in ADR-015," or we're debating an approach and someone says "Wait, didn't we already decide this?"
What I Wish I Knew Two Years Ago
Remember that $2 million MongoDB decision I told you about? I could have prevented it with a 20-minute ADR. That's the math that keeps me writing ADRs:
- 20 minutes to write an ADR
- vs. 6 months of archaeology and $2 million in penalties
It's not even close.
Since I started writing ADRs, I've had three experiences that convinced me this is non-negotiable:
- The 3 AM production issue I debugged in 15 minutes instead of hours
- The team transition when I got promoted and my replacement didn't need to interrupt me constantly
- The prevented disaster when an engineer wanted to "simplify" something that would have broken Black Friday
These aren't edge cases. This is normal software architecture work. The only difference is I documented my decisions.
Your Next Step
Don't try to document everything. Start small:
- This week: Write one ADR for your most confusing past decision
- Next decision: Write the ADR before you implement it
- Watch: See how much easier the next similar conversation becomes
That's it. You don't need perfect templates or team buy-in or management approval. You just need to start documenting the decisions you're already making.
Your future self is going to forget why you made this decision. The new developer won't know. The AI assistant can't guess. Write it down now while it's still obvious.
Trust me on this: every undocumented decision is a future crisis waiting to happen. Every ADR is 20 minutes now that saves weeks later.
I learned this the expensive way. You don't have to.
Enjoyed this?
Abhanga delivers one essay like this every Saturday.