As I have already discussed in a previous post I always tend to adopt an Agile Development approach in my projects.
My own motto is: Start Small, Grow Fast. I always use this as a very simple guiding principle when working on customer projects.
Some months ago I came across this nice picture that perfectly explains the Evolutionary Design principle.
We have to admit that the evolutionary approach can introduce some form of waste because sometimes we cannot reuse the components built in the previous iterations (you can't use bicycle wheels on a car).
However, it definitely allows to minimize a large upfront design investment and allows to deeply understand the real customer needs and expectations during the project.
A better understanding of customer needs is most valuable return of the iterative approach.
Using an iterative approach also helps to create a sort of "project rhythm" that has some other good side effects. Setting up monthly sprint demos, for example, will create a structure for managing customer feedback and change requests.
Last year I have presented a session name "Agile Project Management practices from the field" at the IBM Technical Academy where I have presented some Agile concepts and real life experiences. An extract of the presentation is available on SlideShare.
There is good (and free) book around named Scrum and XP from the Trenches if you want to learn more about Agile practices.