What is testing? There are almost as many definitions of that as there are software testers and I don’t think it can be contained in just one definition (at least not succinct one). However, today I’m going to put forward a definition that helps to point out and emphasize some of what testing is. This is not intended to be a definitive definition of testing, but is merely something that I’ve been thinking about recently.
Testing is figuring out how to align our judgement with the judgement of the customer and advocating for the product to change in ways customers judge as valuable
I think much of what we do as testers boils down to this. We are trying to figure out what customers will want and care about and trying to find any areas in the product where it doesn’t match these expectations. One of the hardest parts of our jobs is figuring out how to do this. How do we know what the mythical ‘customer’ wants? What do we do when two different customers want conflicting things? How do we distinguish between what I want and what a customer would want? How do we figure out the importance of the things customers don’t even know that they want or those things that have an indirect impact on customers (clean code, or testability features etc.)?
I’ve just raised a lot of questions that I have no intention of answering in the blog post, but come to think of it, these same things are also one of the hardest parts of a coder’s job as well. Perhaps test and dev really are in the same game. Maybe as testers a big part of our job is to take what we have learned about what customers want (and the ways we have managed to figure that out) and share that with developers so that they can better write code that meets customer needs the first time around. Maybe being a ‘tester’ or a ‘developer’ isn’t what is important so much as being part of team that can produce software that meets the customer’s needs.
Maybe we don’t need to sweat too much about what testing is, but should instead focus on what effective software development is. If effective software development efficiently produces software that is valuable to the customers, where does testing fit into there? I guess it depends on your team and how you work and what your skills are.
For me I think it means learning how to pass on much of what I have learned to the developers. I have skills that would help my team become more efficient, but sometime those skills are wasted on things like finding bugs. Finding bugs is helpful of course, but wouldn’t it be far better to work with developers on preventing those bugs? When I start testing a new feature and find 5 serious bugs in the first hour of testing, is that because I am skilled tester? – it may be, but does this use my skills in a way that maximizes their usefulness to the team? Could I have helped developers gain a perspective on the feature such that 4 of those bugs were fixed before the developer marked the coding as done?
Food for my thoughts. Let me know yours.