Leer en español · Lire en français · Auf Deutsch lesen
Section 1.1 of 1.8 · Beginner · 18 min read
What software architecture is: the standard definitions and what they share
Video lesson
5 min · narrated, with captionsListen only (audio)
Read the transcript
Ask ten experienced engineers what software architecture is, and you'll hear ten different answers. So in this lesson we pin the word down, because a good definition tells you what to look at and what to protect.
Start with a hospital building. Its architecture isn't the blueprint pinned on the wall. It's how the building is actually arranged: where the wards are, and which corridors connect them. Where the lifts go, and which doors must stay locked. And the rules everyone follows when they extend it. Some choices, like where the lifts are, would cost a fortune to change. The curtains would not. Software architecture is the same idea for a software system.
The definitions come from three places. The international standard for describing architectures calls it the fundamental properties of something in its environment, plus the principles that govern how it is built and how it changes. The Software Engineering Institute, or SEI, gives the most widely taught definition: the structures needed to reason about a system, made of elements, the relations among them, and the properties of both. Practitioners put it more briefly. Ralph Johnson called it the shared understanding of the expert developers. Grady Booch called it the significant design decisions, with significance measured by the cost of change.
Here's what that looks like for a food delivery system. Inside the system boundary are the elements: a mobile app, an order service, an orders database, a courier service and a payment module. The relations show how they connect. The mobile app calls the order service over HTTPS, and the order service queries its database using SQL. Properties are written beside the elements. For example, the order service is stateless and runs as three copies. Outside the boundary sits the environment: customers, couriers, restaurants and the card payment provider. The environment also includes law, budget, the organisation and its teams, and the cloud platform. You can't judge an architecture without them.
A system has several structures at once, of three kinds. Here's one online shop, seen three ways. Module structures show how the code is divided: a checkout package using a catalogue package and shared utilities. They answer: who can change what, and what breaks? Component and connector structures show what runs: a web front end calls a checkout service, which sends a message to a payments queue. They answer runtime questions: how fast, how reliable, how secure? Allocation structures map the software onto things outside it: the container cluster in cloud region A, and the checkout team that owns it. They answer: what does it cost, and who builds and runs it?
Read side by side, the definitions share seven ideas. The first four you've just seen: structures, made of elements, relations and properties. Fifth, decisions: the choices that produced the structures, with their reasons. Without the reasons, people later undo good decisions by accident. Sixth, significance. Only some things are architectural: those that are costly to change, affect many parts, or decide a key quality. And seventh, environment: the users, systems, organisation, laws and budgets around the system, which shape it and are shaped by it.
Let's apply this. A food delivery company asks a new architect to tell them what their architecture is. All they have is one out-of-date diagram. Using the shared ideas as a checklist, the architect lists the elements and relations. The apps call the order service, which writes to one shared database and publishes events that courier matching picks up. Then the properties. The order service is stateless and runs as three copies. Courier matching keeps its state in memory and runs as a single copy. Next, intended against actual. The old diagram shows a separate database per service. In reality, the courier service reads the order tables directly. That surfaces two risks nobody had stated: a single point of failure, and a shared database tying two teams together. Neither was visible in any one service's code. Both are properties of structure, so they count as architecture.
Two lessons follow. First, every system has an architecture, whether or not anyone designed it on purpose. The question is whether it's fit for purpose, understood and deliberately shaped. Second, the architecture isn't the same as its description. A diagram is a work product that expresses it, and it can be incomplete or out of date. And when you're unsure, ask three questions. Would it be expensive to change later? Does it affect several parts or teams? Does it decide an important quality, such as speed or security? If any answer is yes, treat it as architecture.
That's what architecture is. The full section compares the definitions side by side and covers common misconceptions. Next, in Section one point two, we look at where architecture ends and design begins. See you there.
What you need to know
- ISO/IEC/IEEE 42010:2022 defines architecture as the fundamental concepts or properties of an entity in its environment, plus the governing principles for its realisation and evolution.
- Bass, Clements and Kazman define software architecture as the set of structures needed to reason about a system: software elements, the relations among them and the properties of both.
- Practitioner definitions add that architecture is the shared understanding of expert developers (Ralph Johnson) and the significant decisions, where significance is measured by cost of change (Grady Booch).
- The definitions share seven ideas: structures, elements, relations, properties, decisions, significance and environment.
- Systems have three kinds of structure: module structures (code), component-and-connector structures (runtime) and allocation structures (mapping to infrastructure, teams and files).
- Every system has an architecture whether or not it was designed deliberately or written down; an architecture description is a separate work product that expresses it.
Why the word needs defining at all
Ask ten experienced engineers what software architecture is and you will hear ten different answers: the boxes-and-arrows diagram on the wall, the choice of cloud provider, the database schema, the split into services, the rules about which code may call which, or simply "the hard decisions". Each answer captures something real, and each, taken alone, misses something. A course that is going to teach architecture therefore has to start by being precise about what it is talking about.
This matters for practical reasons. If a team thinks architecture means "the diagram", it will stop paying attention once the diagram is drawn, even though the system keeps changing underneath it. If it thinks architecture means "the technology stack", it will argue about frameworks while ignoring how responsibilities are divided and how data flows. A good definition tells you what to look at, what to protect and what to discuss with others.
The definitions below come from an international standard, from the Software Engineering Institute (SEI) at Carnegie Mellon University, and from practitioners. They were written for different purposes, but they agree on more than they disagree, and the points where they agree are the core of the discipline.
The standard definition: ISO/IEC/IEEE 42010:2022
ISO/IEC/IEEE 42010 is the international standard for describing architectures. Its current edition, published in November 2022, replaced the 2011 edition. It defines architecture, in close paraphrase, as the fundamental concepts or properties of an entity in its environment, together with the governing principles for that entity's realisation and evolution and for its related life-cycle processes.
Three features of this definition deserve attention. First, it talks about an entity, not only a software system. The 2022 edition deliberately widened the scope so that the same ideas apply to software, systems of systems, products, product lines and whole enterprises. Second, it places the entity in its environment: you cannot understand an architecture without the users, other systems, organisation, laws and budgets around it. Third, it includes governing principles for how the entity is built and how it changes. Architecture is not only a snapshot of structure; it includes the rules that keep the structure coherent as the system evolves, such as "every service owns its own data" or "the domain code never depends on the web framework".
The standard also draws a sharp line between an architecture and an architecture description. The architecture is the set of fundamental properties the system actually has. The description is a work product (documents, models, diagrams, decision records) that expresses it. ISO/IEC/IEEE 42010 is mainly a standard about descriptions: it says what a good description should contain, such as identified stakeholders, their concerns and views that address those concerns. It does not tell you how to design an architecture. Section 1.5 returns to stakeholders and concerns, and Chapter 4 covers views.
The SEI definition: structures, elements, relations and properties
The most widely taught definition comes from Software Architecture in Practice by Len Bass, Paul Clements and Rick Kazman (4th edition, Addison-Wesley, 2021), whose authors worked at the SEI. In their words, paraphrased: the software architecture of a system is the set of structures needed to reason about the system, and those structures consist of software elements, the relations among them and the properties of both.
Each part of that sentence does work. Structures, plural: a system has many structures at once (its code modules, its running processes, its deployment onto machines) and no single one is "the" architecture. Needed to reason about the system: the test of whether something is architectural is whether you need it to answer important questions, such as "Will this survive peak load?" or "Can two teams work on this independently?". Elements are the parts: modules, services, databases, queues. Relations are how they connect: uses, calls, publishes to, is deployed on. Properties are what makes elements and relations behave as they do: a service is stateless, a call is synchronous with a two-second timeout, a database holds personal data and must stay in the EU.
The phrase about reasoning also explains what is not architecture. The name of a local variable, the internal algorithm of a sorting routine or the layout of a settings screen usually do not help you reason about the system as a whole, so they belong to detailed design rather than to architecture. Section 1.2 examines where that line falls.
Elements, relations, properties and environment
Practitioner definitions: shared understanding, important stuff and decisions
Practitioners have offered shorter definitions that emphasise people and decisions rather than structures. Martin Fowler has popularised two from Ralph Johnson (one of the four authors of the 1994 Design Patterns book). The first is that architecture is the shared understanding that the expert developers have of how the system is designed. The second, from the same discussion, is deliberately open-ended: Architecture is about the important stuff. Whatever that is.
Johnson also suggested that architecture is the set of decisions you wish you could get right early in a project, not because you are more likely to get them right early, but because they are so costly to get wrong.
Grady Booch, one of the creators of the UML, framed it in economic terms: architecture consists of the significant design decisions that shape a system, where significance is measured by the cost of change. That turns an abstract idea into a usable test. Choosing the colour of a button is cheap to reverse. Choosing between a relational database and a document store, or between one deployable unit and forty, is expensive to reverse once data, code and teams have grown around it. Booch also observed that all architecture is design, but not all design is architecture.
These definitions add something the structural ones leave implicit. Architecture lives partly in people's heads; a system whose senior engineers share a clear picture of how it works has a more coherent architecture than one where everyone holds a different picture, even if neither has a diagram. And architecture is shaped by decisions, many of them involving a trade off: choosing one option means giving up the advantages of another. Section 1.6 looks at decisions and trade-offs in detail.
The definitions compared
| Source | Core idea (paraphrased) | What it emphasises | Most useful for |
|---|---|---|---|
| ISO/IEC/IEEE 42010:2022 | Fundamental concepts or properties of an entity in its environment, plus governing principles for its realisation and evolution | Environment, principles, evolution; architecture distinct from its description | Contracts, standards work, describing architectures consistently across an organisation |
| Bass, Clements and Kazman (2021) | The set of structures needed to reason about the system: elements, relations and properties of both | Multiple structures; reasoning about qualities | Analysis and design: asking whether a structure will meet its goals |
| Ralph Johnson, via Martin Fowler | The shared understanding of expert developers; the important stuff, whatever that is | People, communication, judgement about importance | Team practice: keeping a common mental model alive |
| Grady Booch | The significant design decisions that shape a system, with significance measured by cost of change | Decisions and their economics | Deciding where to spend analysis effort |
What the definitions share
Read side by side, the definitions converge on seven ideas, and together these make a working definition for the rest of this course.
Seven shared ideas
- StructuresA system has several structures at once, each showing it from a different angle. No single diagram is the whole architecture.
- ElementsThe parts that make up those structures: modules, components, services, data stores, queues, servers.
- RelationsHow the elements connect and depend on one another: calls, messages, shared data, deployment, ownership.
- PropertiesThe externally visible characteristics of elements and relations, such as being stateless, encrypted, asynchronous or replicated, which together determine the system's quality attributes.
- DecisionsThe choices that produced the structures, with the reasons and rejected alternatives behind them. Without the reasons, people later undo good decisions by accident.
- SignificanceOnly some things are architectural: those that are costly to change, affect many parts, or determine a key quality. Architecture is selective by definition.
- EnvironmentThe system sits among users, other systems, an organisation, laws and budgets. These shape the architecture and are shaped by it.
Three kinds of structure
The SEI's work on documentation, published as Documenting Software Architectures: Views and Beyond (Clements and colleagues, 2nd edition, 2010), groups structures into three kinds, and Software Architecture in Practice uses the same grouping. Knowing the three kinds protects you from the commonest mistake in architecture discussions: talking about one kind of structure while the other person is thinking of another.
Module structures show how the code is divided into units of implementation, such as packages, libraries and namespaces, and how those modules depend on each other. They exist at development time. They answer questions such as: which team can change what without breaking others, and which code can be reused?
Component-and-connector structures show what exists when the system runs: processes, services, clients, databases, and the connectors between them, such as HTTP calls, message queues and event streams. They answer runtime questions: how fast is a request, what happens when one part fails, where is data held?
Allocation structures map software onto things outside the software: onto hardware and cloud infrastructure (deployment), onto teams (work assignment), and onto files and repositories (implementation). They answer questions about cost, operations and organisation: where does it run, who builds it, who is woken up at night when it fails?
One element can appear in all three. A checkout feature is a package in the module structure, a running service in the component-and-connector structure, and a set of containers in a cloud region owned by the checkout team in the allocation structures. The mapping between structures is not always one to one: a single module may be deployed as several services, or several modules may run in one process. That gap is exactly where many surprises hide.
One system, three kinds of structure
Every system has an architecture
Because architecture consists of structures and the properties they actually have, every software system has an architecture, whether or not anyone designed it on purpose and whether or not it is written down. A spreadsheet macro that grew into a business-critical tool has an architecture. So does a startup's codebase written in a hurry by three people. The question is never whether a system has an architecture, but whether that architecture is fit for its purpose, understood by the people who work on it, and deliberately shaped.
This leads to a useful distinction. The intended (or prescriptive) architecture is what the team believes or has decided the structure should be: the diagram on the wiki, the agreed rules. The actual (or descriptive) architecture is what the code and infrastructure really do. The two drift apart over time unless someone keeps them aligned, and that gap is one of the main sources of technical debt, covered in Section 1.7. An undocumented architecture is not absent; it is merely harder to see, reason about and change safely.
Worked example
Worked example: applying the definitions to a food-delivery app
A food-delivery company asks a new architect to "tell us what our architecture is". There is one out-of-date diagram. Using the shared ideas as a checklist, the architect produces a first description in a week.
| Elements | Mobile app, web app for restaurants, order service, courier-matching service, payment module, a shared PostgreSQL database, a message broker, an external card payment provider. |
|---|---|
| Relations | Apps call the order service over HTTPS; the order service writes to the shared database and publishes "order placed" events; courier matching consumes those events; the payment module calls the provider's API. |
| Properties | The order service is stateless and runs as three copies; courier matching keeps state in memory and runs as a single copy; the database holds personal data and card tokens. |
| Environment | Two development teams, a food-safety regulator, data protection law, a fixed cloud budget, restaurants with unreliable tablets. |
| Significant decisions found | One shared database for all services; a single copy of courier matching; events used for courier dispatch but direct calls for payments. |
| Intended vs actual | The old diagram shows separate databases per service. In reality the courier service reads the order tables directly, so the two services cannot be changed independently. |
The exercise surfaces two risks no one had stated: the single copy of courier matching is a single point of failure, and the shared database couples two teams together.
Neither risk was visible in the code of any one service. Both are properties of structures and relations, which is why they count as architecture.
The description took a week because nobody had recorded the decisions or their reasons. Recording them is the subject of Chapter 4.
How professionals use the definitions
In practice, experienced architects rarely recite a definition, but they use each one as a lens. The ISO view reminds them to look outward at the environment and to separate what the system is from what the documents say. The SEI view gives them a vocabulary of structures, elements, relations and properties for analysis, and a test ("do we need this to reason about the system?"). Johnson's view reminds them that a shared mental model across the team is itself an asset to be maintained. Booch's view tells them where to spend their limited time: on the decisions that would be expensive to reverse.
A practical rule of thumb follows. When you are unsure whether something is architectural, ask three questions. Would it be expensive or risky to change later? Does it affect several parts of the system or several teams? Does it determine whether the system meets an important quality goal, such as speed, availability or security? If the answer to any of these is yes, treat it as architecture: decide it deliberately, record the reasons, and make sure the people affected understand it.
Check your understanding
What is the difference between an architecture and an architecture description?
The architecture is the set of fundamental properties and structures the system actually has. The description is a work product, such as diagrams and documents, that expresses it, and it can be incomplete or out of date.
Which kind of structure would you examine to find out which team is woken up when a service fails?
An allocation structure, specifically the work-assignment or ownership mapping of software onto teams.
Using Booch's test, is the choice of logging library architectural?
Usually not, if it is hidden behind a small interface and cheap to swap. It becomes architectural if every module calls it directly, making it expensive to change.
Why does the ISO definition mention the environment?
Because an architecture can only be judged against the users, systems, organisation, laws and budgets around it; the same structure can be good in one environment and poor in another.
Sources and further reading
Have a question about this section? ArchitectBot, the course’s AI study assistant, answers from the course first.
Ask: “My team's only architecture diagram is two years old. How do I work out what our actual architecture is, and which parts of it are significant?”