Technical debt

The Blooming Garden

Yesterday, Agila Sverige (Agile Sweden) 2017 ended. As usual, I’m full of impressions and ideas that I want to try out! Maybe I will come back to this years’ conference in an upcoming blog post, but for now I want to share with you a metaphor that was used, and that I now have written about.

Introduction

To develop software products is like having your own garden. In the garden you have trees, bushes, flowers and maybe a little pond with fish. All of this needs to be looked after, and you need to remove the weeds to get your flowers to blossom.

”The

I got a little help from my daughter with this illustration 🙂

In software development it’s easy to constantly add new features and functions to your product. This will make your garden grow and grow. A real garden has boundaries, maybe there is a fence to the next door neighbour, but these doesn’t exist in software development. In theory there is no limit, in practise there is.  How do you keep up with this continuous expansion? Hire more ”gardeners” you might say (in the form of architects, developers, testers and so on). That works for a while, but at some point in time the garden will grow wild, and will be impossible to handle. So to add things, you also need to remove things. Maybe that little pond needs to be filled with mould so that new tulips can be planted? In my experience with software, removing something is a much harder decision than it is to add something new.

Technical debt

Another term for this is technical debt. Adding new functions comes with a debt in the form of other work that needs to be done in the product (we can see this symbolically as to ”remove the weeds”). If this debt is not repaid, it will keep on accumulating interest making it hard to implement changes later on (hence your garden will ”grow wild”). All products always need a certain degree of ”gardening”. The problem is that this fact tends to be forgotten when you constantly want to add new functions and features to your product.

In the garden you will plant the seeds, pour over water, keeping your fingers crossed for good weather and then wait and see if it will grow. According to the law of nature, not all seeds will germinate. It’s the same in software development, where you implement a new function and see if it gets adopted and used by your customers. Some of the things you do will be successful, while others will fail. Beforehand it’s very hard to guess what will be successful, but don’t be afraid of failure. Without trial&error there is no innovation. If you always ”play it safe” you will become predicable and your competitors will eat your lunch (or even worse, your company)!

A product is a complex system, you can compare it to an ecosystem in nature. When a new species enter the ecosystem the balance is disordered. What I want to say is that even if your new function in your product is great, adding it can lead to unwanted consequences in surrounding systems/products. Maybe a bottleneck in the communication now shows up between the systems. Of course this goes internally in a product as well (seeing the product as a full ecosystem). Adding a high throughput import adapter to your product may all of a sudden make your history searches painfully slow. Going back to the garden example, planting of some new bushes may attract snails that eat up all of your tulips.

Seasons in software development

In Sweden we have four distinct seasons; spring, summer, autumn and winter. During the winter everything is on low heat literally, since it’s freezing cold! When spring comes along everything is wakening up to life once again. During summer everything is warm and verdant. Autumn is colourful and time for harvest. Maybe your industry has some kind of ”seasons” or repetitive cycles as well? Instead of fighting against them, use them to your advantage! During ”winter” when everything is going in a slower pace, use that for planning and thinking ahead, whilst also taking care of your technical dept. Develop the new functions during ”spring” and release them for customer usage in the ”summer”. ”Autumn” is time for reflection to be able to start a new cycle with ”winter” again. See it as a big wheel that keeps on turning!

Summary

You can’t just keep on adding new things without taking care of the stuff that you already have. This is pretty clear to us in general life, but in software development it’s tricky since there are no physical boundaries. If possible, try to use seasonal variations in your industry to take care of your technical dept. 

All the best,
Tomas from TheAgileist