skip to content

Choosing an Architectural Style

Start from quality attributes, constraints and team topology, not from what is fashionable, then record why in an ADR. You will practise trading scalability, deployability, testability and cost against each other, which is the heart of most architecture interviews.

part ofSoftware design & architectureoverview, primer and where to startread it →
on this pageshow

questions

6

When starting a new system, what should drive the choice of architectural style (layered monolith, modular monolith, microservices, event-driven, and so on) — and what should not?

level: juniorimportance: must knowfreq 72%

answer

  1. characteristics + constraints, not fashion
  2. pick top ~3, accept mediocrity elsewhere
  3. measurable targets, not adjectives
  4. simplest style that hits the targets
  5. record in ADR with rejected options

basics

~20 s

Choose from the qualities the system must have (scale, availability, speed of change, cost) plus its constraints (team size, skills, deadline, budget, regulation). Do not choose by fashion, resume value, or what a famous company uses.

solid answer

~40 s

A style is selected from architecture characteristics (quality attributes) and constraints, not popularity. Method: collect the business drivers, translate them into a short ranked list of characteristics — realistically two or three, because they conflict — then ask which styles naturally supply them. Microservices buy independent deployability, fault isolation and per-service scaling, and pay in network failure, eventual consistency, costly testing and observability. A modular monolith buys simplicity, single-database transactions and cheap refactoring, but deploys and scales as one unit. Event-driven buys throughput and decoupling, and pays in debugging and workflow visibility. Constraints then eliminate candidates: a four-person team with no platform engineers cannot operate forty services; a data-residency rule may force partitioning. Finish with an ADR recording the decision, rejected alternatives and what was traded away, so the choice can be revisited deliberately.

go deeper

for a junior

Say the choice comes from what the system must be good at plus real constraints like team size and deadline, and name one concrete trade-off, for example that microservices deploy independently but are harder to test.

for a middle

Show the loop: drivers to measurable characteristics, rank the top three, eliminate by constraints, score candidates. Contrast at least two styles on deployability, testability and cost.

for a senior

Emphasise that characteristics conflict, that you deliberately accept weakness outside the top three, and that boundaries and reversibility matter as much as the initial pick. Mention ADRs and fitness functions.

for a principal

Frame it as risk and option management across the organisation: which decisions are reversible, which are one-way doors, how team topology and funding shape feasible styles, and what evidence would trigger re-evaluation.

### Terms **Architectural style** is the top-level shape of a system: how it is divided, how the parts talk, how they deploy. - **Layered monolith** — one deployable unit split into technical layers (UI, business logic, data access). Cheap, simple, easy to test end to end; everything ships together. - **Modular monolith** — one deployable unit split by business capability with enforced internal boundaries. Keeps simplicity and transactions, buys clean seams for later extraction. - **Microservices** — many independently deployable services, each owning its own data. - **Event-driven** — components communicate asynchronously through events or messages rather than direct calls. - **Pipeline / batch** — data flows through stages; ideal for transformation workloads. **Architecture characteristics** (also called quality attributes, non-functional requirements, or "-ilities"): scalability, elasticity, availability, fault tolerance, deployability, testability, performance, security, evolvability, simplicity, cost. **Constraints** are non-negotiable givens: team size and skill, budget, deadline, existing platform, compliance, contracts. ### Why requirements alone do not decide Functional requirements ("users can place an order") can be met by almost any style. What differs is *how well* the system does everything else. So the selection input is the characteristics, ranked. Ranking matters because characteristics conflict: elasticity fights simplicity, performance often fights evolvability, strong consistency fights availability under a network partition. Trying to maximise everything yields an over-engineered system that is good at nothing. A practical rule is to pick roughly the top three drivers and consciously accept mediocrity elsewhere. ### The selection loop 1. Extract business drivers (growth forecast, uptime promise, release cadence, regulatory scope, budget). 2. Translate each into a characteristic with a *measurable* target: not "fast" but "p99 under 200 ms at 5,000 requests per second". 3. Rank them; keep the top two or three explicit. 4. Apply constraints to eliminate infeasible styles outright. 5. Score the surviving candidates against the ranked characteristics. 6. Prefer the simplest style that meets the targets, keeping seams where change is likely. 7. Record it in an Architecture Decision Record, including the discarded options and the trigger that would make you revisit. ### Edge cases Greenfield work with unknown domain boundaries argues for a modular monolith — boundaries are cheap to move inside one process and expensive to move across a network. A system whose load is spiky and whose parts scale very differently argues for splitting earlier. A hard organisational constraint (three autonomous teams that must ship independently) can justify service boundaries even when the technical case is weak. And a "non-requirement" is valuable information: if the business genuinely tolerates an hour of downtime, do not pay for multi-region active-active.

  • Why is it usually advised to pick only about three top architecture characteristics?
    Because they conflict — elasticity fights simplicity, availability fights strong consistency, performance fights evolvability. Optimising for everything produces cost and complexity with no clear strength, and leaves the team no tie-breaker when a design decision forces a choice.
  • How do you make a characteristic like 'scalable' usable in a decision?
    Make it measurable and time-bounded: 'sustain 5,000 requests per second with p99 under 200 ms, growing fourfold within 18 months'. That turns a slogan into a threshold you can test candidate styles against and later verify with an automated fitness function.

