We software developers must admit to having a spotty track record when it comes to building nontrivial software systems. Of course, some systems work quite well, and amateurs and veterans alike are often dazzled by what we've been able to accomplish: the Internet, simpler user interfaces, handheld computing devices, smart appliances, real-time process control, online interactive brokerage accounts, and the like. It's also true that there's a wide spectrum of possibilities between perfection and failure. For example, the word processor and the PC operating system we used to write this book collectively caused about two system crashes a day while we were writing this chapter, as well as exhibiting a number of other annoying quirks , idiosyncrasies, and "gotchas." Nevertheless, overall, the word processor and the operating system were "good enough" to support the task of writing this chapter, but they certainly weren't examples of perfect software.
In many cases, the results are far more serious. A study by the Standish Group  reported :
It is generally wise to take any such data "with a grain of salt," and perhaps things have improved in the industry in the intervening years . However, it's fairly easy for any of us in the industry to relate to such data. We all have a pet project that never went to market or an information system "tar pit" that we built and are still suffering from. So, when there's reasonable empirical evidence that we have a problem and that evidence correlates with our own experience, it's best to admit that we have a problem and to move on to problem solving. After all, that's what we do best. Right? Right?????