Strategy

Why a second opinion on architecture is worth the cost

Editorial · Reveneau · November 1, 2026

Why a second opinion on architecture is worth the cost

We have met with engineering teams who were certain their architecture was fine, right up until an outside reviewer looked at the same system and asked one question nobody inside the team had asked in over a year. The question was rarely about a bug. It was almost always about an assumption: why does this service own that data, why does this queue exist, why does every write have to go through this one path. The team could not answer, because the answer was not a decision anyone remembered making. It was just how the system had always worked, for as long as anyone currently on the team had been looking at it.

That is the real case for a second opinion: nobody, however skilled, can clearly see the weak points in decisions they helped make.

An internal team cannot audit its own assumptions

A team that built a system works with its logic every day. That closeness is what makes them fast, and it is exactly what makes certain kinds of mistakes invisible to them.

Here is the mechanism: an assumption made under deadline pressure gets built on top of, again and again, until it stops looking like a choice and starts looking like a fixed part of the world. Nobody re-examines it. They just build the next feature on it. A database schema picked in month one because it was the fastest way to build a demo can still be something the whole system depends on two years later, with a dozen services depending on its exact structure, and by then the team does not experience it as a decision anymore. They experience it as a fixed limit. An outsider arrives and sees a choice, made once, under different conditions than the ones the system now runs under. They ask why. The team, often for the first time in a long while, has to answer out loud.

This is not a character flaw. It is how expertise works: the more fluent you become inside a system, the more you stop noticing its structure, and it starts to feel like fact rather than decision. A review works because the reviewer is new to the system. Every choice is visible to them precisely because none of it is familiar yet.

Sunk-cost thinking protects the wrong things

The second hidden problem is easier to see, and harder to admit to. A team that spent three months migrating a data layer does not want to hear that the migration solved the wrong problem. Not because they are stubborn, but because reversing that decision means admitting the three months achieved less than everyone hoped.

This is the sunk cost fallacy showing up in architecture rather than in a budget line: teams stay loyal to a technical direction because of what they already invested in it, not because of what the direction is worth going forward, even when the signs that it needs to change are visible to everyone. The effort already spent is real, and it does not help anyone going forward, because a system does not care how hard something was to build. It only cares whether that thing still does the job.

An outside reviewer owes nothing to that three months. They were not involved when the decision was made, so they feel no wish to protect it. That distance is the entire value of bringing someone in: they can say "this needs to change" without it costing them anything personally, which is precisely the sentence an internal team finds hardest to say to itself.

This shows up in smaller ways too, not only in the big three-month migrations. A naming convention picked in week one, a queue added to solve one specific outage, a single service quietly turned into the place every other service writes to first: each of these gets defended over time simply because someone had to argue for it once. An outsider has no memory of that argument and no reason to defend it, so they can ask the plain question, is this still needed, without it sounding like a personal criticism of whoever built it.

The cost of an unquestioned decision grows quietly

None of this would matter much if a bad architectural decision stayed small. It rarely does. CISQ's 2022 report on the cost of poor software quality in the United States put accumulated technical debt, the cost of reworking software built on weak designs, at approximately $1.52 trillion. That figure did not come from one catastrophic mistake at each company. It came from thousands of small, reasonable-sounding decisions that nobody went back to question, each one more expensive to fix than the last, because more was built on top of it in the meantime.

This is what makes architecture different from most other engineering choices. A bug you can fix in an afternoon. A wrong assumption built into how services talk to each other gets more expensive to fix every month it remains, because every new feature that gets built has to work around it, and those workarounds become more code that also needs fixing later. The earlier a flawed assumption gets named, the cheaper it is to change, and the whole value of an outside review is that it names the assumption while it is still a conversation instead of a rewrite.

What a real review delivers, and what a rubber stamp, an approval with no real checking, looks like instead

Paying for a review only makes sense if the review can actually disagree with you. A firm that reads your architecture and hands back a report saying everything is fine has not done a review. They have done a favor, and favors are not free of cost, because the risk they failed to name does not go away just because nobody wrote it down.

A real review names specifics: this service, this table, this queue, here is what will break under this condition and here is what it will cost to fix now versus later. It should also say what the team got right, because a report that only ever finds problems is as suspect as one that never finds any; both are signs the reviewer started from a conclusion rather than from the system they were reviewing. The test we use when scoping this kind of work for a client: could this exact report have been written before anyone looked at the actual code? If the findings would read the same for almost any company's system, nobody looked closely enough to write them.

