Be Software Architecture Wise
Be Wise Apps

Leer en español · Lire en français · Auf Deutsch lesen

Section 1.2 of 1.8 · Beginner · 17 min read

Architecture, design and code: significance, scope and levels

Video lesson

5 min · narrated, with captions
Listen only (audio)
Read the transcript

When is a decision architecture, and when is it just design? This lesson gives you practical tests, and shows why the answer isn't always where you'd expect.

Think about planning a house. Some choices fix everything else: how many floors, where the stairs go, where the load-bearing walls stand. Others can be changed on a weekend: paint, shelves, light fittings. Both are design. But only the first kind is architecture, because changing it later means knocking the house about. In software, how a system is split into parts is architecture. How one function is written inside one part is design.

Grady Booch put it neatly: all architecture is design, but not all design is architecture. There's no clean wall between them, just one continuum of decisions, ordered by significance. So the useful question isn't whether something is architecture in the abstract. It's how significant this decision is here, and how much care it deserves.

So what makes a decision significant? First, it's hard or expensive to reverse. Ask: if this turns out wrong in a year, what will it cost to change? Second, wide scope. It touches many components, teams or systems, like the format of customer identifiers used across every service. Third, it decides whether you meet a key performance, availability, security or cost goal. Fourth, it sets a constraint for others, limiting what other teams may choose. And fifth, it involves significant trade-offs, or real novelty and risk, such as a database nobody in the organisation has ever run in production.

This diagram places a decision on the continuum. The left end is more architectural; the right end is more design and code. The first dimension is the cost of reversing: months of work across many teams at one end, minutes for one person at the other. The second is the scope of impact: the whole system or organisation, against one function or class. The third is the effect on key qualities: does the decision decide one, or is its effect local or none? The dots place one example decision, the choice of a message format, on each row. A decision can score differently on each dimension, which is why you look at all three.

Here's how a technical lead at a ride-hailing start-up sorts five decisions. Storing trip locations in a time-series database is costly to reverse and touches trips, billing and analytics. It's architectural, so it gets written up and reviewed. Choosing an HTTP client library inside the pricing service is cheap to reverse and affects one service. That's design, and the pricing team decides. Calculating fares on the server, never on the phone, spans the apps and the back end and protects the integrity of pricing. It's architectural: a governing principle. Representing money as whole pence or cents everywhere looks like a coding detail. But once data and partner systems depend on it, it's very expensive to change. Architectural, despite being low-level. And dark mode colours in the driver app? Trivial to reverse. Design. Notice that two of the three architectural decisions aren't about boxes and arrows at all.

The word architecture is also used at different levels of scope, and job titles follow them. Enterprise architecture covers a whole organisation: its capabilities, information, applications and technology. The best-known framework here is TOGAF, from The Open Group. Solution architecture addresses one business problem that spans several systems, such as a hospital adding online booking that must connect to its existing systems. Software or application architecture, the main subject of this course, concerns the structures and qualities of one system. Below that come detailed design, inside one component, and then the code itself. Each level constrains the one below. On the right, three specialisms cut across every level: data architecture, security architecture and infrastructure architecture.

Why does this matter? Because level of abstraction alone is a poor test. Identifier formats, money and time conventions, and API contracts are often architectural, even though they look low-level. Decisions should be made at the lowest level that has enough context and accountability. Architects who decide class structures become a bottleneck; teams that make system-wide choices alone create costly inconsistency. And good teams shrink the set of architectural decisions. Hiding a vendor behind an interface, or keeping a database private to one service, makes a decision cheap to reverse, and moves it towards design.

That's the line between architecture and design. The full section has more example decisions and who usually makes each kind. Next, in Section one point three, we look at why architecture matters so much. See you there.

What you need to know

A continuum, not a wall

