I am surprised no one mentioned agile methodologies (SCRUM etc) - imho, it would be much easier for both sides if customer could provide constant feedback and receive results every 2 weeks or so