portfolio Anshul Bisen
ask my work

Architecture debt is usually a decision-quality problem first

The worst architecture debt comes from low-quality decisions made with plenty of time. Improving decision quality reduces debt faster than refactoring sprints.

The standard narrative about technical debt is that it accumulates because of time pressure. We cut corners to ship. We skip tests to meet deadlines. We choose the expedient approach because the proper approach takes too long. Time pressure creates debt.

After auditing eighteen months of architectural decisions at FinanceOps, I have a different view. Time pressure creates implementation debt: messy code, missing tests, incomplete documentation. That debt is real but manageable. A refactoring sprint can clean it up.

The worst architecture debt comes from decisions that were made with plenty of time by the wrong person, with missing context, or without clear ownership. These decisions embed structural mistakes so deep that cleaning them up requires rearchitecting, not refactoring. And unlike implementation debt, architecture debt compounds.

The shape of the problem before the fix.

Most of the leadership posts in this phase are me compressing scar tissue into defaults. It also builds on what I learned earlier in “How I evaluate build-versus-buy decisions at a 50-person startup.” I am less interested in performative management language now and more interested in the boring mechanisms that keep teams aligned when nobody is in a heroic mood.

The meeting-room version of the technical scar.

Three Patterns of Decision-Quality Failure

Pattern 1: Missing context. A senior engineer chose our message queue architecture without talking to the operations team about their on-call capacity. The architecture was technically sound. It was operationally unsustainable because nobody on the team had the expertise to manage it. The decision was made with complete technical information and zero operational context.

Pattern 2: Unclear ownership. Our API versioning strategy was decided by consensus in a team meeting. Twelve people had input. Nobody had ownership. The result was a hybrid approach that combined REST versioning with header-based versioning in an inconsistent pattern. Each person’s preference was partially represented. Nobody’s preference was fully implemented. The compromise was worse than any individual option would have been.

Pattern 3: Wrong decision-maker. A product manager chose the data model for a new feature because the engineering team was busy with another deadline. The product manager is excellent at their job. Data modeling is not their job. The resulting schema embedded product assumptions that made sense for the first version of the feature but made the second version nearly impossible without a migration.

Architecture Decision Records

The fix for decision-quality problems is not more review or more meetings. It is explicit structure around how architectural decisions get made. At FinanceOps, every significant architectural decision follows a lightweight ADR process:

  1. Decision owner. One person is responsible for the decision. Not a committee. One person. They gather input, evaluate options, and make the call. Their name is on the record.
  2. Context section. What is the problem? What constraints apply? What have we tried before? What organizational context matters? This section ensures the decision-maker has the information they need.
  3. Options evaluated. At least two options, with pros and cons for each. If there is only one option, the exercise is not a decision. It is a ratification.
  4. Decision and rationale. What was decided and why. The rationale is the most important part. It is what future engineers will read when they wonder “why is it like this.”
  5. Consequences. What are the known downsides of this decision? What will we need to revisit if assumptions change? This section prevents the revisionist history where every past decision was obviously correct.

The ADR takes 30 minutes to write. It prevents weeks of architecture debt caused by decisions that were never properly evaluated.

Decision Owners Versus Consensus

The single biggest improvement in our decision quality came from eliminating consensus as a decision mechanism for architecture. Consensus produces compromises that satisfy nobody. Decision owners produce clear choices that can be evaluated, criticized, and reversed.

  • Consensus: everyone has input, nobody has accountability. When the decision proves wrong, nobody owns the mistake and nobody owns the fix.
  • Decision owner: one person has accountability. When the decision proves wrong, the owner has the context, the authority, and the motivation to course-correct.

This does not mean decisions are made in isolation. Decision owners must gather input from stakeholders, especially those with operational, security, or business context. But input is not a vote. The owner listens, considers, and decides. The team trusts the owner to make a good decision because the owner has their name on the record.

Measuring Decision Quality

We track architecture debt not by code quality metrics but by decision review. Every six months, I review the ADRs from the previous period and ask:

  • How many decisions required significant revision within six months? If more than 20%, our decision process has a quality problem.
  • How many decisions were made without adequate context? If the consequences section consistently lists surprises that should have been foreseen, our context-gathering is weak.
  • How many decisions were made by the wrong person? If a decision owner frequently lacks the expertise for the decision they own, our assignment process is wrong.

The last review showed a 15% revision rate, down from 35% in our first year. The ADR process is not perfect, but it has measurably reduced the rate at which we accumulate architecture debt from decision-quality failures.

The Root Cause

What changed once the system matured.

This is the phase where individual scars finally turned into repeatable operating principles. I cared less about sounding clever and more about leaving behind a system that stayed sane without me in the room. That is how I build portfolio, pipeline-sdk, and dotfiles too.

Architecture debt is usually blamed on time pressure. The real root cause is decision-quality failure: missing context, unclear ownership, or decisions made by the wrong person. Fixing the decision process reduces debt accumulation more permanently than any refactoring sprint.

Refactoring sprints fix symptoms. Decision quality improvements fix causes. Both matter. But if you only do refactoring without improving decision quality, you are cleaning up messes at the same rate you create them. Fix the decisions first. The architecture will follow.