Quality is one of those nebulous terms that can be often hard to articulate or define, but we can all recognize it when we see it in a particular product or service.   For example, the measure of quality in a car can often be determined by how the door closes – does it close with a firm, quiet, secure manner? or does it rattle and show day light?  The difference between a door closing on a Range Rover and a base model Kia/Ford is dramatic – you can instantly tell which one has the higher quality (hint it is not the Kia/Ford).  Or that utensil or knife in the kitchen, handy down over the generations, that still perform as well today, as they did the first time they were used 50 years ago – that is quality.

Quality in the software world has gone up over the years, where now we don’t even think about Excel ever crashing, or Word not saving a file correctly, or a database that never fails to save data (this was not the case for Oracle in the early days, when it was well known they would routinely lose complete rows of data).

Software is all around our daily lives, keeping us alive in instances (embedded software in medical equipment, or the software powering our modern cars), and the level of standard and output there, literally puts human lives on the line.  Quality is not just a bar to aim for – it is the minimum to which we all need to put into our work.

The 8 dimensions of Quality

There are many attributes that are associated with defining quality, and fortunately there is well know measure of quality over 8 categories, defined by Professor David Garvin.   A given product/service you are measuring quality commonly use one or more of these attributes.

The eight dimensions of quality are defined:

  1. Performance
    Brands can usually be ranked objectively on individual aspects of performance.
  2. Features
    Features are additional characteristics that enhance the appeal of the product or service to the user.
  3. Reliability
    This is a key element for users who need the product to work without fail.
  4. Conformance
    Is the product made exactly as the designer intended. Customers usually associate high quality with a product that exactly meets its requirements.
  5. Durability
    Durability measures the length of a product’s life. When the product can be repaired, estimating durability is more complicated. The item will be used until it is no longer economical to operate it. This happens when the repair rate and the associated costs increase significantly.
  6. Serviceability
    Serviceability is the speed with which the product can be put into service when it breaks down, as well as the competence and the behavior of the service person.
  7. Aesthetics
    This is the usual appeal of the product, often taking into account factors such as style, color, packing alternative and other sensory features. i.e. Those that have features the basic performance of the competition.
  8. Perceived Quality
    Perceived Quality is the quality attributed to a good or service based on indirect measures.

Good Enough

Building quality can be daunting and difficult at first – “good enough” is no longer, well, good enough – so knowing the dimensions to which we can focus on, to increase our “quality” allows us to deliver accordingly.  The dimensions, are like a design pattern for quality; a language for us to discuss and measure our quality rating for any given output we produce.

Which of the dimensions do you think apply closely to our world of software production?  The ones that stand out the most would be: Performance, Features, Reliability and Conformance with Aesthetics coming into the visual components of our output (user experience/web pages).   What does all this mean and how can we apply it?  Let us quicky visit each of the relevant dimensions.

  • Performance
    Our solutions should perform as fast and consume as little resources as possible, within reason.
  • Features
    We should be offering features that are meaningful and have empathy for the goals they are trying to achieve.
  • Reliability
    Each and every function that is asked of us, we perform every time without fail, with consistency, irrespective of the type of data (clean or bad) that is put in.
  • Conformance
    Listening to the wants of our users, determining what will make their roles easier and simpler, and delivering on that promise.
  • Aesthetics
    Creating experiences that are easy to use and understand, requires no decoding, or a lot of prior business knowledge.  Using industry standard components commonly found elsewhere on the web.

Building Quality

It requires effort, care and attention at each stage of the production cycle to achieve a quality product.   Quality is not a stage in the development process, it is not something you add later.  It permutates with everything we do.  The quality of our the code can be measured in part by tools such as semi-standard and SonarQube.  Yet those tools do not measure the design or structure, or the end user experience.  An “A” rating from SonarQube does not mean you have built quality, all it means is that you are well on the road to reaching a higher standard of output.

The vast majority of software bugs stem from a lack of imagination from the developer.   They did not anticipate the type of data being used in their code/function/application.   Ever tried to get Excel to open up an MP3 audio file?  What happens?  Does Excel crash?  No, it simply says there is an unknown format (and it does this by doing a lot more than simply look at the name of the file extension).   The Excel developers anticipated that files need to be validated before blindly opening them. 

We have to look at all our code/web forms, all our touch points, and keep asking ourselves the question: What could go wrong here, and how can I prevent it?

A litmus test I often ask is, would you be comfortable with your code running in a medical life-support machine?  Are you confident enough your code would not kill the patient?

My degree was embedded software in robotics, and one of my first jobs was an embedded C developer at the professional audio unit in Harmon Kardon, where I wrote software that ran in audio equipment used in large concerts.  I got my first real taste of consequences of getting it wrong, when I was at a sound check, in Wembley Stadium (London), with none other than Tina Turner on the stage preparing for her Goldeneye tour.  My manager back then, leaned over to me, while Tina was blasting out “Private Dancer” and whispered “a null pointer here would really piss off a lot of people eh?”.   That throw away comment, to my 21 year old self, was enough to change my whole outlook on how I wrote code.

Quality can be summed as having confidence that every time you need to call upon it, it will deliver without fail. 

Any failure in our software, ripples through to the user and ultimately to the client relying on us.  If we continually fail our client, they will remove their business, resulting in us not able to pay our salaries.  We have a lot of people looking to us to deliver the quality that allows them to do their jobs.  We therefore cannot afford to fail.

It is up to each and everyone of us, to do the best we can, so we can continue to deliver value, confidence and ultimately the end quality that our clients have come to rely on.