As a programmer with a new piece of functionality you can either design it better, thus increasing the time it takes to develop, or design it worse thus developing it much faster. The resulting implications on ongoing maintenance is 'technical debt', an idea introduced by Ward Cunningham to contextualise this problem.

Critically this type of debt is often accepted without:

  • Understanding the financial risks,
  • Considering whether its affordable,
  • A plan of action to clear the debt,
  • A quantifiable cost taking on the debt.

Its simply blindness to the intangible and it's hard to quantify.  Some debt however, you will take on as the complexity of software grows. For example:

  • The time it takes to develop new features will increase as the complexity of the software increases
  • It becomes harder and more time consuming to ensure the new features that are produced are not effecting other features of the software.

This idea of taking on debt is very important, as with a loan if you pay it off quickly you reduce interest payments thus reducing additional debt and saving money. Taking in to account the example above, with the same methodology applied to a project with large amounts of technical debt the project will thus be less profitable and debt reduction should be made to increase profitability.

In the last few years there have been a number of Automated concurrent testing tools such as NCrunch andMighty Moose combined with development processes like Test and Behaviour Driven Development.  These were brought in to help, amongst other things, to mitigate this debt risk which is achieved by providing real time feed back for code that is being developed. Thus reducing development and bug fixing time.

Just because you cannot see technical debt, that does not mean it is not there and it effects the profitability of a project. Its a common problem to let technical debt get out of control and thus spend the future development effort paying off crippling interest payments.

My point is try to quantify technical debt, understand it is there, reduce it where possible and don't let it grow.