skip to content

What is software architecture, and what makes something "architectural" rather than just design?

level: juniorimportance: must knowfreq 88%

answer

  1. "Stuff that's hard to change" — Fowler / Ralph Johnson
  2. Cost of reversal, not size, decides
  3. All architecture is design; not all design is architecture
  4. Quality attributes (-ilities) are the real driver
  5. Contextual: line moves with org size and maturity

basics

~20 s

Architecture is the set of big, structural decisions about a system that are expensive or painful to change later — how it splits into parts, how those parts talk, and which technologies they use. Ordinary design decisions live inside one part and can be changed cheaply.

solid answer

~60 s

There are two complementary definitions. The formal one (IEEE/ISO 42010): architecture is the fundamental concepts of a system in its environment — its components, their relationships, and the principles guiding its design and evolution. The pragmatic one (Martin Fowler, quoting Ralph Johnson): architecture is the shared understanding that expert developers have of the system, and in practice "the decisions you wish you could get right early, because they're hard to change" — the stuff that's hard to change. So "architectural" is not a property of size or of a diagram; it's a property of the cost and blast radius of reversing the decision. Choosing to split a system into services, picking synchronous request/response versus asynchronous events, choosing a persistence model, or setting a security boundary are architectural: reversing them touches many teams and modules. Renaming a variable, extracting a helper class, or picking a sorting algorithm inside one module is design: local, cheap, reversible by one person in one commit. The boundary is contextual — the same decision can be architectural in one organization and trivial in another.

go deeper

for a junior

Give the plain definition — big structural decisions that are expensive to change — plus one concrete example of each side (choosing a database = architecture; choosing a loop vs. a map inside a function = design). Don't try to quote standards you haven't read.

for a middle

Add the cost-of-change test explicitly and name the categories: decomposition, communication style, data ownership, security boundaries. Mention quality attributes as the thing architecture is actually optimizing.

for a senior

Cite both definitions (42010 and Fowler/Johnson), stress that the boundary is contextual and moves with organization size and maturity, and give a real decision from your experience that you classified as architectural and why.

for a principal

