Friday, February 26, 2010

Inevitable and avoidable rework

Without really thinking about it until now, I've been seeing two types of technical debt. The first is the quick solution implemented with dirty code. I consider this to be irresponsible. That's not to say I won't do it, just that if I decide I should do it I make sure the necessary people understand the consequences and that it's an irresponsible action to take.

The second is a natural byproduct of emergent design and YAGNI(yet) decisions. It's the debt that surfaces when a system outgrows implementations resulting from previous decisions, which were the right ones to make at the time based on the information available (because they did not compromise quality or the health of the code in any way). Irresponsible debt creates avoidable rework; it's failure demand. It's bad, it smells and it needs to be cleaned up because, if left to fester, it's going to slow us down and divert capacity away from meeting the value demand.

The debt that surfaces because the system is maturing creates inevitable rework. It's necessary to do this rework on a regular basis to keep the emergent design relevant, the code habitable, to prevent obsolescence, perhaps increase reuse, and reduce risks and medium to long-term costs. I think most people try to roll this debt into feature cards and that's the right policy. We prefer to do that if we can. However, we've become too good at writing cards to be less than 2 days (which helps smooth the flow) and sometimes it's not possible to absorb inevitable rework into a feature card and keep it under 2 days (the way we like it). And of course, sometimes, the rework just doesn't relate to any features, e.g. upgrading to the latest Grails framework. So this gets written on a blue card. By definition this is failure demand too. But that's harsh, don't you think? I have a weird take on this because I insist that the system is recognized and treated as a stakeholder, and as such it values certain things and makes its own demands. One of the things it values is to be kept healthy. But I'm not hung up on this rework being classified as failure demand providing it's being managed effectively.

As I mentioned in my previous post, completing some inevitable rework on a regular basis (and assuming you're not being irresponsible ;) helps reduce the remaining rework. We can see this in action in the chart below.


Rework
Originally uploaded by energizr


The blue and pink lines show the remaining technical debt and defects that are either work-in-process or queued inventory (i.e. completed but not released). The blue and pink bars show the technical debt that has been repaid and the defects that have been fixed. Think of these bars pulling the remaining rework down keeping it small and preferably fairly steady. And, of course, assuming there's throughput satisfying the value demand then the team is effective.

It's useful to track the remaining technical debt and defects in statistical process control charts. The natural process limits help to distinguish signs of system instability from normal variation. When the limits are breached investigate what's happened to understand how the system may have changed. Watch for trending beyond the breach as it's likely to reveal more information to help you. Use these events to identify improvements.


Technical Debt SPC
Originally uploaded by energizr

Defects SPC
Originally uploaded by energizr

(Incidentally, the process limits were calculated between weeks 7 and 14 because week 6 saw the system change. Up to the end of week 6 all the software completed became queued inventory. This was then flushed to throughput and released, enabling a weekly release from then on.)

Labels: , ,

Links to this post:

Create a Link

3 Comments:

Hi Simon! It makes me happy to see someone else willing to treat technical debt as discrete entities. I've found that insisting it gets moved into features often means it doesn't get done! Thank you for the excellent graphic formats, too.

You (and your readers) might like the Feature Injection template, which I've been using for stories for a while. I've found it really helps in expressing the business benefit of technical stories. Here are a couple of links, one of them prompted by an older post of yours:

http://lizkeogh.com/2008/09/10/feature-injection-and-handling-technical-stories/
http://lizkeogh.com/2010/02/02/theyre-not-user-stories/

Hope they're useful for someone.

Posted by Blogger Liz Keogh @ permalink
 

Simon,

I agree. the graphs are of real help.. what tool you use?
Regards
Sameer
http://pm-better-than-sex.blogspot.com

Posted by Anonymous Anonymous @ permalink
 

Excel.

Posted by Blogger Simon Baker @ permalink
 

Post a Comment