<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.construx.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx</link><description>The term technical debt was coined by Ward Cunningham to describe the obligation that a software organization incurs when it chooses a design or construction approach that&amp;#39;s expedient in the short term but that increases complexity and is more costly</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 SP2 (Build: 31113.47)</generator><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1554</link><pubDate>Tue, 20 Nov 2007 05:02:13 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1554</guid><dc:creator>Basil Vandegriend</dc:creator><description>&lt;p&gt;Great article, Steve. I always liked the concept of technical debt, but never thought about it to the depth you went in this article. I agree with the first comment that descriptive labels are much better than numbers, and like the labels with the short examples you proposed in your replying comment.&lt;/p&gt;
&lt;p&gt;One of the biggest issues I have with accumulating technical debt is the risk that management will not appreciate the hidden costs associated with that debt, if not be oblivious to the existence or possibility of technical debt in the first place. I liked the ideas you suggested of tracking debt as either defects or as part of the product work list (ala Scrum) in order to make technical debt more visible.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1554" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1544</link><pubDate>Mon, 12 Nov 2007 18:15:03 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1544</guid><dc:creator>Aaron Erickson</dc:creator><description>&lt;p&gt;Link correction - sorry about that.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://blog.magenic.com/blogs/aarone/archive/2007/06/20/On-Technical-Debt-_2D00_-Revisiting-the-Technical-Mortgage.aspx"&gt;blog.magenic.com/.../On-Technical-Debt-_2D00_-Revisiting-the-Technical-Mortgage.aspx&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1544" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1543</link><pubDate>Mon, 12 Nov 2007 17:47:45 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1543</guid><dc:creator>Aaron Erickson</dc:creator><description>&lt;p&gt;I love the analogy ... though it is one I have been talking about for a long time (&amp;lt;a href=&amp;quot;&lt;a rel="nofollow" target="_new" href="http://blog.magenic.com/blogs/aarone/archive/2007/06/20/On-Technical-Debt-_2D00_-Revisiting-the-Technical-Mortgage.aspx&amp;quot;&amp;gt;Techincal"&gt;blog.magenic.com/.../On-Technical-Debt-_2D00_-Revisiting-the-Technical-Mortgage.aspx&amp;quot;&amp;gt;Techincal&lt;/a&gt; Debt vs Technical Mortgage&amp;lt;/a&amp;gt;).&lt;/p&gt;
&lt;p&gt;Any simplistic idea about the binaryness of quality needs to go away. &amp;nbsp;I am glad the discussion is starting to appear in more mainstream places.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1543" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1539</link><pubDate>Fri, 09 Nov 2007 00:21:07 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1539</guid><dc:creator>Travis Jensen</dc:creator><description>&lt;p&gt;This was a great post, Steve, and something I've been trying to quantify for some time. &amp;nbsp;On some things, calculating cost is easy: I have to keep paying person Y to do function X because we are using system Z. &amp;nbsp;In other cases, it is harder. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;I do want to think a bit more about the notion of debt and how it really plays in agile development, where doing things the simplest way is not a negative. &amp;nbsp;Certainly, in that context, the most painful debt is failure to refactor. &amp;nbsp;Many times, we just &amp;quot;hack it in&amp;quot; because we don't want to pay for the refactor, but then we've introduced a pain point that will only grow.&lt;/p&gt;
&lt;p&gt;Interesting topic, and undoubtedly one I will write more on at my blog as well (shameless plug: &lt;a rel="nofollow" target="_new" href="http://cmssphere.blogspot.com"&gt;http://cmssphere.blogspot.com&lt;/a&gt; :).&lt;/p&gt;
&lt;p&gt;Travis&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1539" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1538</link><pubDate>Thu, 08 Nov 2007 19:49:35 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1538</guid><dc:creator>Steve McConnell</dc:creator><description>&lt;p&gt;Nathan, Great comments. I agree that estimating the interest payment on technical debt is challenging at best. I do think you can estimate the debt itself -- the &amp;quot;principal&amp;quot; on the debt, so to speak. &lt;/p&gt;
&lt;p&gt;When you get to a point where you are debating taking on technical debt, there are always at least 2 possible paths, one of which is the &amp;quot;good but expensive&amp;quot; path and one of which is the &amp;quot;quick and dirty&amp;quot; path. You wouldn&amp;#39;t take on the technical debt in the first place unless you perceived a difference in cost between the &amp;quot;good&amp;quot; path and the &amp;quot;quick&amp;quot; path. When you reach that decision point, you could estimate the good path and the quick path. That estimate will help inform which path you should choose at that moment. &lt;/p&gt;
&lt;p&gt;Separately, you should also estimate how much it will cost to backfill the good path *after* you&amp;#39;ve already gone down the quick path. Backfilling the good path will typically be more expensive than just doing the good path in the first place because the work will include ripping out the quick code, making sure you didn&amp;#39;t introduce any errors while doing that, then adding the good code and going through the normal test &amp;amp; QA processes. The &amp;quot;ripping out&amp;quot; part makes it cost more to implement the good path later than it would have cost to implement it in the first place. And of course you&amp;#39;ve already incurred the cost of the quick path, so the real cost is the sum of the quick path + the clean path + the cost to rip out the quick path. &lt;/p&gt;
&lt;p&gt;If the code is really well designed the &amp;quot;ripping out&amp;quot; cost can be minimal, but I think that&amp;#39;s the exception.&lt;/p&gt;
&lt;p&gt;The &amp;quot;interest payment&amp;quot; is trickier and depends very much on the specific case. I don&amp;#39;t think there always is an ongoing interest payment. Sometimes the &amp;quot;interest&amp;quot; is really just the cost of ripping out the quick code and of implementing the good code. Other times the quick and dirty approach does create ongoing interest payments by making other related work take longer. &lt;/p&gt;
&lt;p&gt;I think this might be a case where *controlling* this aspect of the project is a better choice than *estimating* it. I might encourage teams looking at these decisions to try to identify the cost to implement a quick and dirty path that doesn&amp;#39;t affect other parts of the system (i.e., that doesn&amp;#39;t create any ongoing interest payments) and also identify the cost of a quick and dirty path that does affect other parts of the system. So the decision table could look something like this example:&lt;/p&gt;
&lt;p&gt;Option 1&lt;/p&gt;
&lt;p&gt;Immediate cost of Good Solution: 10 staff days&lt;br /&gt;Deferred cost to retrofit Good Solution: 0 staff days&lt;/p&gt;
&lt;p&gt;Option 1 cost now: $6,000&lt;br /&gt;Option 1 cost later: $0&lt;br /&gt;Option 1 total cost: $6,000&lt;/p&gt;
&lt;p&gt;Option 2&lt;/p&gt;
&lt;p&gt;Immediate cost of Quick &amp;amp; Dirty solution with no interest payment: 3 staff days&lt;br /&gt;Deferred cost to retrofit Good Solution: 12 staff days&lt;/p&gt;
&lt;p&gt;Option 2 cost now: $1,800&lt;br /&gt;Option 2 cost later: $7,200&lt;br /&gt;Option 2 total cost: $9,000&lt;/p&gt;
&lt;p&gt;Option 3&lt;/p&gt;
&lt;p&gt;Immediate cost of Quick &amp;amp; Dirty solution with possible interest payment: 2 staff days&lt;br /&gt;Deferred cost to retrofit Good Solution: 12 staff days&lt;br /&gt;Estimated cost of &amp;quot;interest payments&amp;quot;: 1-3 staff days&lt;/p&gt;
&lt;p&gt;Option 3 cost now: $1,200&lt;br /&gt;Option 3 cost later: $7,800-$9,000&lt;br /&gt;Option 3 total cost: $9,000-$10,200&lt;/p&gt;&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1538" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1533</link><pubDate>Thu, 08 Nov 2007 05:29:19 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1533</guid><dc:creator>Nathan Henkel</dc:creator><description>&lt;p&gt;Steve,&lt;/p&gt;
&lt;p&gt;As I've often found to be the case, your analysis is detailed and well thought-out. I have an observation and a question.&lt;/p&gt;
&lt;p&gt;Observation:&lt;/p&gt;
&lt;p&gt;You mention that what I'd call &amp;quot;pure debt-reduction&amp;quot; phases rarely turn out well. I'd agree with that, and I think the reason why is that it's really difficult to tell if your improving software without some sort of validation of the improvement. I might make changes that make a section of the code _look_ a lot prettier to me, but if those changes don't make the code more flexible, I haven't gained anything, and may have made things worse. It's usually hard to tell if you are actually making your code more flexible in the absence of a flexor--a new requirement or other required change. I think usually technical debt reduction is not an activity in itself, but a way of approaching your normal activities. If debt-reduction in a particular area is desired, managers would encourage programmers working in that area to pursue the most flexible solution, even if it takes longer, to spend extra time refactoring, etc.&lt;/p&gt;
&lt;p&gt;Question:&lt;/p&gt;
&lt;p&gt;How do you go about estimating the principle and the interest rate of the debt you're taking on? These things are typically fairly explicit when taking on financial debt, but are not so easily determined when it comes to technical debt. It seems the principle would be the cost of undoing the hack and redoing it the right way, and the interest would be the anticipated cost of changing new code that is somehow bound to the hack. However, determining the interest seems pretty hard here. If the hack happens just before a release, I guess you don't need to estimate the interest IF you can make your first priority paying off the debt in the case where the interest turns out to be too high (i.e. many features in the new release will be hard to implement with the hack in place). Otherwise, you have to know what requirements are coming down the pipe, and the design implications of those requirements to accurately assess the interest. Assuming you can actually do this, you also have to accept that the interest rate is variable, meaning periodic re-estimation, the estimated cost of which must be rolled into the interest rate.&lt;/p&gt;
&lt;p&gt;All this isn't to say that it's impossible to do this effectively, but it's clearly seems a lot harder to manage knowledgeably than financial debt. I think this may be one reason that programmers shy away from this kind of debt--they know, whether because they've thought about it or just experienced it, that this sort of debt is difficult to manage.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1533" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1523</link><pubDate>Tue, 06 Nov 2007 22:23:27 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1523</guid><dc:creator>Steve McConnell</dc:creator><description>&lt;p&gt;Big Maybe, Some of our clients have used the &amp;quot;tax&amp;quot; metaphor. I've mostly heard it used to refer to overhead required to develop a component within a larger system. I.e., to create even a &amp;quot;hello world&amp;quot; program the tax burden to work with the other programs is 5 staff weeks--after that you can actually start adding functionality. &lt;/p&gt;
&lt;p&gt;That makes sense to me. Beyond that, I'm not sure I see a lot more implications of that particular metaphor, but I'd be happy to have someone *else* do a blog posting on it ;-)&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1523" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1521</link><pubDate>Tue, 06 Nov 2007 16:09:00 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1521</guid><dc:creator>Big Maybe</dc:creator><description>&lt;p&gt;Chui Tey: Both points are excellent insights.&lt;/p&gt;
&lt;p&gt;Another common software metaphor borrowed from the financial world: taxes. Some engineers use the term &amp;quot;taxes&amp;quot; to refer to code that is needed to support &amp;quot;regulatory&amp;quot; requirements, such as interoperability, accessibility, power management, and other features that are imposed on ALL software written in a similar &amp;quot;tax jurisdiction&amp;quot; (such as the same OS [country], or corporate network [county]).&lt;/p&gt;
&lt;p&gt;A lot of debt is incurred just to meet a system's tax bill. Not to stretch these metaphors too far, in a similar situation in the real world, it is pretty bad sign when a business borrows to pay taxes.&lt;/p&gt;
&lt;p&gt;I think that exploring the reaches of the software tax metaphor deserves a post of its own. Eh, Steve? How about it?&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1521" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1518</link><pubDate>Tue, 06 Nov 2007 12:45:33 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1518</guid><dc:creator>vb</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;It is interesting to what lengths people can go to describe what happens in companies which provide services. &lt;/p&gt;
&lt;p&gt;Because it is software we are more alert and alive to the problem.&lt;/p&gt;
&lt;p&gt;I feel that the same situation exists in all other skill oriented industries - the only difference is that it does not get written about..&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1518" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1517</link><pubDate>Tue, 06 Nov 2007 11:12:17 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1517</guid><dc:creator>Chui Tey</dc:creator><description>&lt;p&gt;I'd like to suggest the following class of technical debt&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Low interest debt in high inflationary environment.&lt;/p&gt;
&lt;p&gt;In high inflationary environment it is often good to borrow money to purchase assets rather than holding on to cash. Similarly, some classes of technical debt can be paid simply by Moore's Law of inflating processing power. &lt;/p&gt;
&lt;p&gt;Case in point is how Microsoft products have been panned for being memory hogs in their early days, but in the long run, it became a strategic advantage as hardware became cheaper. &lt;/p&gt;
&lt;p&gt;Similarly, using a high level language in a project despite early performance problems is akin to making technical bets on how fast the underlying technology can catch up. &lt;/p&gt;
&lt;p&gt;Another kind of technical debt is the zero interest debt. &amp;nbsp;This is where you make a hackish workaround that may never require to be fixed.&lt;/p&gt;
&lt;p&gt;When thinking about technical debt, it is also necessary to talk about technical equity, and return on equity. I'm channeling Kent Beck on this one, where developers are prone to developing features which are not required. In which case, there is no return on the invested equity. &lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1517" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1514</link><pubDate>Mon, 05 Nov 2007 23:08:53 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1514</guid><dc:creator>Dave R</dc:creator><description>&lt;p&gt;Interesting stuff as usual, Steve.&lt;/p&gt;
&lt;p&gt;(Probably a multiple post, sorry....)&lt;/p&gt;
&lt;p&gt;We are doing this at present, modifying database tables to change data types to accommodate future enhancements. It's repetitive grot work, the developers hate it, and there's no immediate benefit; as the risks of squeezing in small enhancements outweigh the political benefits. &lt;/p&gt;
&lt;p&gt;The trade-off comes next low season when we have &amp;nbsp;an infinitely more flexible base to provide potentially much bigger payoff.&lt;/p&gt;
&lt;p&gt;... and now I have a new metaphor with which to dazzle the CEO ;)&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1514" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1511</link><pubDate>Mon, 05 Nov 2007 06:01:22 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1511</guid><dc:creator>cjlotz</dc:creator><description>&lt;p&gt;Thanks for a great discussion! &amp;nbsp;In our team we created a wiki page of items that we view as technical debt. &amp;nbsp;The idea is to have it public to remind ourselves of the items that we feel need to be addressed in the future. &amp;nbsp;The items are mostly Type I and Type II.A. &amp;nbsp;Team members are encouraged to take up some of these items whenever the opportunity arises and we also try and address a bigger chunk of these items in an iteration of technical debt work immediately following a big release.&lt;/p&gt;
&lt;p&gt;Items completed are marked as completed on the wiki page. &amp;nbsp;We find it quite encouraging to see the list of items completed together with the work that still needs to be done.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1511" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1510</link><pubDate>Sun, 04 Nov 2007 19:58:03 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1510</guid><dc:creator>Ward Cunningham</dc:creator><description>&lt;p&gt;This analysis and discussion is consistent with and and adds to the debt metaphor I introduced in my 1992 experience report. In that report I used &amp;quot;consolidation&amp;quot; to refer to refactoring, a word that was not in common use at the time. &lt;/p&gt;
&lt;p&gt;I would also sometimes explain refactoring to my management as follows: &amp;quot;We tried to add the feature to our application but found that there was no place for it. So we first made a place, and then added the feature there.&amp;quot;&lt;/p&gt;
&lt;p&gt;I now ask teams to produce new functionality and new opportunity with each iteration. This requires skills that were not valued until recently. It was simply too easy to &amp;quot;burn&amp;quot; opportunity to deliver features and running out of opportunity was assumed to be a natural conclusion to any project.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1510" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1506</link><pubDate>Sat, 03 Nov 2007 07:24:02 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1506</guid><dc:creator>Hitesh</dc:creator><description>&lt;p&gt;Hi Steve, Great post.&lt;/p&gt;
&lt;p&gt;Richard, I guess we are borrowing time! And payback in spending more time in the future.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1506" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1505</link><pubDate>Sat, 03 Nov 2007 03:42:41 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1505</guid><dc:creator>Robin Barooah</dc:creator><description>&lt;p&gt;As a follow up to my last comment, and to echo something others have already said here:&lt;/p&gt;
&lt;p&gt;There's no way to pay off the design debt 'for it's own sake'. &amp;nbsp;After all, if the system works, there's no justification for changing it. &amp;nbsp;Also, there's no clear way to identify what constitutes the debt, or when it is paid off.&lt;/p&gt;
&lt;p&gt;As far as I can see, the only way to meaningfully pay off the debt is in the context of refactoring in order to allow new functionality to be built without having to implement workarounds or duplication.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1505" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1504</link><pubDate>Sat, 03 Nov 2007 00:02:41 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1504</guid><dc:creator>Robin Barooah</dc:creator><description>&lt;p&gt;I think that one of the reasons why developers prefer to avoid technical debt is that technical debt is not fungible the way financial debts are.&lt;/p&gt;
&lt;p&gt;Putting that another way - financial success of the product won't change the fact that the only way to pay off the technical debt is for the developers to do painstaking and laborious work - which hurts the developers personally, whereas a financial debt can simply paid off out of revenues without anyone's job being worse.&lt;/p&gt;
&lt;p&gt;This might further explain why business people are prepared to accept technical debt - they aren't the ones who are going to have to pay it off. &amp;nbsp;The developers suffer real consequences because they aren't learning or growing by having to rework code that they knew was being done to substandard quality in the first place.&lt;/p&gt;
&lt;p&gt;It's also hard to ensure that all of the technical debt is paid off. &amp;nbsp;There's no easy way to get a balance, and the interest compounds at a very high rate.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1504" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1503</link><pubDate>Fri, 02 Nov 2007 19:48:08 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1503</guid><dc:creator>Stephane Grenier</dc:creator><description>&lt;p&gt;Great article! I recently wrote something similar: &lt;a rel="nofollow" target="_new" href="http://www.followsteph.com/2007/09/30/developer-debt/"&gt;www.followsteph.com/.../developer-debt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One thing I think that really helps to mitigate this is the Agile process. It's by no means a Silver Bullet, but what it does do is help bring technical/development debt to the surface on an ongoing basis. You can't escape it. &lt;/p&gt;
&lt;p&gt;A lot of people want to think Agile development is fly by the seat of your pants development, or that it's a Silver Bullet. Not at all. It's basically a strategy for bringing forward issues such as technical debt on an ongoing basis (as well as continually giving your client deliverables, etc.). It gives you the ability to continually decide what's worth adding to your credit card. And because of that, if used improperly it can be pretty easy to nickel and dime'ing yourself to debt. It must be used carefully, like all other development processes.&lt;/p&gt;
&lt;p&gt;But because of the power the Agile process does have in bringing forth all these issues on an ongoing basis, making you face them rather than shoving them under the carpet, I believe it can really help many teams. At the very least, you're going to be forced to make the decisions of whether or not to take on the debt. &lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1503" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1502</link><pubDate>Fri, 02 Nov 2007 18:33:06 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1502</guid><dc:creator>Steve McConnell</dc:creator><description>&lt;p&gt;Richard, No question that the analogy is going to break down at some point. The &amp;quot;zwang&amp;quot; is that the more debt you accumulate, the more your rate of progress (i.e., velocity) will slow down. Like business debt, there isn't really an expectation that you *ever* pay it off completely. The goal is to keep the debt service at a reasonable level compared to your other expenses &amp;amp; investments. &lt;/p&gt;
&lt;p&gt;I wouldn't try to convince senior management to *pay off* the debt. I would try to convince them to *pay down* the debt (i.e., pay off part of it). There are several possible leverage points you can use with senior management:&lt;/p&gt;
&lt;p&gt;* &amp;quot;We'll be able to get future releases out in 5 months instead of 6 [or whatever] if we can spend X-amount of time paying down our technical debt.&amp;quot; &lt;/p&gt;
&lt;p&gt;* &amp;quot;We can add functionality in area X, which currently we can't do, if we spend Y weeks working on the technical infrastructure. Once we build the infrastructure for X, it will also allow us to A, B, and C fairly easily, which we can't do now without that infrastructure.&amp;quot; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;* &amp;quot;Our response time on hot fixes is really slow because there are major sections of the code that have become so complex that no one knows how to make changes in those areas safely. We end up with long review, test, and debug cycles even for simple changes, which requires a lot of time to release even a simple hot fix. If we spend X time paying down the debt, we'll be able to reduce our average hot fix time by Y.&amp;quot; &lt;/p&gt;
&lt;p&gt;* &amp;quot;Some of the 'shortcuts' we've been taking are starting to become visible to the customer, and the number of customer-reported defects has been increasing. Until we pay off some of the debt, we're going to have an increasingly difficult time assuring the quality of our system prior to release.&amp;quot;&lt;/p&gt;
&lt;p&gt;These are just a few examples of the kinds of indirect costs you get when you have a high technical debt load. If your level of technical debt is such that you can't promise specific business benefits along these lines from paying off the debt, then it's always possible that the debt isn't worth paying off. &lt;/p&gt;
&lt;p&gt;Another reaction I had to your comment is that I don't think I've ever seen a case where diverting a staff of 20 for 3 months to focus on debt reduction makes sense. I've seen companies attempt such initiatives many times, and they nearly always end up being unfocused boondoggles that don't produce enough business value to justify their time or cost. I would suggest instead breaking the debt reduction payments into much smaller pieces and then including some percentage of debt reduction work into the team's normal work flow. Software teams will often tell you that &amp;quot;It will be more efficient to do the debt reduction all at once,&amp;quot; but it really isn't because doing it all at once removes the &amp;quot;business value grounding&amp;quot; from the work. &lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1502" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1501</link><pubDate>Fri, 02 Nov 2007 18:05:10 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1501</guid><dc:creator>Richard Quinn</dc:creator><description>&lt;p&gt;Thanks to Big Maybe and Steve for the answers.&lt;/p&gt;
&lt;p&gt;I had already understood that quality was being sacrificed in order to gain development time. The new concept introduced in the article is the idea that the quality is not really sacrificed, at some point later it will be added (with interest) - therefore it was just borrowed and not sacrificed. In any case, the premise of the article is to use a terminology familiar in a business setting. So here we are borrowing dollars which would have been spent on programming days now which should be paid back later. The thing that was purchased was the business benefit gained from using the delivered functionality n months sooner than otherwise.&lt;/p&gt;
&lt;p&gt;In a financial setting, the questions would be: we borrowed money. What will happen if we default on the repayments? In the real world foreclosures will happen, and so the (monetary) debt really must be paid back to avoid foreclosure and other nasty events.&lt;/p&gt;
&lt;p&gt;What is the &amp;quot;zwang&amp;quot;, the necessity, to repay the quality debt? How does the threat of foreclosure transfer from the financial to the software engineering world?&lt;/p&gt;
&lt;p&gt;Currently I am having difficulty justifying taking a development team of 20 core developers + ancillary, test and documentation staff away from programming (delivering business value) for three months in order to straighten out software which has been deteriorating for years. I have no bailiffs, sheriffs or jails with which I can threaten senior management with dire consequences for none-repayment of the quality debt. In previous years, and most probably int the near future these people have consistently chosen to borrow more instead of servicing debt. &lt;/p&gt;
&lt;p&gt;Thanks for your time,&lt;/p&gt;
&lt;p&gt;Richard&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1501" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1499</link><pubDate>Fri, 02 Nov 2007 17:03:29 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1499</guid><dc:creator>Doug Sjoquist</dc:creator><description>&lt;p&gt;Type I/Unintentional debt occurs when making an impulse or other poorly thought out decision without realizing you are incurring debt. &amp;nbsp;It is similar to spending money from a checking account that isn't there, so perhaps a reasonable financial analogy for non-technical people would be &amp;quot;overdrafts&amp;quot;. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Most of us have some overdraft protection on checking accounts to protect us against our own laziness or errors, but the tolerance for it is pretty low. &amp;nbsp;Similarly, most organizations can tolerate a little of this type without too much pain, but the curve rises steeply at a fairly early point with this type debt.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1499" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1498</link><pubDate>Fri, 02 Nov 2007 16:33:26 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1498</guid><dc:creator>bk</dc:creator><description>&lt;p&gt;For me, the most valuable take-aways here are the &amp;quot;How do You Make an Organization's Debt Load More Visible?&amp;quot; and &amp;quot;Retiring Debt&amp;quot; sections.&lt;/p&gt;
&lt;p&gt;If you actually put pen to paper and record the compromises you are making during your software development cycles, and then you get to the point where you see this list and say &amp;quot;ok, our list is big enough, time to work on making it smaller,&amp;quot; &amp;nbsp;then that kind of hard-accountability can have a real positive effect. &amp;nbsp;The challenge, as I see it, is figuring out what actually needs to go on that piece of paper to make it a valuable tool. &amp;nbsp;&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1498" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1497</link><pubDate>Fri, 02 Nov 2007 15:27:30 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1497</guid><dc:creator>Steve McConnell</dc:creator><description>&lt;p&gt;Richard, I look at it about the same Big Maybe described. You're acquiring an asset (the released software) for less than it's full price. Thus you're financing the gap between what you paid (actual dev cost) vs. the full price (what the dev cost would have been without the shortcuts). That gap is the technical debt. &lt;/p&gt;
&lt;p&gt;My experience is that business people get the concept right away. I haven't found that they asked questions like, &amp;quot;Who authorized the loan?&amp;quot; On the contrary--it puts a highly technical topic into a context that they understand, which makes them feel like they a better understanding of the issues. Of course they will ask lots of questions, but that's to be expected in any dialog about technical/business tradeoffs.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1497" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1496</link><pubDate>Fri, 02 Nov 2007 14:50:58 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1496</guid><dc:creator>Big Maybe</dc:creator><description>&lt;p&gt;Richard,&lt;/p&gt;
&lt;p&gt;You borrow Quality, in order to buy Time. Assuming 100% quality is the ideal, and requires no interest payments (in the form of future maintenance work that otherwise wouldn't have materialized), then every bit of quality sacrificed now is &amp;quot;borrowed&amp;quot; in the sense that you will eventually pay it back, with interest, using time that you assume you will have in the future.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1496" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1495</link><pubDate>Fri, 02 Nov 2007 06:45:05 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1495</guid><dc:creator>Richard Quinn</dc:creator><description>&lt;p&gt;Thanks for the article Steve, it really does help conceptualize a problem.&lt;/p&gt;
&lt;p&gt;However, I think the concept of debt in this setting is misleading. Usually, debt is incurred because you have borrowed to spend now, which must be paid off tomorrow. In a software engineering setting what has been borrowed? What has been spent? The only concept which is clearly explainable is the idea of having to pay back over the coming weeks or months.&lt;/p&gt;
&lt;p&gt;I predict, that if I talk to business people about technical debt the first thing they will ask me is: &amp;quot;Who authorized the loan? What was the extra money (time/staff/feature) spent on?&amp;quot;. There is - I think - a clear gap here between the kind of debt software engineers must service and the kind which finance people must service, this gap may well lead to more, not less, understanding of the issue amongst non-technical business deciders.&lt;/p&gt;
&lt;p&gt;Perhaps I missed something, I'm looking forward to your reply.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1495" width="1" height="1"&gt;</description></item><item><title>re: Technical Debt</title><link>http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx#1494</link><pubDate>Fri, 02 Nov 2007 00:42:24 GMT</pubDate><guid isPermaLink="false">1c8bc03b-986a-40b9-ab6d-e8d23056df8a:1494</guid><dc:creator>Alejandro Garcia</dc:creator><description>&lt;p&gt;Type I is the: &amp;nbsp;&amp;quot;health bills debt.&amp;quot;&lt;/p&gt;
&lt;p&gt;In some cases you could probably make something to prevent it (like diet and exercise or training and better selection), but also sometimes it is completely unexpected (like when you break your leg, or your server melt) &lt;/p&gt;
&lt;p&gt;Type II.B &lt;/p&gt;
&lt;p&gt;is the 'mortgage' debt. You do it voluntary, you know is big and it will take you a while to pay but, in the future you will have a big asset.&lt;/p&gt;
&lt;img src="http://blogs.construx.com/aggbug.aspx?PostID=1494" width="1" height="1"&gt;</description></item></channel></rss>
