I don’t know a single software developer who doesn’t profess a commitment to quality, and who doubts that he or she designs, writes and publishes solid, secure applications filled with clean, efficient code.
I don’t know a single development team manager who won’t insist that his/her team writes great software, and who wouldn’t be mightily offended if you suggest otherwise.
I don’t know a single IT professional who gets up in the morning and says, “I’m going to do a really lousy job today.”
Yet software has bugs. Platforms have vulnerabilities. Applications sometimes don’t meet requirements. Systems experience crashes, Blue Screens of Death, and kernel panics. Hackers find a way to penetrate networks, servers, websites, applications and databases.
Clearly there’s a disconnect. Thinking about the great Watts Humphrey (see “ ‘Father of Software Quality’ Watts Humphrey dies at 83”) got me thinking about these issues. I hope it’s got you thinking about them too.
The challenge isn’t that our teams suck. It’s not that we write crappy code. It’s not that our architects and designers don’t care about security and application performance. It’s not that our programmers are idiots. It’s not that our testers are asleep at the switch.
We don’t have bugs because we’re losers, or because we don’t use the right agile methods, or because we don’t care, or because we don’t use the right software suites or “best-of-breed” solutions, or because we haven’t “built a culture of quality.”
There’s no silver bullet. The truth is that writing complex software is hard, and our modern platforms and protocols are very complex. No matter how hard we try, bugs and inefficiencies will always creep in—and in terms of vulnerabilities, there’s always something we haven’t thought of. So, for any non-trivial application, we’ll always be fixing and patching.
What we need to remember, and what we need to communicate to our teams, is that we acknowledge that this is hard, but it’s our job to constantly find ways to do better, learn from our mistakes, stay responsive to our customers and their requirements, and keep doing the best job that we can.