Where does technical debt come from

Over the past year I’ve been dealing with some technical debt across a couple of different ASP.NET applications that we recently inherited. As part of that work I’ve spent a bit of time thinking about technical debt, how to deal with it, and how to avoid it. Describing the subject of technical debt as interesting might be overstating things a little however it is a subject which is relevant to most developers at some point in their career.

So when I read this article (Lotus Notes - a Double Edged Sword) it struck me as a great example of where technical debt can come from. The post describes an application which was thrown together quickly to help co-ordinate disaster relief volunteers working to help with the recent earthquake in Christchurch New Zealand. Here’s a snippet from the post:

The speed of development and ease of deployment (zero installation, fault tolerance, and client independent) was just one side of the sword. The other side of the sword is the speed at which you can develop & deploy doesn't leave time to consider the user interface or experience and the default isn't particularly inspiring (not that coordinating arrival times and accommodation is EVER going to be sexy)!

I’m not picking on Lotus Notes here as you can easily find examples of this sort of this occurring with any development environment, however Notes’ capabilities as a rapid application development platform do make it a prime example of how temporary or quick fix applications can end up being used for a much longer time period than intended. In fact back when I was developing Notes and Domino applications I remember many times where a client looked at the quick and nasty sample prototype I’d thrown together and said “It looks great, let’s put it live!”.

Examining this in the context of a disaster scenario is interesting as the priorities are shifted – speed is king. Often when it comes to technical debt you can place the emphasis on the developer to insist on doing things properly in the first place and to refuse to compromise on quality in order to save time (as much as possible), and that doesn’t fly in a time of crisis. Instead, in my opinion the emphasis needs to shift to the business to ensure they recognise the technical debt and budget some time to go back and either retire these temporary applications, or spend some time bringing them in line with good development practice.

Identifying that rapid development can sometimes come with consequences is a great step towards avoiding large amounts of technical debt later on down the track – of course the other steps involve taking time out to address those issues before they become a larger problem.

Tags: , , ,

 Print | Posted on Monday, March 14, 2011 7:40 PM | Filed Under [ Notes/Domino Web Development Miscellaneous ]



Feedback

Gravatar

# re: Where does technical debt come from

I've been thinking about the root cause of technical debt as well. We have a lot of it in business applications. Traditionally, the explanation for the debt is incompetence or time, most often it is time.

Yet, then I noticed that in my own pet project (JungleDragon) I was acquiring technical debt as well. Strange, since there is no real time constraint and I am the only one working on it. The perfect environment to do things right. Yet the problem is still there, albeit somewhat smaller. Why?

Eventually I concluded that in my opinion, the root cause of most technical debt is a desire for meaningful progress. Customers demand this, but also developers themselves think like this. At the end of a day, they want to say that they build feature X or screen Y. They don't want to say that they streamlined the interfacing, refactored a dirty class, or improved the documentation. You want something to show for your time invested.

3/15/2011 12:22 AM | Ferdy

Gravatar

# re: Where does technical debt come from

What's also true is that I think some people "think better" in code. You can spend time planning and drawing architecture diagrams all you want, but sometimes the game all changes when you start coding something and realise you need to change your approach

With that attitude it's easy to write some quick code to make progress (as you say) and then forget to go back and tidy it up once you've proven your approach is viable.

I think in your example you could probably label what you experienced as the price of progress, rather than the true evil of technical debt :) Everything I've read about your Jungle Dragon experiences sounded like any change of direction was more of a valuable lesson learned than true technical debt, but obviously you're a lot closer to it than me.

Definitely agree with you regarding refactoring / improved documentation - but that's where a good team lead / dev manager earns their money, by realising the need for that time to be spent and arguing the case to the business.. in an ideal world anyway :)

3/15/2011 3:29 PM | Ross Hawkins


Post Comment

Title  
Name  
Email
Website / Url
 

Your comment

   
Ensure the word in this box says 'orange':
 
Please add 5 and 2 and type the answer here:





Due to excessive comment spam, all comments are now being moderated. If you're a comment spammer then you're wasting your time here. Your comments will not be published - ever.


About me

My name is Ross Hawkins and I'm a developer, consultant, business owner and writer based in Auckland, New Zealand (pictured below!). My current work revolves around ASP.NET, C#, jQuery, Ajax, SQL Server, and a mix of other Microsoft development technologies.

