A recent twitter conversation I had with Ron Jeffries regarding quality in software development spurred me to write this post. Thanks for the inspiration, Ron.
I believe that quality in software development is predominantly a business decision. For clarification purposes;
(1) I use the word ‘business’ here largely to mean an organisation’s management team, and
(2) I use the word ‘decision’ because in my mind software quality requires “the act of or need for making up one’s mind”.
Firstly, how is quality in software development defined? The answer to this question is not as simple as one might think. Of the various definitions out there, the following words of Mr Jerry Weinberg in this post resonate with me and the way I perceive the meaning of software quality:-
“A definition of quality is always political and emotional, because it always involves a series of decisions about whose opinions count, and how much they count relative to one another.”
“Crosby’s definition: “Quality is meeting requirements.” Unless your requirements come directly from heaven (as some developers seem to think), a more precise statement would be:- “Quality is meeting some person’s requirements.” For each different person, the same product will generally have different “quality””.
If software quality is not rudimentary to define, how can we actually achieve it? To me, this is a fascinating question and I’m quite certain people have differing opinions on it. However, below is a brief discussion on what I think we may need in order to produce software that meets our overall users’ requirements, ie. software of high quality.
A skilled workforce. People want to master things from sports to music to the latest cool new version of their favourite programming language. Developers want to write good clean code. We need to enable them to do so. At the very least we should probably try and get out of their way while they attempt to master something themselves.
Motivated people. Hopefully we all agree that the days of believing knowledge workers are motivated by material things and/or monetary rewards are long gone, so specifically; we need people that are intrinsically motivated by a strong sense of purpose. What were the forces at play that brought people together to write software like Firefox, Linux and the Apache Web Server in their spare time? We should make deliberate attempts to harness the power of these forces and purpose is key.
Self organisation. Boundaries in self organisation are important but people should generally be afforded the opportunity to organise themselves around a piece of work. If we already have highly skilled and motivated people, we shouldn’t dictate how they need to go about doing their work either. Nurturing an environment that promotes autonomy and a sense of agency is a great way to keep people engaged, too.
Theory Y management. People are not inherently lazy and they don’t need to be put under undue pressure to perform their jobs. Measuring people against targets, periodically reviewing their performance, dangling incentive scheme carrots in front of them and putting them in their little job profile boxes are management tools that are way past their bedtime. None of this malarkey helps to improve the effectiveness of our organisations. We should also acknowledge that our organisations are networks of interconnected human beings and that they are complex systems. Let’s think in terms of synergy and drop those stubborn command and control mindsets.
How regularly are product development teams overly constrained in their technology or design and architectural choices? How regularly do poorly structured organisations (ie. silo’d or divisionalized) impact on quality due to eg. frequent handovers being required? How regularly are product development teams forced to use predefined methods, methodologies or processes? How regularly are knowledge workers subjected to theory X mindsets and management tools that are highly effective at rendering people ineffective? How many organisations release software on quality as opposed to on schedule?
In order to produce software of high quality the business must create an environment that supports and enables it. It’s a mindset. It’s a culture.
Writing good clean code is extremely important, but it’s not half the story.
Quality is a business decision.
Thanks for reading,
The Cynefin framework (see section on software quality).