Automating Embarrassment
I recently received this memo:
…unbeknownst to us as it only affected certain files and only a few [investors] … our data was unexplainably fatally contaminated. We have worked diligently, along with our software vendor, to fully correct the problem.
I can’t read that without feeling the sting of being in their shoes.
Whose fault was it, the software vendor or the user? Does it matter? This software vendor’s client bears the brunt of this embarrassment with their clients. That’s everybody’s problem.
I won’t name names: I’m not out to further embarrass them.
My point isn’t to gawk, but hear the clarion call to vigilance:
- The design must be sound.
- The implementation must be bullet-proof.
- The code must be as clear as possible.
- No undefined behavior.
- No mysteries.
- Find a problem? (Even with the design?) Fix it. Now.
- Are users doing things you don’t expect? Resolve it.
- Do your tests cover what could really happen?
The pressure to deliver is constant, but has to be weighed against what you’re really delivering.
One of modern computing’s founding fathers says:
Computing’s central challenge, viz. “How not to make a mess of it,” has not been met.
—Edsger Dijkstra (November, 2000)