My current project is making me see more and more that iterative development with constant input from the end users is the best way to have a successful outcome. Recently I was involved in a conference call with the end users and the business representatives. These representatives had given us all of our requirements and we had no direct contact with the people in the field. BIG MISTAKE!
This was compounded by the fact that the client is following a very waterfall approach with tons of documentation. Throw in the fact that they are not willing to re-evaluate time-lines and resources after phases in the process and all you can do is bring on the antacids.
Now I am not running to throw out all of the documentation and screaming for anarchy. In my opinion the best approach seems to be to get a well define list of the high level goals of the project. From there break it into digestible chunks. After each piece is delivered re-evaluate what should be worked on next. Most importantly, get user feedback early and often.
Ok, so it sounds like Scrum. Maybe it is. If it works, use it. Keep it simple and usable. As always other opinions are welcome.