I've got a project based contract to build a software app. The planned contract initially stated an aggressive 8 week release plan, and it was stated that the designs and API were at or near completion. Payment was 25% up front, 25% at milestone, and 50% on release.
For the first 4-5 weeks this was the plan except that designs and API were delayed. Not a big deal. At week 5 we were about 80% complete, and the client came back with drastically reduced business requirements that required redoing the product. New designs were issued. Work was started to implement this, reusing some of the previous work but still redoing design requirements.
We're now at week 12, and newer revised documents are issued with further changes. We hope to get them finalized in 2 weeks, but the target release is not for 4 weeks still. The original 6 weeks of work are now discarded at this point, as things evolve.
As you can see, it is a project that has taken longer than expected. The client's budget was pretty fixed and reasonable, but it has taken a longer duration of my time than expected. Some of this is normal software iterative process, however redoing 3 times and constantly changing release plans is difficult.
I'm wondering how this can be avoided in future contract specification, if at all? Is there a way fairly handle excessive re-iterations of work and timeline expansions, and when does this turn from normal project-lifecycle into excessive client expectations?