The most powerful force in the universe
This article is about applying the most powerful force in the universe to software development. I’d like to share how you can make it work to your advantage.
But first things first. Do you actually know about this force? Any idea what this most powerful force actually is? Let’s explain that first.
What is the most powerful force?
If you don’t know about this force, you may be surprised that most people learn about this force in high school. There it is called “compound interest”: it is the fact that a small initial capital in a savings account, combined with a small interest will yield huge results if you only wait long enough. The result is exponential:
The result is exponential because the interest is also provided over previous interest (it is reinvested). The power of this becomes even more clear when compared to linear growth, where the interest is not reinvested.
There is a quote saying “Compound interest is the most powerful force in the universe.” This quote is commonly attributed to Albert Einstein, except that he probably never said this. But I guess it helps attract attention if you can ascribe a quote like this to someone famous…
The key thing that compound interest works, is that each increment builds on previous results, so that the previous profit is amplified more and more over time. I think it is good to note that this works both ways, in a positive and negative sense. If you have a loan and you refinance it, then the interest you must pay becomes part of the loan, and you’ll have compound interest working against you. The result is that you have to pay increasingly more.
Compound interest and technical debt
But if it works with money, why wouldn’t it work with time as well? Interest is not paid over time spent… But then again, if you apply a way to keep saving time, you might achieve something similar. That is the point where this principle may be of interest for software development. Because when developing software, we turn time into added value: features, solutions and what not. If we can provide the same value in less time, we can use the remaining time to add even more value.
From other articles (like here or here) I tried to make clear that there are several ways to slow down and to speed up software development. You’re slowing down if you don’t invest the effort to solve technical debt, but instead work around it. This is comparable to the debt refinancing example above. On the other hand, you can also put effort in structurally improving things, which will save you time. Do note that this time saving is not just once, but is continuously over time, for all development that comes next. For example, you may perhaps invest some time to clean things up, and be able to consistently deliver say with 5% less time.
That is where compound interest shows its actual force. Because, when the code base is only complex enough, you can repeat this over and over again, and your time savings will accumulate just like compound interest.
To visualize this, take for example a number of improvements that each save 5% on development time. (The 5% is just a number to make the example more clear.)
- The first improvement saves you 5% time for each feature
- The next improvement again saves 5%, but this adds to the previous 5%. Total saving is now 9,75%!
- The next improvement again saves 5%, and again this adds to the previous total savings. You can now deliver in about 86% of the time, instead of 100%.
As you see, continuous improvements cause you to keep improving on development velocity. That is a reason that you should continuously make improvements. Because this also works the other way around: each time you add a feature and you don’t clean up technical debt, the code becomes a bit harder to maintain; hence new features will cost increasingly more. Suppose each new feature adds 5% extra development overhead:
- The first feature is delivered in 100% of the time
- The next feature will cost 105%
- The next feature will cost 110,25%
- The fourth feature will cost about 116%
So cleaning up after you is very important to keep the project healthy and development predictable.
Compound interest and feedback cycles
There’s another way to apply compound interest to software development. This is a bit more difficult to see, but still valuable nonetheless. It is in the area of feedback.
As it turns out, the longer it takes to repair a bug, the more the bug itself will cost. This is still apart from the phase in which the bug is detected: bugs detected in later project phases will cost exponentially more.
This means that not having a process in place that fosters early feedback and fixing bugs once they occur, you pay a large interest cost. Part of this cost is seen in the amount of time that it takes to get bugs fixed.
The earnings received by resolving technical debt and having proper feedback mechanisms are enforcing each other: the better technical debt is removed, the easier it becomes to have early feedback.