Reframe the question: the interesting work is not classifying decisions but managing irreversibility — deferring commitments, buying optionality with abstraction layers only where it pays, and investing in delivery capability so that fewer decisions are hard to change at all. Tie this to organizational structure (Conway's law) and to how you govern decisions at scale.

## The problem this question is really testing Interviewers ask this to see whether you treat "architecture" as a job title and a box-and-arrow picture, or as a decision-making discipline with an economic basis. Answers that just recite "architecture is the high-level structure of a system" are true but hollow — the follow-up is always "high-level according to whom?" ## Two standard definitions, and why you should know both **1. The formal / standards definition.** ISO/IEC/IEEE 42010 (the international standard for architecture description, successor to IEEE 1471) defines architecture roughly as: the *fundamental concepts or properties of a system in its environment, embodied in its elements, their relationships, and the principles of its design and evolution*. Unpacking each term: - **element / component**: an identifiable part of the system — a service, a module, a database, a queue. - **relationship**: how elements are connected — calls, messages, shared data, deployment co-location. - **environment**: everything outside the system that it must live with — users, regulators, other systems, the organization, budgets. - **principles of design and evolution**: the rules that constrain future change ("no module may reach into another module's database", "every write goes through the domain layer"). The key insight buried in this definition is *constraint*. Architecture is largely the set of constraints you deliberately accept so that the rest of the work becomes predictable. **2. The pragmatic definition.** Martin Fowler, in "Who Needs an Architect?" (IEEE Software, 2003), reports Ralph Johnson's formulation: *architecture is the shared understanding that expert developers have of the system design*, and it is *the stuff that's hard to change*. Fowler adds the memorable phrasing: **"Architecture is the decisions that you wish you could get right early in a project."** He is careful to note this is a *social* definition — architecture is whatever the experienced people on the project consider important, and it changes as the project matures. Both definitions point at the same core: **architecture = the decisions whose cost of reversal is high.** ## The dividing line: cost of change, not size A useful mental test for any decision: | Question | If yes, it leans architectural | |---|---| | Does reversing it require coordinating multiple teams? | ✔ | | Does it change contracts other people depend on? | ✔ | | Does it require a data migration or a deployment-topology change? | ✔ | | Does it constrain future decisions (a "one-way door")? | ✔ | | Does it materially affect a quality attribute (latency, availability, security, cost)? | ✔ | | Can one developer change it in one merge request without telling anyone? | ✘ — that's design | Examples that are almost always architectural: - **Decomposition style**: one deployable unit (monolith) vs. many (services); layered vs. hexagonal vs. modular monolith. - **Communication style**: synchronous request/response vs. asynchronous messaging/events; this determines coupling and failure modes across the whole system. - **Data ownership and consistency model**: one shared database vs. database-per-service; strong vs. eventual consistency. Data is famously the hardest thing to un-decide because it has *state* — code can be rewritten, terabytes must be migrated. - **Security and trust boundaries**: where authentication happens, what is inside vs. outside the trust perimeter. - **Deployment/runtime platform** and any framework that inverts control over your code (a framework calls you; a library you call — frameworks are far harder to remove). Examples that are usually design: - Which collection type or algorithm to use inside a function. - Whether to use inheritance or composition inside one module. - Applying a pattern such as Strategy or Factory within a single component. - Naming, formatting, local refactoring. ## Structure vs. design — the relationship The cleanest way to phrase it: **architecture is design, but not all design is architecture.** Grady Booch's line — *"All architecture is design, but not all design is architecture. Architecture represents the significant design decisions that shape a system, where significance is measured by cost of change."* Architecture sets the boundaries and rules; design fills in the inside of each box. They are a continuum, not two disjoint activities, and the same person often does both. In practice the two interact: a poor internal design can force an architectural change (a module so tangled it must be split), and an architectural constraint can dictate designs (an event-driven boundary forces idempotent handlers everywhere). ## "Architecture" is contextual and time-varying The same decision can be architectural or not depending on: - **Organization size.** Choosing a logging library in a 3-person startup is a 20-minute change. In a 2,000-engineer company with 400 services it is a year-long migration — architectural. - **Maturity.** Early in a project the language runtime choice is architectural; ten years later it is simply a fact of life, and the architectural questions have moved to "how do we carve the legacy core apart?" - **Investment in changeability.** Fowler's important corollary: if you get good at change — automated tests, continuous delivery, decoupled modules, abstraction layers — *fewer* decisions remain architectural. The best architects actively shrink the set of irreversible decisions rather than trying to be clairvoyant about them. ## What architecture is NOT - **Not a phase.** It is not "the six weeks before coding". Decisions are made continuously. - **Not a diagram.** Diagrams are *descriptions* of architecture (42010 calls them views/viewpoints); the architecture is the decisions and the resulting properties. A system has an architecture whether or not anyone drew it — often called the *implicit* or *accidental* architecture. - **Not only about structure.** Architecture is primarily how you deliver **quality attributes** (also called non-functional requirements or "-ilities": performance, scalability, availability, security, modifiability, testability, operability, cost). Functional requirements can usually be met by many architectures; quality attributes are what discriminates between them. - **Not the exclusive property of a person titled "Architect".** Every team that makes a hard-to-reverse decision is doing architecture. ## How to answer in an interview Give both definitions in two sentences, then immediately ground it: state the cost-of-change test, give one architectural example and one design example from a system you actually built, and close with the contextual caveat ("the line moves with team size and with how good we are at changing things"). That sequence — definition, test, example, nuance — signals seniority far more than any single definition.

  • If architecture is "the hard-to-change decisions", what should an architect do about that?
    Two things. First, try to identify those decisions early and make them deliberately, with recorded rationale (ADRs). Second — and more valuable — invest in making change cheap: automated tests, continuous delivery, clear module boundaries, anti-corruption layers, and deferring commitments to the last responsible moment. Fowler's point is that the best architects *shrink* the set of irreversible decisions rather than trying to predict the future perfectly.
  • Does every system have an architecture, even if nobody designed one?
    Yes. Every running system has a de-facto structure and set of constraints; if nobody made those decisions deliberately, they were made accidentally by whoever committed first. This is often called implicit or accidental architecture, and it usually optimizes for nothing in particular — which is exactly why it tends to fail on quality attributes like scalability or security.
  • Who owns architecture — a dedicated architect or the team?
    Ownership of the *decisions* is best distributed to the people closest to the work; what a dedicated architect adds is a cross-cutting view (consistency across teams, quality attributes nobody owns, long-horizon consequences). Common models are the architect as a hands-on team member, an architecture guild/advisory board, or an Architecture Decision Record process where anyone may propose and a small group ratifies.

Renovating a building: moving a non-load-bearing wall or repainting is design — one person, one weekend. Moving the foundation, the load-bearing columns, or the plumbing risers is architecture — it touches every floor, needs permits, and costs more than the original build. Nothing about a wall's size tells you which it is; you have to know what depends on it.

saying these in an interview costs you the question

  • "Architecture is the diagram" — the diagram is a description; the architecture is the decisions and resulting properties.
  • "Architecture is whatever is high-level / big." Size isn't the criterion; cost and blast radius of reversal is.
  • "Architecture is done up-front, then you code." Architecture is a continuous stream of decisions across the system's life.
  • "Microservices are an architecture, monoliths are not." A monolith is an architectural choice too, often the right one.
  • "Design patterns like Singleton or Factory are architecture." Those are local design decisions unless they define system-wide boundaries.
  • Ignoring quality attributes entirely and describing only functional structure.

context