What Is a System Architecture? More Than a Block Diagram
Ask ten engineers to show you their system architecture and nine of them will open a PowerPoint with boxes and arrows. The diagram might be accurate. It might even be useful. But it is not the architecture — it is a projection of the architecture onto a two-dimensional surface, and a lossy one at that.
System architecture is the set of structural decisions that define how a system is organized to fulfill its requirements. That includes the major functional elements of the system, the interfaces between them, the allocation of functions to hardware or software or human operators, and — critically — the rationale behind choices that constrain everything designed after them. The diagram is one view of those decisions. The decisions themselves are the architecture.
This distinction matters because most systems engineering failures don’t happen at the drawing stage. They happen when an architectural decision made early — and encoded only in a diagram nobody updates — contradicts a requirement added later, or conflicts with a design choice made by a subsystem team that never saw the original intent. Understanding architecture as a set of structured, traceable decisions is the first step toward building systems that don’t collapse under their own complexity.
The Formal Definition
The ISO/IEC/IEEE 42010 standard defines system architecture as “fundamental concepts or properties of a system in its environment embodied in its elements, relationships, and in the principles of its design and evolution.” That language is precise but dense. Unpacked, it says three things:
Elements and relationships. Architecture identifies the major components of a system and defines how they connect. Not every component — that is the domain of detailed design — but the ones whose boundaries matter for system behavior.
Principles of design. Architecture encodes the rules that guide design decisions below it. If the architecture mandates a publish-subscribe communication model between subsystems, that principle governs how every subsystem team designs their interfaces, whether or not they were in the room when the decision was made.
Principles of evolution. A good architecture anticipates change. It identifies what is stable (the major partitions, the key interfaces) and what is variable (the internal implementation of each element), so the system can absorb change in the variable parts without destabilizing the stable ones.
These three properties are why architecture cannot be fully expressed in a single block diagram. A diagram can show elements and their connections. It cannot easily show the principles that govern design choices, or the reasoning behind why the system is partitioned the way it is, or what constraints propagate across subsystem boundaries.
Architecture, ConOps, Requirements, and Design: A Clear Boundary
One of the persistent sources of confusion in systems engineering is the relationship between these four artifacts. They are not the same thing. They are not interchangeable. And they do not form a simple linear sequence.
ConOps (Concept of Operations) defines how the system will be used — the operational scenarios, the user roles, the environment, the mission sequences. ConOps is written from the operator’s perspective, not the engineer’s. It describes what the system does in the world, not how it is built.
ConOps is architecture’s primary input. The operational scenarios a system must support constrain the architectural patterns that are viable. A system that must operate autonomously in a denied communications environment has fundamentally different architectural constraints than one with a persistent cloud connection. Before you can decide how to partition a system, you need to know what it will be asked to do.
Requirements define what the system must do, at what performance levels, within what constraints. Requirements are the formal expression of stakeholder needs. They do not specify structure — a requirement that says “the system shall detect targets at 10 km range with 95% probability” does not tell you whether that detection function lives in hardware, software, or some combination. That allocation is an architectural decision.
Architecture answers: how is the system organized to meet its requirements? It defines functional decomposition (what are the major functions and how do they group?), interface definitions (what information crosses each boundary and in what form?), and allocation (which functions are assigned to which physical or logical elements?). Architecture is the bridge between “what” and “how.”
Detailed design answers: how exactly does each architectural element work internally? This is where individual components, algorithms, data structures, and circuits live. Detailed design is constrained by architecture. It does not define it.
The boundary between architecture and detailed design is not always sharp, and reasonable engineers disagree at the margins. A practical heuristic: if changing a decision would require renegotiating interfaces with other subsystems or reallocating functions across hardware and software, it is an architectural decision. If changing it affects only the internals of one element without touching anything outside its boundary, it is a detailed design decision.
The Core Concepts: What Architecture Actually Contains
Functional Decomposition
Every system performs a set of functions. Architecture organizes those functions into groups — subsystems, segments, assemblies — and establishes the boundaries between them. The decomposition is not arbitrary. It reflects decisions about cohesion (functions that share data or operate in sequence belong together), coupling (functions that cross boundaries impose interface costs, so minimize unnecessary crossings), and change isolation (functions likely to change independently should be separated).
A poorly chosen decomposition creates an architecture where every change ripples through multiple subsystems. A well-chosen decomposition localizes change. This is not a cosmetic property — it directly affects development cost, integration risk, and the ability to reuse elements across programs.
Interface Definitions
Interfaces are where systems fail. Most integration problems are not caused by individual components malfunctioning — they are caused by components that work correctly in isolation but disagree about the format, timing, rate, or semantics of the data they exchange.
Architecture-level interface definitions specify what crosses each boundary, not how it is implemented. An interface control document (ICD) that specifies only data formats without capturing the behavioral contract — the sequencing constraints, the error handling protocols, the timing dependencies — is incomplete. Architecture should capture the full contract at each major interface, even if the internal implementations on both sides are left to detailed design.
Hardware/Software Allocation
One of the most consequential architectural decisions is which functions run in hardware, which run in software, and which are performed by human operators. This allocation drives cost, schedule, performance, and risk simultaneously and in competing directions.
Software is flexible and cheap to modify. Hardware is fast and reliable but expensive to change after fabrication. Human operators add adaptability but introduce variability and training costs. The allocation between them is not a technical optimization problem alone — it is a systems engineering decision that must be grounded in requirements, risk tolerance, lifecycle cost targets, and operational constraints.
A mature architecture makes this allocation explicit for every major function and documents the rationale. When requirements change — and they will — the allocation decision either holds or it needs to be revisited with full visibility into what else it affects.
Design Rationale
This is the most underrepresented component of most architectures and the one that causes the most damage when it is missing.
Every architectural decision eliminates alternatives. The decision to use a federated architecture instead of a centralized one, to allocate signal processing to an FPGA instead of a general-purpose processor, to define a specific data bus protocol — each of these choices rules out other options and encodes assumptions about requirements, constraints, and tradeoffs that were true at the time the decision was made.
When the rationale is not captured, the next engineer to look at the architecture cannot tell whether a choice was deliberate or accidental, whether it is still valid given changed requirements, or whether it is safe to change. The result is either fragile conservatism (never change anything because you don’t know what it touches) or inadvertent destruction (change something that looked arbitrary but wasn’t).
Architecture as a Living Artifact
The practical failure mode for most programs is not that the architecture is wrong at the start. It is that the architecture decays. Requirements change. Design decisions reveal that certain architectural assumptions were wrong. Subsystem teams make local choices that are individually reasonable but collectively inconsistent. And nobody has a complete, current picture of what the architecture actually is.
The reason this happens is structural: most programs represent their architecture in static documents and slide decks. A diagram created in 2023 does not automatically update when a requirement changes in 2025. A Word document capturing interface definitions does not flag a conflict when a subsystem ICD is revised. The architecture and the reality of the system drift apart, and teams are left integrating against an architecture that no longer accurately describes what they are building.
This is the problem that graph-based, model-connected representations of architecture are designed to solve. Platforms like Flow Engineering treat architecture not as a document to be filed but as a structured artifact — a living model in which functional elements, interfaces, allocations, and requirements are connected nodes in a graph rather than text in a document.
In that model, when a requirement changes, the architectural elements allocated to fulfill it are directly linked. When an interface definition is updated, the functions on both sides of that interface are visible. When a design decision at the subsystem level conflicts with an architectural constraint, the conflict is surfaced through the model rather than discovered at integration. Flow Engineering builds this kind of connected architecture model as a first-class artifact, not a downstream report generated from disconnected sources.
This matters for programs of any scale, but it becomes critical on complex systems where no single person can hold the full architecture in their head and teams are making decisions in parallel across organizational boundaries. A connected model gives every team member a shared, current, authoritative view of the architectural decisions that constrain their work.
The same platform also supports maintaining the rationale behind architectural decisions — not just what was decided, but why, and what alternatives were considered. When a requirement changes three years after a decision was made, the team can evaluate whether the decision still holds rather than rediscovering the original reasoning from scratch or abandoning it unknowingly.
Practical Starting Points
If you are beginning or inheriting a system architecture effort, three practices make the biggest difference in practice:
Separate architecture concerns from requirements concerns. Keep requirement nodes and architecture nodes distinct in whatever tool you use. Requirements define what; architecture defines how the system is organized to deliver what. Conflating them creates documents that answer neither question clearly.
Define interfaces as behavioral contracts, not just data schemas. For every major interface, capture the timing constraints, the error handling obligations, and the sequencing assumptions, not only the data formats. The failures live in the unstated behavioral assumptions.
Capture rationale at every major decision point. For every significant architectural choice — decomposition boundaries, allocations, interface protocols, key design patterns — write down the alternatives that were considered and the criteria that drove the selection. This documentation has a higher return on investment than almost any other systems engineering activity.
The block diagram has its place. It communicates structure quickly and is often the right artifact for a review or a briefing. But the diagram is a projection. The architecture is the full set of structured decisions behind it — and those decisions need to live somewhere that keeps them connected, current, and traceable to the requirements they exist to fulfill.