← All Articles

How engineers and business people handle uncertainty

I've seen conversations stall over a word as ordinary as customer.

An engineer hears all the definitions still missing: legal names or nicknames, merged accounts, privacy flags, and the edge cases nobody has considered. A business colleague may mean the common case that drives revenue today and expect the definition to evolve as the team learns.

Both are trying to protect the product. The engineer sees expensive rework ahead. The business colleague sees an opportunity disappearing while the team debates a class diagram. Meetings multiply because each side is managing uncertainty in the way its work has taught it to.

I recently listened to the podcast The Architect's Paradox: Embracing Uncertainty in Software Architecture. It gave me better language for this tension and for the change I've felt in moving from engineering into architecture.

Two useful ways of thinking

Business professionals work inside systems that keep moving. Markets shift, regulations change, and customer behavior can upset yesterday's plan. The work often rewards people who spot a pattern, make a decision with incomplete information, and revise it later.

Engineering tools often reward a different habit. We turn a fuzzy idea into data structures, algorithms, and interfaces precise enough for a compiler. An almost correct definition doesn't compile, so looking for ambiguity becomes part of the job.

The split is hardly clean. Plenty of engineers are comfortable with ambiguity, and plenty of business colleagues want precise definitions. I find the distinction useful only when it helps explain why a particular conversation has become stuck.

Trouble starts when either group expects the other to use the same approach. Detailed technical questions can feel like red tape to the business. Loose narrative requirements can leave an engineer wondering what, exactly, they are being asked to build.

Leave room for assumptions to change

When I worked strictly as an engineer, my instinct was to protect the codebase from ambiguity. Architecture has required me to make decisions with incomplete information and accept that some assumptions will be wrong.

Now I ask how the design might respond when our current model of a customer, product, or order changes. We can model the likely changes, put boundaries around the uncertain parts, and explain the cost of that flexibility to engineers and business colleagues. Other areas can remain simple until we have evidence that they need more.

The podcast introduced residuality, a technique that stresses a design with "what if" questions until its weak spots appear. It helps reveal which parts of a system may need to stay open for extension. Some deliberate complexity can then be treated as an investment in adaptability, with a cost that still needs to be managed.

My first response to the podcast exposed my own habits: "If we follow SOLID, future change is already covered." The Open-Closed Principle helps, but it keeps the discussion at class boundaries. I had zoomed in too far.

I still run into this when I propose a design that can look slightly off-target for the immediate problem. Engineers may break down the requirement, isolate the abstractions, and suggest something cleaner for today's case. Their pushback is reasonable. They're optimizing with the information in front of them.

The architectural view includes assumptions that may give way when a new market, regulation, or product variant arrives. Residuality asks where the system can safely crack when that happens. Small boundaries can create controlled routes for extension and reduce the chance of an all-or-nothing rewrite.

Translate the uncertainty

The architectural role has put me between these perspectives. Part of my job is translating business goals into technical choices without demanding that everyone learn to speak in code. Another part is making the uncertainty visible so the team can decide where flexibility is worth its cost.

The cleanest design for today's case may still be the right choice. So may a slightly more complex design that leaves one uncertain boundary easy to change. The team can only judge that tradeoff when it knows which assumptions the architecture is carrying.

I'm still learning how to make that judgment. Which assumptions deserve a flex point now, and which can stay simple until the evidence changes?