The data shows that some software project failures are indeed caused by sloppy programming, but a number of recent studies demonstrate rather convincingly that poor requirements management may be the single largest cause of project failure.
As it was, I wasn’t aware I’d set foot in the middle of one of the bloodiest and most protracted battles ever fought in the UNIX world, so I replied in kind. Vi, I argued, is for masochists and lickspittles on some sort of bizarre kick that causes second-year college students to run away to monastic cults until they get tired of eating porridge and sweeping the floors with rush brooms that are too short. Emacs, on the other hand, is a comfortable tool meant to be used by people who want a hand in personalizing the text-editing experience, the most important thing a real UNIX user ever does. People who use vi, I posited, are backwards and probably use the word “new-fangled” while they tug on their suspenders.
from - "The Joy of Linux"
"There are many examples of systems that tried and failed to implement fault-tolerant or distributed computations using ad hoc techniques rather than a transaction concept. Subsequently, some of these systems were successfully implemented using transaction techniques. After the fact, the implementers confessed that they simply hit a complexity barrier and could not debug the ad hoc system without a simple unifying concept to deal with the exceptions. Perhaps even more surprising, the subsequent transaction-oriented systems had better performance than the ad hoc incorrect systems, because transaction logging tends to convert many small messages and random disk inputs and outputs (I/O) into a few larger messages and sequential disk I/Os."