Skip to content

Chapter 13: Architecture as Delivery Infrastructure

Architecture is one of the most consistently misunderstood concepts in engineering programme management. In many organisations it is treated as a phase — something that happens at the beginning of a programme, produces a set of documents and diagrams, and is then handed over to the development teams who get on with the real work. In others it is treated as a role — the architect who attends design reviews, approves technical decisions, and maintains the system diagrams. In others still it is treated as a constraint — a set of standards and patterns that teams must comply with, enforced through governance gates.

None of these treatments is wrong exactly. But all of them are incomplete in a way that matters.

Architecture is not a phase, a role, or a set of compliance requirements. It is the accumulated set of decisions that shape how a system behaves, changes, fails, and evolves over time. It is delivery infrastructure — the underlying structure that determines what is easy, what is hard, what is safe, and what is dangerous, long before any development team writes a line of code or assembles a circuit board.

That framing has a specific implication for engineering leadership: architectural decisions are not primarily technical decisions. They are delivery decisions. They determine how teams must coordinate, where risk accumulates, how quickly changes can be made, and what the programme will cost to evolve over its lifetime. Leadership accountability for architectural quality is not a preference. It is a direct consequence of leadership accountability for system outcomes.


Architecture encodes behaviour

Every significant architectural decision embeds assumptions about how the system will be used, maintained, and evolved. Those assumptions are not always stated explicitly. They are encoded in the choices themselves — in the coupling between components, in the boundaries between subsystems, in the interfaces that define how the parts interact, in the dependencies that constrain what can change independently and what must change together.

These embedded assumptions shape the behaviour of the delivery organisation in ways that are often invisible until they cause problems.

A tightly coupled architecture forces coordination. Teams that own different parts of a tightly coupled system cannot change their part without understanding and potentially affecting the parts it depends on. They must synchronise with each other. Their lead times are extended by the need to coordinate. Their autonomy is constrained not by governance decisions but by the technical structure of what they are building.

A poorly defined interface creates hidden contracts. When the boundary between two components is not explicitly specified, both teams develop implicit expectations about how the interface will behave. Those expectations differ. The difference is invisible until the two components are integrated — at which point the assumptions encoded on each side collide, and the cost of resolving the collision falls on the integration phase rather than on the design phase where it should have been addressed.

An architecture that concentrates risk amplifies failure. When failure in one component can propagate to many others, the cost of defects and incidents is multiplied by the connectivity of the system. An architecture that isolates failure — that bounds the impact of any single failure to the component in which it occurs — is not just technically cleaner. It is commercially and operationally less expensive to operate and maintain over time.

These are not abstract properties. They are the specific conditions that determined the cost of the failures in Chapter 1. The hidden coupling between the firmware and the ambiguous hardware-software interface meant that six weeks of development work was invalidated when the ambiguity was resolved. The architectural dependency on the unvalidated third-party component meant that the redesign required when the component proved unsuitable affected elements of the system that had already been completed and tested. The architecture encoded assumptions that had not been validated. The cost of those unvalidated assumptions was paid at integration.


Architecture and flow

Chapter 12 established that flow — the smooth progression of value through the entire system — is the primary indicator of programme health. Architecture is one of the primary determinants of flow. It shapes the dependencies, coupling, and integration points that determine how easily value can progress from intent to outcome.

Architectures that support flow share common properties. Ownership boundaries are clear — each team knows what it owns and what it does not. Interfaces between components are explicit and stable — they can be relied upon by both sides without requiring constant coordination to maintain. Coupling is minimal — changes in one part of the system do not cascade unpredictably into others. Integration can happen early and frequently, because the architecture has been designed to make it safe.

Architectures that impede flow share different properties. Dependencies are hidden — not documented, not acknowledged, discovered when one team’s change breaks another’s implementation. Interfaces are implicit — understood informally by the people who built them, not specified formally in a way that can be relied upon by people who did not. Coupling is pervasive — changes in one area propagate unpredictably to others, making every change an exercise in archaeological investigation. Integration is deferred — because the architecture makes early integration expensive rather than cheap.

When architecture constrains flow, no amount of delivery process optimisation compensates. Teams that appear to be moving slowly may simply be navigating an architecture that makes progress expensive. The diagnosis that the team needs better processes, or more resource, or tighter management misses the cause entirely. The cause is structural. The response must be structural too.


Architecture as risk distribution

Every architectural decision is a risk distribution decision — a choice about where risk will reside in the system, when it will become visible, and how expensive it will be to address.

Tightly coupled architectures concentrate risk. A change in one area can affect many others in ways that are not immediately apparent, making testing expensive and incomplete, and producing the integration failures that surface late and are difficult to diagnose. Architectures that isolate concerns distribute risk. Changes are localised. Failures are contained. Testing can be targeted to the specific area of change rather than requiring system-wide regression.

