O problema é que o cliente tem pouca noção do que quer no início do desenvolvimento. Ele entende muito do negócio dele, mas pouco de software. Você também não pode garantir que seus analistas vão entender com perfeição o que o cliente diz. Some dos dois fatores e, com certeza, seu projeto terá diversos erros que o tornarão inútil para o cliente. Feedback é fundamental.
Em todas as metodologias, mesmo nas mais conservadoras como o RUP, existem ciclos iterativos, onde você entrega só partes para o cliente, revalia e faz mudanças.
Pega mal para sua empresa se você tentar enfiar para o cliente goela abaixo um produto que não serve para ele, só pq ele assinou um papel há vários meses atrás.
O melhor é montar um modelo de contrato flexível com o seu cliente. Se isso não for possível, mantenha o processo ágil. Um dos princípios fundamentais da agilidade é melhorar o contato com o cliente. Ele deve ser parte do processo de desenvolvimento, acompanhar a criação do software de perto. Isso dá a possibilidade de você conversar francamente com ele, de fazer ele entender o impacto das mudanças que pede, e o que isso afetará no cronograma. Não é raro o cliente mesmo propor um modelo de contrato mais flexível depois de uns meses trabalhando na metodologia.