
Gosh! Where to start with “quality”? Okay, let’s nip this one in the bud. I’m not going to be talking about testing.
I suppose an interesting place to start might be with the word’s meaning.
“The standard of something as measured against other things of a similar kind; the degree of excellence of something.”
This definition of “quality” is the one we reach for when we say things like “It’s a high-quality hotel” and “Feel the quality of this leather”. It suggests that something is better than other things of the same purpose or nature.
And when many people think of “code craft”, this is often the picture they have in their mind: a “master craftsperson” making superior products with skill and care.
But it’s a little too vague to be a useful definition. “Superior” in what ways?
Which brings us to a second definition:
“A distinctive attribute or characteristic possessed by someone or something.”
Here, there’s no concept of “better”. “He had a shifty quality about him” is not a glowing review. “The chicken had a rubbery quality” is not a 5-star recommendation. We’re just describing an attribute or a property. Whether that atribute or property is good or bad, or better or worse, is very much in the eye of the beholder. Hey, maybe you like your chicken rubbery!
In the context of software, there are infinite qualities we can measure and describe: lines of code, number of features, maximum concurrent users, downtime, meantime to failure, difficulty for users to learn, and so on. We can go on (and on) describing software in its infinite dimensions until the cows come home.
But not all qualities are things we might care about, or that our customers might care about, or that end users might care about, or that industry regulators might care about.
So we have to choose what qualities we’re going to focus on. We have to decide what’s important to us. Because, and here’s the funny thing, when we set our sights on a quality, it has a tendency to be manifested. You get what you measure. (Or “Be careful what you wish for!”)
Arguably, the most elusive and notoriously mercurial quality of software is its value. The industry’s still stuck in an old-fashioned, one-dimensional mindset about the value of software products and systems, namely money. Chasing a single number in a complex world is typically a recipe for dysfunction. The best example in recent history is “shareholder value”, the invention of which could now be considered potentially an extinction-level event.
“People with targets and jobs dependent upon meeting them will probably meet the targets – even if they have to destroy the enterprise to do it.”
W. Edwards Deming
But some organisations have started to take a more balanced view. What, for example, is the impact of a software product on the reputation of a business? What contribution does a product make to communities the business interacts with? How does a product help or hinder in attracting the best hires?
The most effective approaches to defining quality and designing strategies for achieving it take a balanced view, considering multiple perspectives, and building and testing theories about how one quality relates to others. This helps teams avoid falling into the trap of lowering the cost of making the proverbial cakes at the expense of, say, customer satisfaction and future sales.
When I’m leading the team – when it’s up to me, basically – our development process, as well as our approach to improving the development process, is driven not by an idea for a product or a solution, but by a set of goals that take into account a balance of needs. Call it “outcome-oriented”, “goal-oriented” or even “problem-oriented” development.
We don’t start by describing the software or the system. We start by describing how the world will be different with the software in it. And we expect our understanding of that to change as we learn more through releasing software into that world, just as we expect that world itself to change because of the software.
In this sense, the software isn’t an end in itself, but part of a wider and continuously evolving strategy. The original sin of software development management, from which all the other sins flow, is failing to involve the developers in the formulation of that strategy – failing to make them stakeholders in the outcome – and failing to give them a reason to care about quality.
If you’re serious about building your team’s capability to rapidly, reliably and sustainably evolve software to meet rapidly changing business needs, visit codemanship.co.uk for details of high-quality hands-on training mentoring for software developers.