I also have about 15 years of experience with IBM Lotus Notes/Domino and associated technologies. While Notes/Domino is no longer my primary focus I still like to dabble and keep my skills up to date.

I own and run 2 businesses - Hawkins Consulting Services, and Ignition Development.

Bethells Beach, located in sunny West Auckland, New Zealand




Subscribe

Subscribe to this feed


Search




Popular Content

Troubleshooting WebResource.axd

The .NET 2.0 framework changed the way clientside JavaScript is delivered to the browser. Previously, ASP.NET 1.1 used the aspnet_client directory whereas now 2.0 uses WebResource.axd.

Published on October 8, 2006

jQuery Wildcard Selectors - some simple examples

I wrote about jQuery wildcard selector syntax briefly back in 2009, and since then that post has received a lot of views – way more than a post that brief should ever have seen..

Published on October 14, 2011

Microsoft AJAX Extensions: Sys.Debug is null or not an object

One of the breaking changes which was made with the 1.0 release of the Microsoft Ajax Extensions was the renaming of the 'Debug' class to 'Sys.Debug' for reasons of compatiability with other frameworks. Breaking changes like this can often be a source of frustration..

Published on May 22, 2007

Simple ASP.NET Character Counter

A textbox character counter is a pretty simple piece of functionality, and there's a lot of different ways to apply one to your application. The following method is nice and simple, and can be done using only clientside JavaScript if required, or combined with server side code in order to create a more dynamic effect

Published on December 4, 2006

Simple ASP.NET Character Counter - with Master Page Support

A quick update to my previous character counter article adding some changes for those using it with Master Pages.

Published on February 7th, 2009

Adding Tooltips to Gridview Headers

As the title says, this is a very simple but dynamic way of achieving tooltip text on a header column. It's not overly flash, but it's lightweight and quick to implement.

Published on April 15, 2007

SQL Server Web Report Viewer Issues on Windows 2008 Server/IIS7

A fix for another AXD related issue, this time with the SQL Server Web Report Viewer Control which was being served up via IIS7 on a Windows 2008 server.

Published on June 2, 2007
Updated on April 10, 2008





Archives

May, 2012 (1)
April, 2012 (4)
March, 2012 (2)
February, 2012 (4)
January, 2012 (3)
December, 2011 (3)
November, 2011 (8)
October, 2011 (9)
September, 2011 (8)
August, 2011 (5)
July, 2011 (4)
June, 2011 (7)
May, 2011 (5)
April, 2011 (3)
March, 2011 (8)
February, 2011 (4)
January, 2011 (3)
December, 2010 (8)
November, 2010 (5)
October, 2010 (6)
September, 2010 (7)
August, 2010 (11)
July, 2010 (12)
June, 2010 (8)
May, 2010 (8)
April, 2010 (4)
March, 2010 (8)
February, 2010 (6)
January, 2010 (12)
December, 2009 (13)
November, 2009 (11)
October, 2009 (12)
September, 2009 (12)
August, 2009 (2)
July, 2009 (7)
June, 2009 (12)
May, 2009 (9)
April, 2009 (9)
March, 2009 (9)
February, 2009 (8)
January, 2009 (7)
December, 2008 (6)
November, 2008 (7)
October, 2008 (9)
September, 2008 (12)
August, 2008 (9)
July, 2008 (6)
June, 2008 (24)
May, 2008 (13)
April, 2008 (16)
March, 2008 (8)
February, 2008 (10)
January, 2008 (1)
December, 2007 (14)
November, 2007 (11)
October, 2007 (11)
September, 2007 (13)
August, 2007 (11)
July, 2007 (5)
June, 2007 (15)
May, 2007 (11)
April, 2007 (9)
March, 2007 (9)
February, 2007 (10)
January, 2007 (8)
December, 2006 (18)
November, 2006 (11)
October, 2006 (14)
September, 2006 (9)
August, 2006 (10)
July, 2006 (4)
June, 2006 (4)
May, 2006 (6)
April, 2006 (3)
February, 2006 (6)
January, 2006 (10)
September, 2005 (2)
August, 2005 (4)

Post Categories

ASP.NET
AJAX
Amusing
NZ
NZ Trains
Notes/Domino
Visual Studio
Web Development
Miscellaneous
Me
Rugby
C#
SQL