If architecture is the set of significant decisions and structures (Section 1.1), then design is everything else: the many smaller decisions about how each part works inside. The difficulty is that there is no clean line between them. Choosing to split a food-delivery platform into an ordering system and a courier system is clearly architectural. Naming a variable is clearly not. Between those extremes lies a long middle ground of decisions (an API's error format, a caching rule, how a module is divided into packages) whose status depends on context.

Grady Booch put it neatly: all architecture is design, but not all design is architecture. Architecture and detailed design are points on one continuum of design decisions, ordered by how significant they are. That is why the most useful question is not "is this architecture or design?" in the abstract, but "how significant is this decision here, and how much care does it deserve?".

A second, popular way to draw the line is by level of abstraction: architecture is the high-level view ("boxes and arrows"), design is the low-level view ("classes and methods"). That is a reasonable first approximation but it fails in both directions. A low-level detail can be architectural: the format of an identifier shared by twenty services, or the choice of a time zone convention for stored dates, may cost months to change. And a high-level box can be trivial: whether an internal admin tool is a separate service may not matter at all.

What makes a decision architecturally significant

A decision is architecturally significant when it has one or more of the following characteristics. These are not formal rules from a single standard; they summarise what the SEI, Martin Fowler, Mark Richards and Neal Ford and others say in different words.

Signs that a decision is architecturally significant

CharacteristicQuestion to askExample
Hard or expensive to reverseIf this turns out wrong in a year, what will it cost to change?Choosing an event-sourced data model rather than storing current state
Wide scopeHow many components, teams or systems does it touch?Defining the format of customer identifiers used across all services
Determines a key qualityDoes it decide whether we meet a performance, availability, security or cost goal?Putting a cache in front of the product catalogue to meet a 200 ms response target
Sets a constraint for othersDoes it limit what other teams may choose?Mandating that all services publish events to one shared broker
Involves significant trade-offsAre we giving up something important to get something else?Accepting eventual consistency between orders and stock to keep checkout available
High novelty or riskHas anyone here done this before? What if the technology fails us?Adopting a database the organisation has never operated in production

Mark Richards and Neal Ford, in Fundamentals of Software Architecture, describe the architecture/design spectrum in similar terms: a decision sits further towards architecture the more strategic it is (long-term, many people involved), the more effort it would take to change, and the more significant its trade-offs. Martin Fowler offers a compact version: architecture is the stuff that is hard to change, which also means that one of an architect's goals is to make more things easy to change. Making a decision cheap to reverse, for example by putting it behind an interface, effectively moves it from architecture towards design. This idea, reversibility, is explored further in Section 1.6.

Placing a decision on the continuum

A continuum from architecture to code, with three dimensions that place a decision on itMore architecturalMore design / codeCost of reversingmonths, many teamsminutes, one personScope of impactwhole system or orgone function or classEffect on key qualitiesdecides a key qualitylocal or noneDots: one decision (choice of message format) placed on each dimension
Three dimensions place a decision between architecture and design; a decision can score differently on each.

Strategic and tactical decisions

A related distinction is between strategic and tactical decisions. Strategic decisions set direction for a long time and for many people: adopting a cloud provider, choosing between a monolith and distributed services, deciding that customer data will be mastered in one system. They usually need input from several stakeholders and are worth writing down with their reasons. Tactical decisions solve an immediate problem within a bounded area: which library to use for parsing dates in one service, how to structure a particular database query, how to name the endpoints of an internal API.

Strategic does not mean slow. Many strategic decisions can and should be made quickly once the options are clear, and some are reversible if they are structured well. Tactical does not mean unimportant: a poor tactical decision repeated in fifty places (say, every service writing its own retry logic with no back-off) can add up to an architectural problem. Architects watch for tactical decisions that are about to become strategic through repetition, and turn them into a shared principle or platform capability.

Architectural or design? Example decisions with reasoning

Decision (for an online shop)VerdictReasoning
Split the system into separately deployable services for catalogue, checkout and deliveryArchitecturalAffects every team, deployment, data ownership and failure behaviour; very costly to reverse.
Use PostgreSQL rather than a document database as the main store for ordersArchitecturalShapes the data model, transactions and operations skills; migration later is expensive and risky.
Use a specific JSON library inside the checkout serviceDesignLocal to one service and replaceable in a day if hidden behind the service's own code.
Require every service to emit structured logs with a shared correlation IDArchitecturalA cross-cutting concern: it only works if everyone follows it, and it determines how quickly incidents can be diagnosed.
Name the method that calculates delivery feesDesign (code)Purely local; renaming is automated by tools.
Choose the format of order numbers shown to customers and shared with the warehouse partnerArchitecturalLow-level, but it crosses system and company boundaries and is printed on parcels; changing it needs coordination with an external party.
Use the Strategy pattern to support several delivery-fee rulesDesignShapes one component's internals; other components are unaffected.
Cache product prices for 60 secondsDependsDesign if prices change rarely and staleness is harmless; architectural if a stale price creates a legal or financial problem, because it then decides a key quality (correctness).

Levels of architecture

The word architecture is also used at several levels of scope, and job titles follow these levels. Confusing them causes many misunderstandings: an enterprise architect and a software architect may both be "the architect", yet their work barely overlaps.

Enterprise architecture looks at a whole organisation: its business capabilities (what it must be able to do, such as "assess claims" or "onboard customers"), the information it holds, its portfolio of applications and its technology platforms, and how all of these should change to support strategy. Typical outputs are capability maps, target-state roadmaps, technology standards and decisions about which systems to retire. The most widely used framework here is TOGAF, published by The Open Group, whose current version is the TOGAF Standard, 10th Edition (2022). It provides a method (the Architecture Development Method) and a body of content for planning and governing enterprise change. Organisations use it to varying degrees; many adopt parts of it and some find it heavyweight, and this course describes it only so you can recognise it.

Solution architecture addresses one business problem or programme, typically spanning several applications, teams and vendors: for example, a hospital introducing online appointment booking that must connect a new web front end, the existing patient administration system, an SMS provider and the identity service. The solution architect makes the pieces fit together, often under commercial and contractual constraints.

Software or application architecture, the main subject of this course, concerns the structures and qualities of one system: its decomposition, its runtime interactions, its deployment, its data and its evolution.

Three specialisms cut across all these levels. Data architecture covers how data is modelled, owned, stored, moved, governed and used for analytics (Chapter 7). Security architecture covers identity, access, protection of data, threat models and how security controls are placed (Chapter 8). Infrastructure architecture (often now cloud or platform architecture) covers compute, networks, storage, environments and deployment platforms (Chapter 10).

Levels and cross-cutting specialisms

Levels of architecture from enterprise down to code, with data, security and infrastructure architecture cutting across themEnterprise architectureSolution architectureone business problem, several systemsSoftware / application architectureone system: structures and qualitiesDetailed designinside one componentCodeDataarchitectureSecurityarchitectureInfrastructurearchitectureEach level constrains the one below; specialisms cut across every level
Scope narrows from enterprise to code; data, security and infrastructure architecture apply at every level.

Who makes which decisions

In a healthy organisation, decisions are made at the lowest level that has enough context and is accountable for the consequences. Architecture is not the sole property of people with "architect" in their title. A reasonable default division looks like this, although every organisation tunes it.

Kind of decisionUsually made byUsually consulted
Technology standards and platforms for the organisation (e.g. approved cloud provider, identity platform)Enterprise architects, CTO, architecture boardSolution and software architects, security, finance
How several systems and vendors combine to solve a business problemSolution architectProduct owners, enterprise architects, vendor architects
The major structure of one system: decomposition, communication style, data ownershipSoftware architect or the team's technical lead, with the teamOperations, security, other teams affected
Design inside a component: classes, patterns, algorithmsThe development teamArchitect only if a principle or quality is at stake
Code-level choices: naming, local refactoringIndividual developers, via code reviewNobody else, normally

Two warning signs show that the division is wrong. If architects decide internal class structures, they become a bottleneck and the team stops thinking. If teams independently make decisions with system-wide effects (each choosing its own message broker, say), the organisation pays for the inconsistency later. Writing down which decisions need wider consultation, and making it easy to record them, is covered under decisions and trade-offs and, in depth, in Chapter 4's treatment of Architecture Decision Records.

Worked example

Worked example: classifying decisions for a ride-hailing app

A ride-hailing start-up lists five pending decisions. The technical lead uses the three signs (cost to reverse, scope, effect on key qualities) to decide which need a written record and wider review.

1. Store trip locations in a time-series databaseReverse: high (data migration). Scope: trips, billing, analytics. Quality: performance of live tracking. Verdict: architectural; write it up and review with data and operations staff.
2. Use a particular HTTP client library in the pricing serviceReverse: low. Scope: one service. Quality: none significant. Verdict: design; the pricing team decides.
3. Calculate fares on the server, never on the phoneReverse: medium. Scope: apps and back end. Quality: security and integrity of pricing. Verdict: architectural; it is a governing principle.
4. Represent money as integer minor units (pence, cents) everywhereReverse: very high once data and partner APIs use it. Scope: every service. Quality: correctness. Verdict: architectural despite being low-level.
5. Use dark mode colours in the driver appReverse: trivial. Scope: one screen set. Verdict: design.

Two of the three architectural decisions (3 and 4) are not about boxes and arrows at all; they are principles and conventions. Level of abstraction alone would have misclassified them.

Decision 4 is the kind most often missed: it looks like a coding detail but becomes very expensive to change once other systems depend on it.

Questions people ask

Is choosing a programming language an architectural decision?

Often, yes. It affects hiring, available libraries, performance characteristics, and how easily code can be shared between components. In a system of many independent services, the language of one small service may be a local choice; the default language for the whole organisation is architectural.

Is a database schema architecture or design?

It depends on who uses it. A table used only inside one service, behind its own API, is design. A schema read directly by several services, reports and partner exports is architectural, because every change must be coordinated across all of them. Many teams make schemas private to one service precisely to move them back into design.

Does agile development mean there is no architecture?

No. Every system has an architecture; agile approaches change when and how it is decided, favouring small, reversible steps and deferring irreversible decisions until enough is known. Section 1.8 covers this.

Who decides whether a decision is significant?

Usually the team and its architect or technical lead together, using agreed criteria such as the signs in this section. Writing those criteria down avoids two failure modes: debating every choice, and discovering after the fact that a team made a system-wide decision alone.

How professionals apply the distinction

Experienced teams turn the continuum into a lightweight routine. They agree a short list of the kinds of decision that need a written record and wider consultation, for example anything that changes a public API, introduces a new data store or technology, crosses team boundaries, or affects a stated quality goal. Everything else is decided by the people doing the work, through normal code review. They revisit the list when something slips through or when reviews feel like bureaucracy.

They also look actively for ways to shrink the set of architectural decisions, because every decision that becomes cheap to reverse is one less that needs to be right first time. Hiding a vendor behind an interface, making a database private to one service, using feature flags for risky behaviour and deploying in small increments all move decisions from the architectural end of the continuum towards the design end.

Check your understanding

Why can a choice about the format of an identifier be architectural?

Because once many services, databases and external partners rely on it, changing it requires coordinated work across all of them, so its cost of change and scope are high.

What is the difference between enterprise and solution architecture?

Enterprise architecture covers the whole organisation's capabilities, information, applications and technology; solution architecture addresses one business problem that usually spans several systems and teams.

How can an architect move a decision from architecture towards design?

By making it cheaper to reverse, for example hiding a technology behind an interface so it can be replaced locally.

Next · 1.3Why it mattersArchitecture decides a system's qualities, the cost and speed of every future change, its risks and how teams can work. Real cases from Knight Capital, HealthCare.gov and Prime Video show why.Continue →

Sources and further reading

Have a question about this section? ArchitectBot, the course’s AI study assistant, answers from the course first.

Ask: “How do I decide which of my team's decisions need an architecture review and which the developers can just make?”