In the work we do, this is also why an eval suite matters once the findings turn into changes. A review can tell you an assumption is wrong. Only a set of automated checks, written from the actual specification rather than from memory of how the system is supposed to behave, can tell you the fix did not quietly break something the review never thought to test for.

What to do with the findings once you have them

A review that gets read once and filed away has given you nothing. The findings need an owner and a date, sorted by what gets worse the longer it waits, not by what is easiest to finish first. Some findings are cheap fixes that cause wide damage if ignored. Others are structurally sound today and only worth revisiting if the system grows in a specific direction. A good review will tell you which is which. Acting on that ranking, out loud, in front of the same team that commissioned the review, is what turns a document into a decision.

The teams that get the most out of this are not the ones with the weakest architecture. They are the ones secure enough in their own work to ask someone else to try to find the weak point in it. Every system has an assumption nobody on the team remembers making. The only question is whether you find it when you choose to look, or when the system fails.

Common questions

What is an outside architecture review, exactly?

It is a structured look at how a system is built, done by people who did not build it and do not report to whoever did. They read the code, the diagrams, and the decisions behind them, then write down what they find: what will keep working, what will not, and what nobody has tested yet. The point is not to grade the team. It is to see the system without the context that makes its weak points invisible from inside.

How is this different from a normal code review?

A code review checks whether a change does what it says and does not break anything nearby. An architecture review checks something bigger: whether the structure the code sits inside can handle the load the business is about to add. A pull request can pass every code review for a year and the system can still be heading toward a serious failure that no single review would ever catch, because no single change is the problem.

Why would an internal team miss something a review would catch?

Not because the internal team is careless. It is because a decision made a year ago under deadline pressure eventually stops feeling like a decision and starts feeling like a fact of the system, in the same way people stop noticing something they see every day. Nobody re-examines a fact. An outside reviewer is seeing the system for the first time, so the old decision is one of the first things they notice.

What does sunk-cost thinking look like in an architecture review?

It looks like a team defending a choice by pointing at how much work already went into it, rather than at whether the choice still fits what the system now needs to do. The database schema took three months to migrate, so nobody wants to revisit it, even after the product built on top of it changed direction twice. The effort spent is real. It has no bearing on whether the current approach is still the right one, and an outsider owes nothing to that effort.

What should a real architecture review deliver, at minimum?

A short list of specific findings, each one naming a real risk, where it is in the system, and what it would take to fix it, ranked by how much it would cost to leave alone. It should also say plainly what the team got right, because a review that only lists problems is as suspect as one that lists none. If the output reads the same regardless of which system it was run against, it was not a real review.

What makes a review a rubber stamp, meaning an approval with no real checking, instead of a real one?

A rubber-stamp review starts from the conclusion the client wants and works backward to a report that supports it. You can usually tell by what is missing: no specifics tied to the actual codebase, no risk that would be expensive or awkward to fix, and a summary that could be pasted onto almost any other company's system without anyone noticing. A real review names things by file, by service, by decision, because those specifics are what make it checkable.

How much does an outside review cost compared to catching the same problem later?

There is no fixed number that applies to every system, so treat any flat figure with suspicion. What holds across cases is the direction: catching a structural problem on paper, before more code is built on top of it, costs a fraction of what fixing the same problem costs after a year of features have been added onto the affected part of the system. The specific ratio depends on the size of the system and how central the affected part is.

Should a review happen before a big build starts, or only after something breaks?

Both have value, but the earlier review is the one that prevents a problem rather than describing one that has already happened. Before a major build, a review can catch an assumption the whole system depends on while it still costs a conversation to change. After an incident, a review is still worth doing, but by then the fix usually means rewriting something the business already depends on, which is a harder and more expensive job.

Does an outside review mean the internal team failed?

No. It means the internal team is human, and humans lose the ability to see a decision clearly once they have worked with it for months. The best engineering teams we work with ask for outside review specifically because they trust their own judgment enough to want it checked, not because they doubt it. Treating a review as a judgment of the team, instead of a normal part of building something correctly, is what makes teams avoid asking for one until it is too late.

What is the right way to act on a review's findings?

Not all of them at once, and not by rank alone. Sort findings by what breaks first if left alone and by what gets more expensive the longer it waits, then fix in that order, even if a lower-risk item is easier to finish first. A review that gets filed away unread has changed nothing, so the findings need an owner and a date, tracked the same way an open bug is tracked.

Start a project