How I Make Architecture Decisions Without Endless Meetings

by Eric Hanson, Backend Developer at Clean Systems Consulting

Architecture decisions don't need a calendar invite — they need a clear process, the right people, and a bias toward writing things down. Here's the framework I actually use.

How Architecture Discussions Usually Go Wrong

The typical pattern: someone raises an architectural concern in a meeting. The discussion goes broad quickly. Multiple people have strong opinions. No one wants to decide without more information. A follow-up meeting is scheduled. That meeting also goes broad. A third meeting produces a rough consensus that nobody writes down clearly. Three months later, two people on the team have different memories of what was decided.

The issue isn't that people are bad at meetings. It's that architecture discussions are inherently complex and meetings are a poor medium for complex decisions. They're real-time, they favor the most vocal, they lose nuance, and they produce no durable record.

Write the Decision Down Before the Meeting

The single change that improved architecture decisions most for me: whoever has the concern or the proposal writes it down first, before any discussion happens.

I use a lightweight structure: what's the context, what are the options we're considering, what are the tradeoffs of each, and what am I proposing? This is often called an Architecture Decision Record — the specific format matters less than the discipline of writing it down.

This document does several things:

  • It forces the proposer to think more rigorously. Problems that seemed urgent often become less urgent or dissolve entirely when you have to articulate them precisely.
  • It gives reviewers time to think before responding. Async review produces higher-quality feedback than real-time reaction.
  • It creates a record. A year from now, someone can read why this decision was made, not just what was decided.

A written proposal is not a committee document. It has a clear author and a clear recommendation. Other people respond to it; they don't jointly produce it.

Async First, Meeting Only When Stuck

My default process for an architectural decision:

  1. Author writes the proposal document with their recommendation
  2. Relevant people review async and leave comments — questions, alternative perspectives, identified gaps
  3. Author updates the document based on feedback and either refines or confirms the recommendation
  4. If there's genuine disagreement that comments can't resolve, a focused meeting is called — with the document as the agenda

Most decisions don't need step four. Written discussion handles the majority of the back-and-forth, often better than a meeting would. The people who wouldn't speak up in a group will write a comment. The person who thinks of the key objection two hours after the meeting would have missed it; in async review, they can add it.

When step four is needed, the meeting is dramatically shorter and more productive because everyone arrives with the same context.

Be Clear About Who Decides

Ambiguous authority is the source of most endless architecture discussions. If it's unclear who has the final call, every voice gets equal weight regardless of relevance or expertise, and the discussion continues until there's rough consensus — which might never arrive, or arrives as a compromise nobody fully believes in.

Every significant decision should have an owner. Not a committee — a person. That person gathers input, considers it, and decides. They're accountable for the outcome.

This doesn't mean ignoring input or being autocratic. It means someone is responsible for reaching a conclusion. The proposal document establishes this: there's an author, the author makes a recommendation, and unless there's a clear override from someone with appropriate authority, the author's recommendation stands after the feedback period.

Time-Bounding the Discussion

Open-ended discussions attract indefinite scope. Someone always has one more concern, one more scenario to think through.

I put a decision window on every proposal: "I'll collect feedback until [date] and plan to finalize this by [date]." This creates useful urgency. People who have a meaningful concern will share it. People who are vaguely uncomfortable but can't articulate why will usually let it pass.

If feedback at the end of the window reveals a genuine problem I hadn't considered, I extend it. The point isn't to rush bad decisions — it's to prevent decisions from staying in perpetual review because the process has no endpoint.

Distinguishing Reversible from Irreversible

Not every architecture decision deserves the same process. The cost of making a reversible decision slowly is often higher than the cost of making it wrong.

A deployment configuration choice that can be rolled back in an hour? Decide fast. A schema design that will require a painful migration to change in six months? Slow down, think carefully, get more input.

I calibrate the rigor of the decision process to the reversibility of the decision. For reversible choices, I often decide unilaterally or with light consultation. For decisions with high lock-in, I apply the full written proposal process.

The question to ask before deciding how much process to apply: how expensive is it to be wrong about this?

Document What Was Decided and Why

After a decision is made, the proposal document becomes the decision record. I add a short "decision" section: what we're doing and the key reasons. I note any significant alternatives that were considered and why they were rejected.

This five-minute step pays back enormously. It's the thing that prevents "wait, I thought we agreed to X" conversations six months later. It's what lets a new team member understand the system's shape without hunting down the original discussion thread.


A good architecture decision is one you can explain clearly in writing — and if you can't explain it clearly, you haven't made it yet.

Scale Your Backend - Need an Experienced Backend Developer?

We provide backend engineers who join your team as contractors to help build, improve, and scale your backend systems.

We focus on clean backend design, clear documentation, and systems that remain reliable as products grow. Our goal is to strengthen your team and deliver backend systems that are easy to operate and maintain.

We work from our own development environments and support teams across US, EU, and APAC timezones. Our workflow emphasizes documentation and asynchronous collaboration to keep development efficient and focused.

  • Production Backend Experience. Experience building and maintaining backend systems, APIs, and databases used in production.
  • Scalable Architecture. Design backend systems that stay reliable as your product and traffic grow.
  • Contractor Friendly. Flexible engagement for short projects, long-term support, or extra help during releases.
  • Focus on Backend Reliability. Improve API performance, database stability, and overall backend reliability.
  • Documentation-Driven Development. Development guided by clear documentation so teams stay aligned and work efficiently.
  • Domain-Driven Design. Design backend systems around real business processes and product needs.

Tell us about your project

Our offices

  • Copenhagen
    1 Carlsberg Gate
    1260, København, Denmark
  • Magelang
    12 Jalan Bligo
    56485, Magelang, Indonesia

More articles

Why Miami Startups Cannot Rely on Local Hiring Alone for Backend Engineering

Miami has built a real startup scene. It hasn't yet built the backend engineering depth to staff it locally.

Read more

How Oslo and Copenhagen Startups Cut Backend Costs Without Cutting Quality

You just ran payroll and noticed that your two backend engineers cost more than your entire sales team combined. In Oslo or Copenhagen, that's not unusual — it's just math that gets harder to justify every quarter.

Read more

Spring Data Repository Design — When findBy Methods Are Enough and When They're Not

Spring Data's derived query methods eliminate boilerplate for simple queries. They become unreadable for complex ones and break entirely for dynamic filtering. Here is where each approach belongs and how to recognize when you've outgrown derived queries.

Read more

Reactive Programming in Spring Boot — WebFlux, When to Use It, and When Not To

Spring WebFlux enables non-blocking, reactive HTTP handling. It solves a specific problem — high-concurrency I/O-bound services — and creates new problems for everything else. Here is what it actually does and the honest case for when it's worth adopting.

Read more