Coding: Controlled Technical Debt
A couple of months ago I wrote about an approach to stories that Christian has been encouraging on our project whereby we slim stories down to allow us to deliver the core functionality of the application as quickly as possible.
In our case we had a requirement to setup a range of different parameters used to lookup reference data used in the different calculations that we have in our application.
At the time we created an interface that the rest of the application would interact with so that we could easily substitute the real version in when we needed to:
We released the first version of the application about a month ago and finally last week implemented the story where the data would move from being in memory to being in a database table.
One of the requirements which we had delayed by only having these parameters in memory was the ability to easily modify them.
Any changes that needed to be made required an update of the code and then redeployment whereas with the database approach we would only have needed to deploy a delta script.
In the event there has only been one occasion so far where those parameters needed to be updated so it hasn’t proved to be a problem.
Discussing this with a colleague on Friday he pointed out that what we’d done originally was to accept technical debt in our solution knowing that at some stage in the future we would need to address that.
The interesting thing about this case was that we knew exactly when we were going to repay that debt whereas it’s often the case that we create technical debt in a code base and vaguely know that at some stage we’ll address it.
As Martin Fowler points out in his entry on technical debt:
Just as a business incurs some debt to take advantage of a market opportunity developers may incur technical debt to hit an important deadline.
We probably saved at least a day’s worth of effort by delaying this decision and were able to work on functionality that the business needed by the deadline instead. We then paid back that debt last week when we had more slack in the system.
The benefits of getting something into the market place quickly are much greater than I previously imagined and I think we can look at our assumptions of how a solution 'needs' to be designed much more closely to see if we can make these trade offs more frequently.