On second thought, my questions the other day were not so much about crappy coders as they were about risk aversion. Rephrased in such terms, the questions might read more like:
- Does risk exist?
- Is risk aversion sufficient for goal acheivement?
- Can risk aversion inhibit goal acheivement?
After giving it some more thought, my answers to these questions are yes, depends, and yes.
Let’s start with the first question: does risk exist? Sure it does. There are any number of things that can happen that can prevent somebody from acheiving his goals. He could get hit by a bus, forget to complete some critical step, or overlook an important piece of information. If there was no such thing as risk, neither would there be insurance companies.
As for the second question — is risk aversion sufficient for goal acheivement? — it seems to depend on what is included in the list of risks to be averted. I’d guess that most seasoned developers have had a chance to work on a project that came in on schedule, under budget, and meeting all of the stated requirements, but was a piece of crap — the code was a mess, the interface was clunky, the documentation was incoherent, and the customer hated it. (I can’t say for sure, but I’m guessing Microsoft Bob went something like that).
One could argue that the project managers on such projects simply don’t recognize all the risks. If they would look beyond budget, schedule, and requirements, they would be able to avoid the other problems. The problem with this argument is that there is always the risk of not recognizing a risk. Perfect risk avoidance is impossible.
Practically speaking, though, most major risks can be easily identified and dealt with in some way. I’m sure that’s what the Bob developers believed, too.
On the third question — can risk aversion inhibit goal achievement? — definitely. Examples abound. High school boys don’t approach the girls they like because they fear rejection. Software project managers avoid stick to the most fashionable technologies out of fear that they might have to answer for failure with something other than, “We used industry best practices and technology. I don’t know what might have gone wrong.” And I won’t mow the lawn today because it looks like it might rain.