The decisions made early in a programme’s architecture are the highest-leverage risk decisions the programme makes. An architectural choice that places a system’s highest-uncertainty element behind a well-defined interface buys the programme significant optionality — the ability to change the implementation behind the interface without affecting the rest of the system. An architectural choice that allows a high-uncertainty element to become deeply embedded in the system’s core trades that optionality for apparent short-term simplicity, and pays for it when the uncertainty resolves as a problem rather than a validation.

This is why Firmitas treats architecture as a risk management activity at least as much as a technical one. The relevant question when evaluating an architectural decision is not only whether it is technically elegant. It is: where does this decision push risk? When will we discover whether that risk has materialised? How expensive will recovery be at the point of discovery?

An architecture that delays risk discovery creates false confidence while accumulating actual cost. The programme appears to be progressing because tasks are being completed. The risk is not visible because the architectural decisions that embedded it have not yet been tested. When the integration phase arrives and the embedded risk surfaces, the discovery is experienced as a failure of execution rather than a consequence of an architectural choice made months earlier.


Evolutionary architecture

The false dichotomy between rigorous upfront design and uncontrolled emergent architecture is one of the most persistent sources of architectural failure in engineering programmes. The rigid upfront design camp produces architectures that are theoretically complete but practically disconnected from the realities that emerge as the programme develops — realities about integration complexity, about performance characteristics, about operational requirements that were not fully understood at design time. The emergent architecture camp produces systems that accumulate structural debt as local decisions pile up without reference to a coherent whole, until the resulting architecture is too entangled to evolve safely.

Firmitas rejects both extremes in favour of evolutionary architecture — architectures that are intentional but adaptable, that establish coherent structure early while preserving the ability to revise that structure as understanding improves.

Evolutionary architecture requires two things that are often in tension. The first is early architectural investment — enough upfront thinking to establish the foundational decisions that will shape the programme’s delivery and evolution. Ownership boundaries. Interface definitions. Coupling management. Risk distribution. These decisions are too important to be left to emerge from local choices made under delivery pressure. They need to be made deliberately, at the right time, with the right people in the room.

The second is continuous architectural evolution — the discipline to revisit architectural decisions when the evidence suggests they need revising, rather than treating them as permanent commitments that cannot be changed. An architectural decision that made sense under the assumptions that existed at month one may not make sense under the understanding that exists at month six. A programme that cannot revise its architecture as it learns is a programme that will carry the cost of its early assumptions to completion and beyond.

The tension between these two requirements is managed through the governance of architectural decisions — specifically, through Architecture Decision Records that make the rationale for decisions visible, the assumptions they rest on explicit, and the conditions under which they should be revisited clear.


Architecture Decision Records

Architectural decisions carry long-term consequences. When the rationale behind a decision is lost — when future teams know what was decided but not why, or what alternatives were considered, or what trade-offs were accepted — the decision becomes an invisible constraint. It cannot be challenged because its reasoning cannot be reconstructed. It cannot be evolved because the understanding that would guide evolution has been lost. It can only be worked around, at accumulating cost, until the workarounds become the architecture.

Architecture Decision Records exist to prevent this. An ADR is a lightweight, structured record of a significant architectural decision — written at the time the decision is made, preserved in version control alongside the code and documentation it relates to, and accessible to future teams who need to understand the system they have inherited.

An ADR answers five questions. What decision was made? Why was it made — what context, what constraints, what goals drove the decision? What alternatives were considered, and why were they not chosen? What trade-offs were accepted — what does this decision make easier and what does it make harder? What are the consequences of the decision — what future choices does it constrain, what risks does it introduce, under what conditions should it be revisited?

The value of an ADR is not primarily as a documentation artefact. It is as an organisational memory mechanism. The engineer who joins the programme in month twelve and encounters an architectural constraint that seems arbitrary has access to the reasoning behind it. The programme board that is evaluating a proposed architectural change can understand what the original decision was protecting against and whether those concerns still apply. The team that is maintaining the system five years after the original delivery can understand why it was built the way it was, and can make informed decisions about how to evolve it.

ADRs are not heavy. They do not require architectural review boards or extensive approval processes. They require the discipline to write down the reasoning at the time it is freshest — at the moment of decision — rather than attempting to reconstruct it later from code and memory. The cost of writing an ADR is minutes. The cost of not having one is paid over years.


Living design

Architectural documentation that is produced upfront and never updated is not documentation. It is archaeology. The system as it was designed and the system as it was built diverge almost immediately, and by the time the programme is operating in production, the upfront documentation typically describes a system that no longer exists.

The alternative is not to abandon documentation. It is to treat documentation as a living system that evolves alongside the code and hardware it describes — version-controlled, reviewed through the same mechanisms as other engineering artefacts, updated when decisions change, accurate enough to be useful rather than comprehensive enough to be impressive.

