The Slowdown Effect in Software Development

  • April 1, 2019

Unraveling the mystery of what really slows software development down.

Many factors can contribute to slowing down software development teams. Common ones include waiting on dependencies, under-specified feature requests, poor communication, etc. All of these examples are relatively well understood by or at least seem explainable to management. Today I want to discuss technical roadblocks that are harder to explain but can be even more responsible for slowing down your software development team.

Recall the Aesop’s Fable “The Tortoise and the Hare,” which you might have heard in childhood. For those unfamiliar, a tortoise and a hare are in a race. The tortoise makes slower but steady progress towards the finish line. The hare, on the other hand, makes fast but inconsistent progress towards the finish. Seemingly miraculously, the tortoise ends up winning the race.

The software development process is very comparable to this fable. The hare developer is focused on completing work on new features as quickly as possible and finish ahead in the current sprint. This developer might believe that this focus on immediate speed will win him or her greater approval from management. The tortoise developer, on the other hand, will not allow him or herself to take shortcuts to prematurely classify a task as done. For this developer, the focus is on the long-term speed and the success of the project. In a race that’s more than a few sprints long, the tortoise developer will almost always finish faster than their hare counterpart.

There is a common misunderstanding about what activities account for the majority of developers’ time. Most people believe that a software developer spends most of his or her time writing new code for new features. In reality, this activity typically claims the least time on a project.

The vast majority of a developer’s time is spent in debugging (or answering why doesn’t this code do what I expect?) and in answering where questions. Examples include “where is the code responsible for this behavior?” “where should I put this new code?” and “where else in the codebase might I need to make changes?” In order to drastically speed up development, focus on making the answers to these why and where questions available as quickly as possible.

The hare developer ultimately finishes last because he or she makes decisions that make these questions harder to answer in the future. This developer likes to appear to produce code quickly. However, he or she ends up spending most of his or her time trying to answer what and why questions in an increasingly messy codebase. As the complexity of this project grows, the time needed to answer these questions grows exponentially.

In contrast, the tortoise developer spends time today making their job easier tomorrow. This developer creates descriptive names for everything in the codebase. This developer writes automated tests to verify that their code works as expected both today and after six months of changes. This developer spends time in the beginning to create a clear plan for what code belongs in which part of the application. This developer may take longer at the beginning of a project, but ultimately, this tortoise developer will run laps around the hare developer. The tortoise developer is wise to make the answers to the questions of why and where more obvious in the codebase.