What is quality engineering?
In Why Quality Engineering, I laid the foundation of what QE is all about. Note the emphasis:
Quality engineering is more than testing earlier in the software life cycle. It's about looking at all the facets of software engineering. From delivering the product to the processes we use to build it and the people involved. It's about taking a holistic approach to quality and understanding how quality is created, maintained and lost throughout the software life cycle. It is then, using this insight, we build quality at the source.
There's a lot in that one paragraph that I'd like to unpack, as it holds the key to my thoughts on what quality engineering is all about. But before we can, what does quality even mean?
What is quality?
The Oxford English dictionary defines quality as:
1] the standard of something as measured against other things of a similar kind; the degree of excellence of something
2] a distinctive attribute or characteristic possessed by someone or something.
But what you measure something against or what is classed as a distinctive attribute will vary from person to person. What I think is a distinct attribute and, therefore, valuable may differ from what you believe are distinct attributes. Which led me back in 2019 to define quality as:
Quality means different things to different people
Which the late great Gerald Weinberg summed up years before me as:
Quality is value to someone
Therefore, understanding what quality means for your teams and products will depend on who you ask. However, having one definition of quality can be challenging as we all have our perspectives on excellence.
Consequently, trying to engineer quality into products will take a lot of work, as you'll never be able to satisfy everyone's interpretation of what makes a quality product. So what do we do?
Back to my post from 2019:
One of the ways I've started to help teams understand this is via the idea of lenses of quality.
Each of these groups of people view quality with a different lens therefore see the same system differently to one another. We as testers should help our teams to see quality through these different lenses by helping them identify these groups and what their measures of quality are.
By thinking of quality as different lenses held by different stakeholders of our products, we can start building a list of distinctive attributes they value. From this list, we can define what quality means for our teams and identify which attributes are negotiable and which are not.
Quality can therefore be summarised as follows:
Quality - attributes that are valuable to key stakeholders
Now we have a basic definition of quality, we can start to unpack some of the other areas. Firstly what do I mean by products, process and people or 3Ps
Products, Process and People (3Ps)
Engineering teams have the most direct influence on the quality of the products or services they provide in these three areas.
Products are typically the software that the team produces. Processes are how they create that product, and the People are the team members who will use the processes to create the products.
When we think about quality, we usually only consider the product quality attributes. However, those attributes are highly influenced by the processes adopted by the team and their inter-team interactions. Therefore, if the quality of their processes or inter-team interactions is poor, these will likely transfer to their products.
Creating, maintaining and losing quality
Building software is a complex process with many factors affecting its outcome and quality. If we only focused on inspecting for quality using testing, e.g. exploratory testing or automated end-to-end testing, then we would know to what degree the quality attributes we value are present. But this would tell us very little about how those quality attributes came about or how they can be maintained going forward.
By studying how quality is created and lost, we can begin to see the mechanism by which the quality attributes we desire come about. In particular, we need to focus our attention on the three levels of the products, the processes and the people.
The study of quality and how it is created, maintained and lost is a core part of quality engineering.
Building quality at the source
If quality engineering is the study of quality, what is a quality engineer?
First, what is engineering from Wikipedia
Engineering is the practice of using natural science, mathematics, and the scientific method to solve problems, increase efficiency and productivity, and improve systems.
It goes on
The term engineering is derived from the Latin ingenium, meaning "cleverness" and ingeniare, meaning "to contrive, devise"
Considering these two views of engineering, a quality engineer works to solve quality problems and inefficiencies to improve software systems. Specifically by applying their knowledge of how quality is created, maintained and lost at the levels of products, processes and people. Or, to put it more succulently, a quality engineer enables software teams to build quality at the source.
I plan to dive deeper into these three areas in future posts, but this gives us a good starting point to get people thinking.