This was a revised and updated of my talk at the Agile Business Conference last October. There are two key arguments:
- High quality is essential to achieve Agile: if you have poor quality you can’t close an iteration, you can’t mark work done, and schedules will be unpredictable.
- High quality (fewer bugs) is the means to achieve shorter delivery time: better and faster are not alternatives, they not even complementary, they are cause and effect.
That second point is one that I don’t think is appreciated enough, in fact I think a lot of people have a belief that you can deliver faster if you turn-down the quality. Many years ago I worked with a great developer called Roy. One day Roy went to our manager, the conversation went something like this:
Roy: Would you rather have the software sooner with bugs or later without?
Manager: Sooner with bugs
Both Roy and the Manager were seeing a trade-off that does not exist.
Resetting this broken mental model, unlearning this trade off is one of the biggest challenges that faces out industry.
Read my lips: High quality software is faster to develop. Invest in quality and you will finish sooner.
This is also one of the reasons I prefer the XP approach over the Scrum approach. It is also one of the reasons I was disappointed with the “System Error” report from the UK Institute for Government last week.
The reason the report got so much attention was because it recommended the UK Government adopt Agile and Iterative development in IT projects. By the way, the report is from a think tank, it is wrong to say this report means the UK Government will adopt Agile, or that the UK Government wants to adopt Agile, it just means some “thinkers” suggest it should.
I haven’t had a chance to do anything more than skim the report yet but what struck me was the lack of discussion about quality. The report continues the belief that quality is an effect not a cause.
The report lays out four principles for Agile projects:
- Iterative approach
- Responsiveness to change
- Putting users at the core
There is one big thing missing here: Quality.
Without high quality you can’t take an iterative approach because nothing is ever finished.
Without high quality you can’t be responsive to change because nothing is deployable and over time crud builds up which slows you down.
Without quality your users will not trust you, they will not believe you have changed, and will spend a lot of their time. Pushing bad buggy software one to users is not a sign that you have put them at the core.
Leaving aside the fact that Modularity is one of the most over used and consequently meaningless words how can anything buggy be modular? Do you want to (re)use a buggy module? Bugs are side effects, not something you want in modular code.