Skip to content

What is software architecture?

Concept · Chapter 1

  • The term “architecture” was borrowed from the construction industry, back when Waterfall demanded large up-front designs before any code was written — like planning a building before breaking ground.
  • Modern methods favor adaptable software that changes over time, so the analogy is looser now. But architecture still captures the earliest design decisions, which remain the hardest to change later.
  • Definitions vary and are somewhat subjective, yet a shared understanding of a few core concepts is essential before going deeper.

Standard definition — ISO/IEC/IEEE 42010

Section titled “Standard definition — ISO/IEC/IEEE 42010”

A joint ISO + IEEE standard (“systems and software engineering — architecture description”) defines architecture in terms of the fundamental concepts and properties of a system in its environment, embodied in its elements, their relationships, and the principles of its design and evolution.

Key points the standard makes:

  • Architecture is a fundamental part of a software system.
  • A system sits in an environment, and the architecture must account for the environment it operates in.
  • An architecture description documents the architecture and communicates to stakeholders how it meets the system’s needs.
  • Architecture views are derived from that description; each view addresses one or more stakeholder concerns.

What makes up an architecture (SAiP definition)

Section titled “What makes up an architecture (SAiP definition)”

Software Architecture in Practice (2nd ed.) frames architecture as the structure or structures of a system, comprising software elements, the externally visible properties of those elements, and the relationships among them.

  • A system is made of one or more structures; their combination forms the overall architecture.
  • Large projects may have multiple teams, each responsible for a particular structure.
  • Architecture defines and details the structures, their elements, and the relationships between elements.
  • It focuses on the public side of elements (e.g. their public interfaces) and how they interact — not private implementation details.
  • Element behavior need not be exhaustively documented, but you must understand how elements should be designed so they interact correctly.

Architecture is about “the important stuff”

Section titled “Architecture is about “the important stuff””
  • Ralph Johnson: architecture is “about the important stuff. Whatever that is.”
  • It is the set of significant design decisions that shape a system — the structures and components that matter to its quality, longevity, and usefulness.
  • These decisions come early and are costly to reverse, so modern architecture should anticipate change and be designed to adapt (see Evolutionary Architecture).
  • Software Architect’s Handbook (Packt, 2018), Ch.1 “What is software architecture?”, pp. 54-58.