But then there is the kind of software that must not break, ever. The kind of software that is so complex that every time a developer touches it, he is bound to break something, somewhere, because no human can keep all that complexity in his head.
Your operating system falls into that category. Your web browser. The machines that bring humans to the Moon, keep you alive at the hospital or your car on the road. You know, the difficult stuff.
I've spent a few years as test manager for a web browser engine you may have heard of. The team consisted of some of the best developers I've ever met. Razor sharp guys. But despite their brilliance: for every bug fix they did, there was a 30% chance of them breaking something. In the most complex parts of the layout code, that number was closer to 50%.
50%!
Having less than one tester per two developers on that particular project would be madness. And I'm not talking about outsourced monkeys pushing random buttons ten time zones away. I'm talking about people more evil than the devil himself – able to conjure up the kind of tests that will rip your software to pieces in ways you could never imagine. I'm talking about proper test engineers that can automate away all that boring shit humans don't want to do.
A sparring match between a great developer and a great test engineer is truly a thing of beauty. And in the end, both of them win.