Why Architecture Matters — Part 2

Using software architecture to tame development backlogs

Dick Dowdell
Nerd For Tech

--

Let’s take a deeper look into exactly why and how software architecture can help fulfill the promise of Agile and start to tame development backlogs.

“The goal of software architecture is to minimize the human resources required to build and maintain the required system.”

— Robert C. Martin, Clean Architecture

The Iron Law of Project Management

Most software projects (and in fact, most projects in general) run over budget, behind schedule, and fail to deliver all their planned benefits. Those of us in software development would probably not be surprised by that fact. What might surprise us is just how bad it really is.

Fewer than 1% of projects successfully implement all their planned benefits on time and on budget.

Courtesy of How Big Things Get Done, Flyvbjerg & Gardner

The Iron Law expresses probabilities derived from the analysis of 16,000 projects — of all sizes and kinds — by Professor Bent Flyvbjerg, of the University of Oxford. The observed patterns are almost preternaturally consistent — and unfortunately, software development projects, as a group, performed somewhat worse than the observed averages.

Software development is a process of discovery, experimentation, and learning, that — unlike manufacturing and construction — requires a highly iterative process of trial and adjustment. It requires agility — which, in turn, requires architectural models that minimize the cost of iteration.

Technical Debt and Development Agility

Technical debt describes the consequences of software development actions that deliberately or inadvertently prioritize project constraints, such as delivery deadlines, over more technical design and implementation considerations.

Technical debt is similar to a credit card. It accrues interest (at a high rate) until it is payed off. It should be incurred wisely so we don’t find ourselves badly overextended and floundering in debt.

Technical Debt Quadrant — courtesy of Martin Fowler

Technical debt and its interest penalties impact the time and cost of implementing every application change and feature. It builds up on our boots like mud, slowing us down more and more until we clean it off — and stopping to clean it off gets harder and harder when we are being chased by deadlines.

Out of control technical debt is the enemy of development agility and a major factor in runaway development backlogs.

Software Architecture’s Primary Focus

Contrary to the popular assumption, architecture is more about economics than about technology and functionality. A new software system that meets functional and performance requirements can be built without much concern about architecture.

It is when we try to extend or modify a system that we have to pay for that lack of investment in architecture and its resulting technical debt. Pay for architecture up front — or pay more, with interest, in the future.

Taking the time to apply sound architectural principles — to the design, implementation, and refactoring of software — is one of the surest ways to minimize inadvertent technical debt.

The Influence of Psychology and Politics

All projects are impacted by our own human psychology — and projects with more than two people are impacted by the dynamics of power and organizational politics.

“One driver is psychology. In any big project — meaning a project that is considered big, complex, ambitious, and risky by those in charge — people think, make judgments, and make decisions. And where there are thinking, judgment, and decisions, psychology is at play; for instance, in the guise of optimism.

Another driver is power. In any big project people and organizations compete for resources and jockey for position.”

— Flyvbjerg & Gardner, How Big Things Get Done

Architectural patterns that promote component models with loose coupling, high cohesion, and information hiding — and design philosophies like domain-driven design — can give us the tools we need to mitigate the project risks that flow from human psychology and organizational politics.

The Takeaway

“The central question — in how to improve the state of the software art — centers, as it always has, on people.”

— Fred Brooks, No Silver Bullet

The thoughtful application of sound architectural principles to software development is for the benefit of the people who work on the software. Its purpose is to minimize the human resources required to build and maintain the software by:

  1. Making the software components easier to understand and change,
  2. Insulating software components from changes to other components,
  3. Minimizing the potential interference among teams working on different parts of the system and,
  4. Simplifying delivery of new and updated software components.

Thank you for your time!

Composable Services dives into the architectural patterns that can help to make software systems more Agile, in order to minimize inadvertent technical debt and reduce software backlogs. If you missed it, here’s a link to Why Architecture Matters — Part 1.

How Big Things Get Done: The Surprising Factors That Determine the Fate of Every Project, from Home Renovations to Space Exploration and Everything In Between, is a must-read for its insights into why projects succeed and why they fail.

--

--

Dick Dowdell
Nerd For Tech

A former US Army officer with a wonderful wife and family, I’m a software architect and engineer who has been building software systems for 50 years.