Some ineffective development practices have been chosen so often, by so many people, with such predictable, bad results that they deserve to be called "classic mistakes"...
This section enumerates three dozen classic mistakes. I have personally seen each of these mistakes made at least once, and I've made many of them myself...
The common denominator in this list is that you won't necessarily get rapid development if you avoid the mistake, but you will definitely get slow development if you don't avoid it...
For ease of reference, the list has been divided along the development-speed dimensions of people, process, product, and technology.
People
#1: Undermined motivation...
#2: Weak personnel...
#3: Uncontrolled problem employees...
#4: Heroics...
#5: Adding people to a late project...
#6: Noisy, crowded offices...
#7: Friction between developers and customers...
#8: Unrealistic expectations...
#9: Lack of effective project sponsorship...
#10: Lack of stakeholder buy-in...
#11: Lack of user input...
#12: Politics placed over substance...
#13: Wishful thinking...
Process
#14: Overly optimistic schedules...
#15: Insufficient risk management...
#16: Contractor failure...
#17: Insufficient planning...
#18: Abandonment of planning under pressure...
#19: Wasted time during the fuzzy front end. The "fuzzy front end" is the time before the project starts, the time normally spent in the approval and budgeting process...
#20: Shortchanged upstream activities... Also known as "jumping into coding"...
#21: Inadequate design...
#22: Shortchanged quality assurance...
#23: Insufficient management controls...
#24: Premature or too frequent convergence. Shortly before a product is scheduled to be released there is a push to prepare the product for release--improve the product's performance, print final documentation, incorporate final help-system hooks, polish the installation program, stub out functionality that's not going to be ready on time, and so on...
#25: Omitting necessary tasks from estimates...
#26: Planning to catch up later...
#27: Code-like-hell programming. Some organizations think that fast, loose, all-as-you-go coding is a route to rapid development...
Product
#28: Requirements gold-plating. Some projects have more requirements than they need right from the beginning...
#29: Feature creep...
#30: Developer gold-plating. Developers are fascinated by new technology and are sometimes anxious to try out new features... -- whether or not it's required in their product...
#31: Push me, pull me negotiation...
#32: Research-oriented development. Seymour Cray, the designer of the Cray supercomputers, says that he does not attempt to exceed engineering limits in more than two areas at a time because the risk of failure is too high (Gilb 1988). Many software projects could learn a lesson from Cray...
Technology
#33: Silver-bullet syndrome...
#34: Overestimated savings from new tools or methods... A special case of overestimated savings arises when projects reuse code from previous projects...
#35: Switching tools in the middle of a project...
#36: Lack of automated source-code control...