For all of the people who advocate extreme programming, how many are willing to get aboard an airplane with software that was developed in this fashion? While it is true that a software design will rarely anticipate every need or problem, it seems to me that just piling code up “until it works” is not a viable solution.
Another thing that the design gives is a structure to the project. Who works on what features? When is the project complete? How do you test the features in the software? Without a design, it seems to me that these questions cannot be answered.
In my past experience, the projects which have taken longer than they should have, had more bugs, had more bugs discovered by the customer and generally been crummy ( a technical turn used by old guys like me) are the ones where we jumped into coding (don't worry, I've done this same type of project before) with little or no design.
In the early '80's I worked at a company in the military communications industry. The hardware was a main CPU with about 20 8080 subprocessors connected to it. The company had a dedicated staff of about 20 people for collating and disseminating documentation on the design – of the hardware. You could walk in and get anything you wanted — how the CPU's communicated, schematics, anything. This was a complicated system — rack-mounted cabinets that filled a 2,000 sq ft. room. Since it was a military project, everything physical was documented. You couldn't find a scrap of paper in the building that described how the software/firmware was written. We had 500,000 lines of code, 200 software engineers, and no clue of where we were going.
Scary, isn't it?
Director, Applications Software Development
Global Payment Technologies, Inc