InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Software Debt Adds Up to Substantive Costs

Posted by Shane Hastie on Aug 10, 2009

Sections
Process & Practices,
Architecture & Design
Topics
Agile ,
Agile in the Enterprise ,
Delivering Quality ,
Removing Waste
Tags
Technical Debt

In a recent article entitled “Continued Delivery of High Values as Systems Age”, Chris Sterling discusses the concept of Software Debt – “Software debt accumulates when focus remains on immediate completion while neglecting changeability of the system over time.”

Software debt goes beyond what is typically referred to as technical debt -

He identifies the four components of software debt as:

  • Technical Debt: those things that you choose not to do now and will impede future development if left undone
  • Quality Debt: diminishing ability to verify functional and technical quality of entire system
  • Configuration Management Debt: integration and release management become more risky, complex, and error-prone
  • Design Debt: cost of adding average sized features is increasing to more than writing from scratch
  • Platform Experience Debt: availability and cost of people to work on system features are becoming limited

He discusses how software debt creeps into projects, and provides a view of how projects accumulate debt over time, often for the best motivation and a desire to maintain the pace of delivery in the face of increasing complexity.

In a similar vein Bill Curtis discusses the impact of Muda (“Muda” is the Japanese word for waste) on software projects – the most common source of waste on software projects is rework, the result of software debt:
The few available studies of rework report that it accounts for between 30% and 50% of project effort in most organizations that have not undertaken successful process improvement. Rework numbers are painful, not only in the collecting, but also in the fessing up. Few executives want to admit they are flushing away an average 40% of their investment in applications.


Sterling suggests ways to manage and reduce software debt:

  • Maintain one list of work 
  • Emphasize quality 
  • Evolve tools and infrastructure continually 
  • Always improve system design 
  • Share knowledge across the organization
  • And most importantly, hire the right people to work on your software! 

In the article he provides advice on how to address each of these points. 

He concludes the article with the following comments:

As systems age they can become more difficult to work with. Software assets become liabilities when software debt creeps into systems through technical debt, quality debt, configuration management debt, design debt, and platform experience debt.

Applying the six principles in this article will lead to small changes that over time will add up to significant positive change for teams and organizations.  The goal of managing software debt is to optimize the value of software assets for our business and increase the satisfaction of our customers in the resulting software they use.


How do organisations reduce software debt and protect their investment in software systems?
 

Shane Hastie is an agile coach, trainer and consultant working for Software Education in Australia & New Zealand

  • This article is part of a featured topic series on Agile
Technical Debt by Daniel Sobral Posted
  1. Back to top

    Technical Debt

    by Daniel Sobral

    Well, Chris has redefined technical debt to be one of the things technical debt refers to. You can look up references to technical debt on the Internet, and you'll see all things described by Chris as "software debt".



    I don't mind the categorization, though that always leads to having stuff that doesn't quite fit any existing category. But this is by no ways adding new categories, just reclassifying.

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.