Wow, fantastic posts!
This definitely shows the neccessity of having a well defined contract and proposal. I can see some changes that I need to make immediately.
Our company writes software for other companies mainly FileMaker http://www.filemaker.com database driven websites. Usually a potential client will call and say, "I have a database that I would like to make accessible via the web", or they will say "I need you to build a website with a backend database system."
At that time most of them want to just tell me what they want over the phone, or they want to send me to websites that they have seen and they would like their website to incorporate a similar look and features.
Immediately I ask them for a detailed write-up of exactly what they want, as well as a detailed write-up as to what they feel the customer experience should be. I do this as a simple exercise to try and engage them and to get them to think all the way through the process.
Once I receive their project description, I type up a detailed proposal - with a time and cost estimate based on the information they have given me. I also inform them that we work on an hourly basis, not a "project" basis and that we will do everything in our power to stay within the quote. But, I have never had a client that new exactly what they wanted on the onset of the project development. Many had wonderful ideas, but it was my job as a consultant to forumlize a system that would bring their ideas to fruition and perhaps even enhance their original ideas without adding additional time an cost.
Once the client and I agreed that we both had an understanding of what was to be done. We would both sign off on the proposal. The proposal contains, project description, cost, and timelines, milestones and payment time-tables.
Usually, we charge 50% up front, then 50% once the project is completed. We host the clients datbase and website on a computer so they can see our progress. Once the customer is satisfied and agrees that we have completed everything in the proposal, then we ask for the last payment. Once we receive the final payment, we deliver the files.
I believe that hosting the solution (making it available during the entire development process) helps to take away any questions as to the functionality of the program as they take an active role in testing.
We also protect both our interest and our clients interest during the development process by engaging in a series of emails - asking for confirmation as to the completion of different parts of the project.
If there are other feautures that are wanted or needed, we will write a "change order" which is only implemented after the payment and completion of the first proposal. I`ve found that if you continually let clients add feature request during development, you run a chance of having the project go on forever. This can put you in conflict with scheduling if you have other clients as well as delay your payment.
These are just some of my insights, I`ve been in the software development business for about 15 years. The amazing thing is how incredibly complex the relationship between client and consultant can be. Once I think I know all of the nuances of my clients, one will throw a curve ball and I`m struck out at home once again :)