Sunday 4 April 2010

Quality: another agile buzzword?

Agile literature is full of explanations and techniques as of how to improve software quality. There is lot less talk about why quality is important in the first place. Even K. Beck goes only so far that quality improves trust, and that with trust everything is more simple.
I think an important issue is rarely or never addressed. The fact that users and customers don't seem to care about quality all that much.

As DeMarco puts it, if you present to your client that the software right now has a Mean Time Between Failures of 1.2 hours, and with three extra weeks of work you could reach an MTBF as high as 2000 hours, then after some hemming and hawing "the users will explain that they are as quality-conscious as the next fellow, but three weeks is real money." [1]
This is another classic example of why software industry has way less in common with more traditional industries(cars, architecture, etc) than we've been told. What is quality in other areas, if not the longevity of things? One considers a car or a watch of good quality if it lasts long without the need of repair. Well, in that sense software is always perfect, you can use it as much as you want its parts won't break or fray. Of course there is a minimum quality required, but only to the extent that poor quality doesn't render the software utterly useless, and anything above that is a bonus, that clients aren't willing to pay for.

So why are agile teams so hung up on quality then? - Well, you should ask them, but my guess is that they don't know. [if you are in agile development take a minute here and try to answer that]

I get back to that in a minute, but first I'd like to point out, that when selling your agile methodolgy to your clients, quality shouldn't be high on your list of arguments, or not at all. Quality 'per se' has little to no value to your clients. What you should try instead is to explain to them, how quality will be beneficial for the factors that they do care about, i.e. costs and time and functionality.
(Costs and time) The cost of a software in general is made up of two - not all that independent - parts: development and maintenance. It is easy to see that improved quality brings the cost of maintenance to a minimum. But what's often overlooked, that quality doesn't increase the cost of development in turn. In fact, many times it lowers that too. How is this possible? You just need to recall all the times when you were happily coding away and away, until all of sudden you hit a wall, a wall made of all sorts of different "materials": badly designed, badly laid out code; bugs hiding other bugs that have been lurking around for months only to surface at the worst time possible; performance issues that can only be resolved by completely restructuring your code which - now that you think about it - doesn't really have a structure; endless email/bugtracking ping-pong, between you and the test department; so on and so forth. That is the moment, when development cost and time estimates go out the window, and unfortunately this moment comes almost always nearing the end of the project when it is no more possible to rethink scope, deadline or effort.
I'm not saying that quality is a silver bullet, and that you will never hit a wall with agile, but I can say with confidence, that
a) chances of hitting a wall are much lower
b) even when you hit a wall, it's less dense (is made up of fewer things)
c) and the end of the project is typically not near at all
I'm saying that if you constantly strive for quality the inevitable walls of software development will become more like bumps. And that's your selling argument right there.

[Next time I'll talk about the third factor (functionality), as well as why quality is important for the developer team.]

[1] DeMarco - Lister: Peopleware

4 comments:

Wigy said...

First I thought you were trolling your readers - like Joel Spolsky did several times. Then I read on and found that you really found an excellent argument.

I would add that customers would never pay any extra for quality because they do not trust the industry any more. If you ask them after they got a quality product, they will feel and enjoy the difference.

If the customer buys the stuff anyway, you need to find really good arguments why you want to have the quality. And there are some.


You already talked about the flexibility of the product, so it does not get stuck and can react to requirement changes.

I would mention the effect on team culture. A team creating a good quality product has higher motivation. They feel that the product is theirs and they can influence the outcome.

An enemy of the previous point is the Broken Window Theory. A single developer not caring about quality or a single problem not being solved generates more problems. More problems will cause more expensive development.

srac said...

you will be banned from commenting if you try to take the wind out of upcoming posts :>

Wigy said...

Hmmmm, sorry. So you asked us to think about why quality is important, but not post it. Now I understand...

On the other hand, (the lack of) quality is such an interesting topic for me, that I even wrote an article about it some weeks ago, although in Hungarian.

srac said...

(you overlooked i smiley, my friend, or forgot to put one in your reply :)