Tuesday, January 29, 2008

Smashing The "Change Code, Break Code" Mindset

One of the mantras at work, for as long as I've been there (7 years now and counting), has been "change code, break code." What that expression espouses is the belief that, anytime you change software, you're likely to break some existing functionality in the process. It's such a deeply-help conviction by many of the old-timers in the office (like me) that it pretty much never gets challenged when it's uttered.

And yet we've got at least one Feature Team who've bought whole-heartedly into Agile, including the importance of automated tests and the practice of re-writing code to make it clearer/more testable/more maintainable. This development has caused me to begin to question "change code, break code." Today, I decided to put it to the test, and I spent most of my day analyzing bug trends among a handful of our teams (including the one in question). What I wanted to see was whether defect-discovery really does go down if you're living by the Agile principles. To accomplish that, I extracted a whole bunch of data from our bug reporting system and produced a spreadsheet showing the "new defect" counts, by Iteration, for a sample set of our Feature Teams.

The results were amazing! For the team that's focused on (and been allowed to focus on) quality, as Agile defines it, there's been a very clear and distinct downward trend to the number of new bugs being found every month. This, despite the fact that the team has re-written huge chunks of their product over that same period, and reduced their code size by about 25% in the process! So much for "change code, break code!"

For every other team that I looked at, the "number of new bugs" trend-line is either flat or moving upwards! In most cases, these teams have been pushed to release more and more features, and as a result either haven't invested in automated tests and code re-writes very much at all, or at best have been able to do so in fits and starts. The difference between the results was even more stark than I'd expected to see.

I couldn't imagine a better sales pitch for the value of placing importance on quality than what I got out of this data-mining! As our Master Coach commented, if we factor in the cost of each defect - in terms of customer dissatisfaction, support time, reporting time, and the allocation of resources to fix the bug instead of adding new features - you'd have to be pretty thick not to see that we're talking about a savings of tens or even hundreds of thousands of dollars implicit in this approach (considering the # of bugs we're talking about) as compared to what we've done in the past.

I'm hopeful that this data will help bring about some changes, but of course, I've been fooled in that regard before! This could certainly be a whole chapter in another Agile book, if I ever wrote one!

4 comments:

Anonymous said...

Hey Matt, very interesting data.
I'm curious if you extracted bugs from all 'buckets' n FCR system? Bugs found get slotted/deferred into team backlog or ASPEN bl or many go to different BLs for exmaple many low priority may be in deferred into 'Birch' for example.

Anyway I think this this a great exercise your doing as like you said you hear the long timers at TVP really promte the break code message.

Anonymous said...

FCR .. typo CFR.

Anonymous said...

Another thought (which will make you gnash your teeth if you decide to find out)...
Where are the bugs reported?

A bug found in development could almost be excluded from your graph (well, unless it is a P1 maybe). But the farther the bug makes it, the more "value" the bug has.

Speaking of Change Code Break Code... how's I19a looking :-)

It's funny, I heard this phrase uttered in a meeting a week ago, and didn't give it much thought... but you make a great point. If we were truly Agile, we shouldn't be afraid of our code, our code should be afraid of our tests, and what we'll do to it if it fails some.

Kimota94 aka Matt aka AgileMan said...

The only bucketing I used was by team. My query included both Open and Closed bugs, but didn't differentiate between types of CFRs. If a bug isn't assigned to a Feature Team, then it won't show up in my results.