Choosing a vehicle: a cargo ship, a van and a motorbike all move goods. You decide by volume, deadline, route and the licence you hold — not by which one looks most impressive parked outside the office.

saying these in an interview costs you the question

  • 'We'll use microservices because that's the modern way' — style chosen by fashion, not by drivers
  • Listing ten equally important characteristics, which means nothing is actually prioritised
  • Treating functional requirements as the deciding input; they rarely discriminate between styles
  • Ignoring team size and operational maturity as first-class constraints
  • Assuming the choice is permanent and therefore must be perfect on day one

context

open as a page

What is an Architecture Decision Record (ADR), what does it contain, and why is capturing the rationale for a style choice as valuable as the choice itself?

level: middleimportance: must knowfreq 58%

basics

~20 s

An ADR is a short document recording one significant architecture decision: the context, the options considered, the decision, and its consequences. It matters because it preserves why something was chosen, so later teams can tell a deliberate trade-off from an accident.

open as a page

Compare a modular monolith with microservices across scalability, deployability, testability, operational cost and data consistency. When would you pick each?

level: middleimportance: must knowfreq 88%

basics

~20 s

A modular monolith is one deployable unit with internal module boundaries: simple, cheap, easy to test, with single-database transactions, but it scales and ships as a whole. Microservices deploy and scale independently and isolate failures, but add network calls, eventual consistency and operational cost.

open as a page

How do you evaluate competing architectural style candidates rigorously rather than by opinion? Describe a concrete method and what its outputs are.

level: seniorimportance: should knowfreq 38%

basics

~20 s

Turn vague goals into concrete scenarios ('traffic grows tenfold in a year', 'a payment provider fails'), score each candidate style against them, and note where a choice helps one quality but hurts another. Record the winner and the trade-offs.

open as a page

How do team structure and Conway's Law affect which architectural style is workable, and what is the 'inverse Conway maneuver'?

level: seniorimportance: should knowfreq 46%

basics

~20 s

Conway's Law says a system's structure tends to mirror the communication structure of the organisation that builds it. So team boundaries constrain which architectures are workable. The inverse Conway maneuver means reshaping teams first, so the desired architecture emerges naturally.

open as a page

How should the reversibility of an architectural decision change how much effort you spend choosing, and how do you keep a style choice evolvable over time?

level: principalimportance: nice to knowfreq 34%

basics

~20 s

Cheap-to-reverse decisions should be made fast and tried; expensive ones deserve real analysis. Keep choices evolvable by deferring the costly ones until you know more, keeping clean enforced boundaries, and migrating incrementally rather than rewriting.

open as a page