All articles
  • solution architecture
  • ADR
  • technical leadership
  • risk
  • decision making

How I Make Architecture Decisions Under Uncertainty

Architects rarely receive complete information. The job is to make risk visible, gather the evidence that matters, and preserve a safe path to correct the decision.

Jason Cochran

5 min read
Two reviewers comparing architecture options, assumptions, experiment results, consequences, and a decision record on a worktable.

Architecture decisions rarely arrive with complete requirements, clean data, unlimited time, and unanimous stakeholders. More often, the team must choose while the product is changing, the existing system is only partly understood, and the consequences will outlive the meeting.

I do not believe an architect’s job is to remove all uncertainty. It is to make uncertainty visible, reduce the most consequential part of it, and choose a path the organization can support and correct.

That requires more than a diagram. It requires a decision process.

Start by naming the decision

Teams often compare technologies before agreeing on the problem.

“Should we use Kubernetes?” is not yet a useful architecture question. The underlying decision may be how to deploy five workloads consistently, isolate customers, scale background processing, or reduce environment drift. Those outcomes can have several solutions.

I begin by writing down:

  • the business outcome and the users affected;
  • the specific decision that must be made now;
  • the quality attributes that matter most;
  • the constraints and non-negotiable boundaries;
  • the owner and deadline;
  • what can be deferred;
  • the cost of a wrong choice.

This prevents a familiar technology from defining the problem it is supposed to solve.

Decision discipline

Operating lifecycle

Reduce uncertainty before increasing commitment

Architecture decisions become safer when assumptions, evidence, reversibility, and operating consequences stay visible.

  1. 01

    Frame the decision

    Name the outcome, constraints, owners, deadline, and cost of being wrong.

  2. 02

    Expose assumptions

    Separate known facts from estimates, preferences, dependencies, and unanswered questions.

  3. 03

    Buy evidence

    Use a spike, prototype, measurement, threat model, or customer conversation to reduce the biggest risk.

  4. 04

    Commit and revisit

    Record the choice, consequences, rollback path, and the trigger that would reopen it.

Buy evidence cheaply

  • Measure the risky assumption
  • Run a focused spike
  • Threat-model the consequential path

Decision record

  • Choice and consequences
  • Confidence and unresolved questions
  • Rollback path and revisit trigger
Working principleThe goal is not certainty. It is a decision whose risk, evidence, and next correction are understood.

Separate evidence from assumptions

Every design contains assumptions. Problems begin when they are spoken as facts.

A team may assume a workload needs global scale, that a managed service will satisfy a compliance requirement, that network latency is negligible, that an acquired system can emit events, or that users will tolerate a new workflow. Each may be reasonable. Each needs a different kind of validation.

I like to classify what we know:

  • Observed: measured in production, demonstrated in code, or confirmed by the accountable business owner.
  • Supported: documented by an authoritative source but not yet validated in our environment.
  • Estimated: a forecast based on stated inputs.
  • Assumed: necessary for the current design but not yet proven.
  • Unknown: important information we do not have.

This language keeps a proposal honest without making it timid. A confident architect can say what is unknown and still recommend a path.

Buy the cheapest useful evidence

Not every uncertainty deserves a six-week prototype. The goal is to reduce the risk that could change the decision.

If the concern is throughput, run a representative load test. If it is a provider’s identity boundary, build a narrow integration spike. If it is user adoption, walk the workflow with actual users. If it is recovery, conduct a restore exercise. If it is data meaning, reconcile a sample against the source system. If it is security, threat-model the path and test the key authorization boundary.

A good spike has a question, a time limit, representative conditions, and a recorded result. A demo that only proves the happy path can create false confidence.

Implementation has helped challenge my own plans repeatedly. WellOS exposed the operating and funding cost behind a broad product vision. OpenClaw VPS made provider reconciliation and billing state concrete. ListBlaze showed how quickly AI-assisted preparation becomes an evidence and approval problem. BlazeOS is forcing architectural contracts to survive multiple runtimes and offline state.

The code did not make the decisions automatically. It made weak assumptions harder to ignore.

Treat reversibility as an architecture attribute

Two options with similar features can carry very different exit costs.

A managed service may accelerate delivery but create data-gravity, pricing, or platform dependencies. A custom service may avoid vendor coupling while creating permanent staffing and support responsibilities. A shared schema can be fast for the first integration and expensive for every later change.

I consider:

  • how data can be exported and verified;
  • whether interfaces use provider-specific types;
  • whether a rollout can be limited or reversed;
  • whether old and new versions can coexist during migration;
  • which contracts consumers depend on;
  • what operational knowledge the choice requires;
  • what event would justify a replacement.

Reversible does not mean temporary. It means the system preserves a credible correction path.

Record consequences, not meeting minutes

An architecture decision record should be short enough to read and specific enough to prevent the same debate from restarting without new evidence.

I want the record to capture context, decision, alternatives, consequences, evidence, status, and revisit triggers. “We chose PostgreSQL” is incomplete. The useful part is why it fit the workload, which constraints it satisfies, what responsibilities it creates, and what future condition would challenge the choice.

The record should evolve honestly. A superseded decision is not a failure to erase; it is evidence of how the system changed.

Match commitment to confidence

When evidence is weak, keep the first commitment small.

Use a modular monolith before distributing ownership across services. Put a provider behind a narrow adapter before letting its types spread through the domain. Release read-only insight before granting automated write authority. Migrate one bounded workflow before committing the enterprise to a platform-wide replacement.

This is not resistance to innovation. It is how an organization learns without turning every experiment into permanent infrastructure.

A decision is complete when ownership is clear

The technical choice is only part of the work. Someone must own deployment, security, observability, cost, support, recovery, and future change.

I consider an architecture decision ready when the team can explain:

  1. what outcome the choice supports;
  2. which evidence supports it;
  3. which assumptions remain;
  4. what can fail and how the system responds;
  5. who owns the resulting responsibilities;
  6. how the decision will be verified;
  7. what would cause it to be revisited.

That standard does not guarantee a perfect choice. It produces a responsible one—and gives the team a way to improve it as reality teaches us more.

Sources and related reading

Share this article

Send it to someone working through a similar architecture decision.

LinkedInXEmail