Consistent Quality Requires Consistent Processes

It was a restaurant my wife and I had passed many times, and we had always told each other, "We must try them some day." When we finally tried them, we were pleasantly surprised. The food, the service, the atmosphere, even the price were great! "This will be a regular stop for us," we agreed.

But on our third visit, we had to send our food back twice. Another time, we waited nearly an hour for our order. Then, some time later, we were seated at a table that was not clean. Most of the time, things were great. But as we experienced sporadic problems, we visited that place less and less often.

Why is it that a business can do so well some of the time, and mess up so badly at other times? What is it that causes inconsistency? If we could have taken a peek behind the scenes at that unnamed restaurant, what would we have found?

Inconsistency in quality-of food, of service, of products, of software-of anything is almost always caused by inconsistency in the way those things are done. Poorly prepared food in a restaurant is often the result of a cook who in unfamiliar with the procedures for making certain dishes. A dirty table will result from the bus-person taking shortcuts.

In the same way, quality problems in software have their genesis in some sort of inconsistency. For example:

Because the quality of our software is so closely tied to the consistency with which our processes are followed, it stands to reason that this should be among the first places we look when trying to solve our quality problems. But that is easier said than done.

Suppose your organization has a problem with interfaces among components not working correctly. During integration and system testing you end up spending inordinate amounts of time diagnosing and fixing these interface defects. So, where do you look to find the offending process? Which of your processes should you suspect? It may be the way you do the architectural design for the system. Possibly, the component designers struggle with translating the system architecture into workable designs. Or maybe it is a coding issue. But it may also be that the architecture reviews (or design reviews, or code reviews) are not effective. Then again, maybe it is a matter of training the staff to be competent with the technologies and techniques they are using. Maybe the problem lies in the ways that project-staffing decisions are made. And the list goes on.

This sort of a reactive approach to our processes is terribly inefficient, so we want to avoid taking this sort of reactive approach to quality problems. It is an inefficient approach for two reasons. First, you wait to take any action until there is problem, which means you have incurred the waste and rework inherent in defective systems. And second, as we observed above, diagnosing the actual root cause of the problem is not an easy task. It will require significant investigation to get to the root of the matter. And all of this effort is being expended before you have taken the first step toward actually fixing the problem!

The alternative to a reactive approach is a proactive approach. That is, understand and monitor the effectiveness of your processes so you can avoid process-related problems. Make sure your processes are working well and used consistently, and you can avoid much waste and rework. This proactive approach is not a new concept. It has been the foundation of quality programs for decades, ever since the 1930's and 40's, when Dr. W. Edwards Deming began teaching us how to control quality. And in the past two decades, we have begun learning to apply it to software. Consider...

So, both the traditional plan-based CMMI, and the new Agile methods agree that consistency in the way processes are used is so important that a proactive approach is necessary to ensure that consistency is there.

So, what does that mean for us? It points out a set of activities that we should be engaging in to assure the quality of the software we produce. It shows us that if we make an investment in ensuring that we are using appropriate processes, and if we monitor how those processes are used to make them consistent, then our investment is likely to be returned to us in the form of 1) better quality in the software that those processes produce, 2) significantly reduced waste and rework (which will help our budget and schedule performance), and 3) less time wasted trying to diagnose the root causes of problems.

Proper attention to keeping our processes effective and consistent will not cost us time and money. To the contrary, in the long run, it will save us much more than we invest!

If that restaurant my wife and I used to frequent had paid attention to its processes, they would have discovered and corrected the inconsistencies in their performance long before they lost us as customers. Indeed, we (and likely others) would have left a lot more of our money in their till, and maybe, just maybe, they might still be in business today.

® "Capability Maturity Model", "CMM", "Capability Maturity Model Integration" and "CMMI" are registered with the US Patent and Trademark office by Carnegie Mellon University.