Skip to content

Software Architecture

The architecture of an application or a software solution is often viewed as the overall structure of the application, the major modules of the system and the dependencies between them, and the major technical decisions that drive the development of the project.

So why invest time in architecture at all?

Ultimately, a software project exists to meet the needs of the business, whether that’s a large enterprise, a startup or somewhere in between, by delivering a system that supports its goals and adds value.

Architecting a solution also involves planning for and addressing non-functional requirements to ensure the solution is reliable, secure, performant and cost-effective.

Understandably, project stakeholders are often focused on the current business requirements and short-term goals. However, applications and systems often have a lifespan much longer than originally anticipated, and far longer than any single sprint.

Requirements will also change over the lifetime of the project (and beyond), often in ways the original team couldn’t have anticipated. The team changes too, and the developers who maintain or extend the application will often join long after it was first built.

The solution architecture or system design must support future change. Robert C. Martin makes the case well in Clean Architecture. He asks a simple question: which matters more, that a system works, or that it can be changed? Ask business managers and they will usually say that working matters more, and developers tend to go along with that. It’s a natural position for anyone to take, but Martin argues it’s the wrong one:

That argument resonated with me. I believe he’s right, although it can be taken too far: a system that is endlessly adaptable but never delivers anything isn’t valuable either. The point is that the ability to change is what keeps working software working, so it deserves protecting even when nobody is asking for it.

Ultimately, the architect’s job is to support the development team, now and in the future, so that the application meets the needs of the business and can adapt as requirements change.

An architecture only helps if people understand it. With stakeholders, that means explaining the direction, the roadmap and the trade-offs in terms of outcomes and risk (see Ways of Working). With the development team, it means making the architecture visible in the code itself and in lightweight diagrams such as C4, rather than in heavy documentation that goes stale.

If you only read one page, make it Architecture Principles: the six principles I come back to on every project, and the trade-offs behind each. From there:

The styles pages (system and application) explain how I choose between the common styles. The patterns pages (system and application) cover the patterns I reach for, with notes on what to watch out for with each.