Software companies that install the right kind of procedures have made enormous progress in avoiding failures. First of all successful companies do not ignore uncertainty – the address it. They also establish quality control mechanisms that simultaneously speed up the whole process. And they reach for new paradigms such as building software from reusable components.
These companies, however, are by far not the rule; in fact, they are exception.