Home About Subscribe RSS

Software Complexity

Tackling Complexity in Software Engineering

Why Complexity Matters

By Andrew Rousseau. Published on March 4, 2023.

Why should we care about complexity? The short answer is that we pay a heavy price in software engineering for the complexity we allow into our systems and applications. What do we mean by complexity? Well, that’s what we’ll explore here.

Software engineers spend their days doing a lot of different activities. They attend meetings, review pull requests, debug code, and a multitude of other things. Unless they are working on a greenfield project, they are probably adding or modifying very little code. This is to say that engineers spend far more time navigating, reading, and comprehending code than they do writing and modifying code. Don’t believe me? Let’s see what the research says.

Software Complexity Maintenance Graph

In the book Principles of Software Engineering and Design back in 1979 the authors state that 67% of engineering time is spent on maintenance. This is specifically referring to the hidden maintenance costs that we don’t always anticipate early on in projects. All too often we trade early execution for higher maintenance cost in the long run.

Forty years later in 2019 The New Stack did a survey of 400 engineers and determined that 68% of their time was spent on managing code, doing code maintenance, testing, and responding to security issues. They only spent 32% of their time on writing new code or improving existing code. A figure quite similar to the 1979 one.

Software Complexity Pie Chart

So let’s take that 32-33% of time spent on writing code and see what engineers are actually doing during that time. In a 2017 study it was found that navigation and comprehension combined accounts for 82% of the time engineers spend working on code. [1] Take a moment and let that sink in.

In the fast paced world of software development we often have competing priorities vying for our attention. We try to push out features and meet the needs of our customers. When looking for ways to optimize and make our work more efficient it appears this is an area ripe for improvement.

If we make our system architecture and our application code easier to navigate and comprehend we can potentially deliver more value and make things easier to maintain over time. To find out how to accomplish that, I’ll dive deeper in future posts.

[1] Xia, Bao, Lo, Xing, Hassan, & Li. Measuring Program Comprehension: A Large-Scale Field Study with Professionals in IEEE Transactions on Software Engineering 2017 July, Volume PP, Issue 99, Pages 1-26.

Next Post: Detail Complexity