My company has recently started to take on smaller software development projects. Typically small web applications to be used on a client's intranet. They are usually 3-5 months work in total.
Typically, the client doesn't know what they want exactly so they pay us for a smaller projects (3-4 weeks) to gather requirements and write a functional design. Once that is approved, we both know what is wanted and can quote for the remainder of the project and carry on. This is because they like to have fixed-price contracts rather than paying time and materials.
This development lends itself quite nicely to a waterfall model, we gather requirements, design, implement, test, deliver. However, despite this, we sometimes get to delivery and the client says "that's not what I meant".
My instinct is to make sure we have a more detailed design up front but I'm being told we should be "more agile" and iteratively development the system with the client so they can see it develop and we can catch problems with expectations earlier.
I'm struggling to see how to fit that into a fixed-price model. How can I estimate a project when the client doesn't even know what they want? I can see that Agile development would be beneficial in this scenario, but not with a fixed-price.
Am I missing something?