> ...*this book is not for people who think that they can write a perfect program and be perfectly sure that it is perfect... you must also believe that human thinking can be perfect…. Humans are not perfect thinkers... If your thinking were perfect, you would not need testing. If you believe that you must always be perfect, then you would find the existence of testing or testers rather upsetting, because it would imply that your thinking cannot be perfect. But if you say, 'Well, before I invested my life savings, I might want to do a little testing,' then you won't always be upset by the very idea of testing*... ~Gerald Weinberg, ["Perfect Software And Other Illusions"](https://www.amazon.com/Perfect-Software-Other-Illusions-Testing-ebook/dp/B004J4VVE2 "https://www.amazon.com/Perfect-Software-Other-Illusions-Testing-ebook/dp/B004J4VVE2")



## Don't Be Like Goofus

In the 1960s and 1970s, an American magazine called "[Children's Digest](https://en.wikipedia.org/wiki/Children's_Digest "https://en.wikipedia.org/wiki/Children's_Digest")" ran a series of cartoon illustrations called "Goofus and Gallant". They were two-panel allegories comparing a pair of twin brothers. Gallant always did the right thing; Goofus always did the wrong thing. The purpose of the cartoons was to gently scold the young reader into adopting the “polite” behaviour: "*You don't want to be like Goofus, now, do you? You'd much rather be like Gallant, right?*"

<img src="file:///Users/gregory.gauthier/Documents/BlogPosts/assets/8bde58f1-2111-47ad-89b1-0ccad9d7e3a3.jpeg" title="" alt="" data-align="center">

This is essentially what Mr. Weinberg is doing with the quoted argument: "*You don't want to be like Goofus, who thinks he's **perfect**, now, do you?*" Not only is this argument embarrassingly fallacious, it's deeply insulting. It is perhaps the worst possible way to convince a product manager of the value of software testing. Framing the question of testing as a juvenile moral imperative is almost assuredly going to alienate your colleagues and your customers.

## The Perfect Is The Enemy Of The Good

I've been in tech for 37 years. In all that time, I have yet to encounter anyone who believes there is any such thing as "perfect" -- whether we're talking about hardware, or software, or thinking, or finances, or anything else. What I *have* encountered, are lots of people who are over-confident, or not confident enough, or who have misjudged the risks involved in their choices (one way or another), or who have made faulty predictions about either the demand or the value of what they were building, or who have misjudged their own capacities.

None of this has anything to do with perfection, or anyone's belief that they are. What it *does* have to do with, is the mismatch between their assertions *about* reality, and what *actual* reality will yield up for them. And *that* is what testing is for. It is a tool for exposing the gap between our expectations, and the reality about which we have expectations.

The best testers are able to make that gap visible to a software development team, and help them to avoid falling into it. They can show how the ability to narrow that gap means the ability to reduce the risk of embarking on a software development project, and taking on the burden of its costs; and how it means the ability to better predict outcomes, meet market needs, and ultimately, increase profits. In short: testing is how an organisation enables itself to be better than it was yesterday. What testing is not, is a means by which that organisation can apologise for not being perfect.

The choice of whether or not to test is not a simple binary moral choice between being Goofus or being Gallant. It is a judgment about confidence levels, competence, market demands, functional context, and customer needs. The former, in fact, is a psychological trap. It's the reason why many companies fall down ridiculously expensive and protracted rabbit holes of endless testing and "quality gating". They're terrified of looking like Goofus to themselves, or one of their clients.

The mature organisation, however, understands that testing is just a tool. And tools are meant to be used at the right times, for the right reasons. Some things get tested rigorously, some things get tested lightly, yet other things get ignored. A seasoned software development team will be able to tell you which is which, almost intuitively. And where that intuition is missing, a good leader can fill in the gaps.
