We’ve all been there are some point. It’s crunch time. The deadline is looming. Everyone on the team is frantically working to get the product shipped. Crunch time reveals to us what we really see as important. During crunch time certain things get dropped. Think about the things that get dropped on your team during crunch time and I’ll bet that they all relate to one thing:
We stop checking things in as much detail as we used to. We take some shortcuts in our coding. We do things that we know are not good for the health of our code base. We quickly patch up defects without addressing the underlying issues. Under pressure, the first thing offered on the alter of the Almighty Deadline, is quality. Our real priorities are revealed. We might talk about how we take quality seriously, but our actions show differently. Our actions show that quality is seen as the low guy on the totem pole. Perhaps this is why in some places testers feel like they are lower status members of the team. Testers are concerned with quality. How do you think they are viewed if we see quality as the least important part of the software development process?
But what if it isn’t? What if quality is actually the most important part? What if many of the problems and challenges we face in the software industry are directly related to quality? If that is the case, the way we are approaching our problems is totally upside-down. Instead of the first thing to go, quality should be the last. Instead of a dispensable part of our process it should be the keystone of everything that we do.
Here is the thing: If we want to be able to move more quickly we need to invest in quality first. Quality can’t be an afterthought. It can’t be something we tack on to the end of the process. It needs to be something that is fundamental to the very core of how we go about making software. Until we understand this and until we start to act like we believe it, we are just going to keep spinning around on the same hamster wheel.
One of the challenges we face with quality is that it is often a hidden property of the system. Imagine you go to your local generic chain furniture store and pick up a pretty cheap table. Or imagine you buy a custom made table for 5 or 10 times as much. The two tables might look very similar (initially), and yet which one do you think has higher quality? Quality is often not immediately visible. This is what make it so tempting to cheat on it. At crunch time we can hide sloppy work and shoddy testing, because it won’t be immediately visible. But the fact is, poor quality will be experienced by someone. It won’t stay hidden forever.
As testers we are like the mechanic friend you take along when you are looking at a new car. You see a car that looks nice and has some nice features – it’s even red! – but then your friend crawls under the car and opens the hood and shines his flashlight around to see in the cracks and crevices. He comes back with a list of problems (or potential problems) that you’ll want to consider. He’s slowing down the process. Now you have to go look at another car or negotiate a lower price or get the owner to fix those things. You just want that car now, so you shouldn’t bring your friend along next time right? Right? Or not?
Another challenge when it comes to quality is that we don’t pay the price. If we release a low quality product the company might get hurt and it might loose some money, but oh well, we can always find a job somewhere else right? And besides somebody has to fix up all those problems. The reality is most of the pain of the bad quality products we work on get passed on to someone else.
Invest in Quality now!
But we are ethical – and I really believe we are – so most of us want to do the right thing. We want to make something we are proud of. We want to help people. We want to do right by our customers and our employers. So how do we do this during crunch time? We need to get these features out for the good of the company and the customers. They are important. How do we do that without sacrificing quality?
We do it by investing in quality now.
You know you are going to have crunch times. We live in a world where we can’t see perfectly into the future and so there are going to be times when there is a crunch to get things done, no matter how well we have planned. We also know that during crunch time one of the easiest things to sacrifice is quality. So prepare for this. Invest in your quality well before crunch time comes.
When we are driving for that final push, do you think it will help to have a robust and useful set of automated tests in place? Well, you certainly won’t get that up and running during the crunch time – invest in quality now.
When you are in the middle of a crunch do you want to discover fundamental flaws in your architecture or design? You are only going to find problems like this early if you look for them early – invest in quality now.
When the pressure is on and someone is out sick, do you want to have to feel your way through some tangled, unreadable code in order to fix a bug? Having clean and readable code doesn’t just happen by itself – invest in quality now.
When you are trying to merge that feature in, do you want to have no time for interactive testing because you are waiting for it to make it through the build pipeline? Good build pipelines take time to build and maintain – invest in quality now.
When there is very little time for testing do you want testers to struggle to trace down issues they see? At crunch time it is too late to think about testibility – invest in quality now.
Crunch times will come, and during crunch time we will have to change some of things that we do, but if you want to come out the other side holding your head high and able to be confident that you’ve done a good job, you need to think about quality. Don’t put it off or leave it as an afterthought. You’ll be much more successful as a software development team if you start with quality.
Invest in quality now.