Living design in the Firmitas sense includes several types of artefact. Architecture Decision Records capturing the reasoning behind significant decisions. C4 diagrams at the appropriate level of abstraction — context, containers, components — showing the structural shape of the system and the boundaries between its parts. Interface Control Documents defining the contracts between components and subsystems, versioned and maintained as the interfaces evolve. Deployment and operational views showing how the system runs in its real environment, not just how it was designed.

The key property of living design artefacts is that they are maintained where the work happens — in the same repositories as the code they describe, reviewed by the same people who review the code, updated as part of the same workflow rather than as a separate documentation exercise that always gets deferred. If a design artefact cannot be updated with a pull request, it will decay. The coupling between architectural design and engineering practice is not optional. It is what makes the design useful rather than historical.


Architecture across disciplines

In programmes that span multiple engineering disciplines — hardware, mechanical, firmware, software — architecture is not a single-discipline concern. The architectural boundaries between disciplines are the highest-risk interfaces in the programme, because they are the points at which different design assumptions, different development cadences, and different change management approaches must be reconciled.

The hardware-software interface in Chapter 1 was an architectural boundary. The failure at that boundary — the ambiguities in the specification that produced six weeks of firmware rework — was an architectural failure as much as a requirements failure. The interface had not been defined to the level of precision required to support independent development on both sides. The assumptions embedded in the firmware development diverged from the assumptions embedded in the hardware design. The divergence was invisible until integration.

Managing architectural boundaries across disciplines requires explicit interface definitions — Interface Control Documents that specify, with sufficient precision, what each side of the boundary provides and depends on, and how changes on one side will be communicated to the other. It requires cross-discipline involvement in architectural decisions — hardware engineers in firmware architecture reviews, systems engineers spanning the boundaries between software and hardware, integration engineers involved from the earliest design discussions. And it requires early integration — the discipline to bring components together at the architectural boundaries earlier than feels necessary, when the cost of discovering problems is still manageable, rather than later when every identified problem is a programme-threatening crisis.


Architecture as a leadership responsibility

The architectural decisions that most affect programme outcomes are made early, when the scope is least well understood, when the people making the decisions have the least information about the constraints that will matter, and when the temptation to defer hard decisions in favour of apparent progress is highest.

These are precisely the conditions under which leadership stewardship matters most. Not because leaders should be making architectural decisions themselves — in most programmes, they should not — but because leaders are accountable for ensuring that the conditions for good architectural decision-making exist.

That means ensuring that the people making architectural decisions have the information they need — customer requirements, operational constraints, regulatory obligations, performance characteristics, integration dependencies. It means protecting the time for proper architectural investigation rather than forcing architectural decisions under schedule pressure. It means creating the governance mechanisms — ADRs, design reviews, interface control processes — that make architectural decisions visible and accountable rather than implicit and untraceable. And it means resisting the organisational pressure to treat architecture as a phase that can be completed and closed rather than as a continuous activity that must evolve with the programme.

The programme board in Chapter 1 that confirmed the delivery date without understanding the architectural risk embedded in the unvalidated third-party component dependency was exercising leadership on the wrong level of abstraction. The commercial decision was made. The architectural consequence was not considered. The cost of that omission appeared six months later as a programme-threatening redesign.

Architecture is not someone else’s problem. In the Firmitas sense, it is everyone’s problem — but specifically, it is the problem of whoever is accountable for the programme’s outcomes. Because the architecture determines the cost of the programme’s problems more than any other single factor. And the cost of architectural problems, when they arrive, is always substantially higher than the cost of preventing them would have been.


What architecture looks like when it is done well

The contrast between the architecture that produced Chapter 1’s failures and one designed with delivery in mind is instructive.

An architecture designed for delivery would have placed the hardware-software interface ambiguity at the centre of the early programme work rather than treating it as a background risk. The interface would have been specified explicitly — in an Interface Control Document, reviewed by both the firmware and hardware teams, confirmed with the client — before significant development began on either side. The ambiguities would have surfaced during specification, when they cost hours to resolve, rather than during development, when they cost weeks.

The third-party component dependency would have been treated as an architectural risk from day one — a load-bearing element of the architecture that required validation before the architecture was built around it. A small integration spike — running the component against a representative subset of the programme’s requirements — would have been scheduled as an early programme activity, producing the validation evidence that the architecture needed before committing to the component. If the validation revealed problems, the architecture would have been revised at the point of minimum cost.

The integration testing would have been designed into the architecture — continuous integration across discipline boundaries, with early and frequent integration checkpoints rather than a single late integration phase. Problems at the architectural boundaries would have been discovered in days rather than months, when the cost of resolution was manageable rather than programme-threatening.

None of this is architectural sophistication. It is architectural discipline — the application of systematic thinking to the decisions that matter most, at the time when they can still be made cheaply, with the information and the governance support to make them well.

That is what architecture as delivery infrastructure means in practice.