But I will argue that knowing complete product requirements up front is a quite rare exception, not the norm.
Fred BrooksThe hardest single part of building a software system is deciding precisely what to build.
Fred BrooksA basic principle of data processing teaches the folly of trying to maintain independent files in synchonism.
Fred BrooksWell over half of the time you spend working on a project (on the order of 70 percent) is spent thinking, and no tool, no matter how advanced, can think for you. Consequently, even if a tool did everything except the thinking for you - if it wrote 100 percent of the code, wrote 100 percent of the documentation, did 100 percent of the testing, burned the CD-ROMs, put them in boxes, and mailed them to your customers - the best you could hope for would be a 30 percent improvement in productivity. In order to do better than that, you have to change the way you think.
Fred Brooks