These three columns or position pieces by 'Uncle Bob' Robert C. Martin of ObjectMentor, setup the classical problem of systems development and offer a well-thought-through response. Consider that Bob wrote these in the days prior to our wider awareness of practice-oriented approaches that were just then gaining ground such as XP, SCRUM and the Agile Manifesto. However, to paraphrase from Martin's Engineering Notebook on IID (Martin, 1999)
"Don’t let these articles mislead you. If you follow the advice above and begin developing projects in an iterative and incremental way, bluebirds will not fill your sky. Schedules will still be missed, there will still be bugs, problems, and mis-aligned expectations. Software is, after all, software; and software is hard. However, what you will be doing is using a process that produces data; whereas waterfall produces none. With that data, managers can try to manage the project."