Can you clarify what you mean by "even if you are over budget" ?
What if you estimated all of the features, built them, and then the client comes back with a bunch of new features and changes that would require a new contract. Do you do them for free?
What about ongoing support? My contracts give the client one week to test any features, and once that week has elapsed without any issues, the contract is considered "complete" and they have to pay the other 50%. Would you be for or against that practice?
I guess I am wondering where the balance lies between protecting yourself and protecting your reputation.
Unfortunately, clients (just like all human beings) are squishy and forgetful. Your reputation can get damaged through no fault of your own. When do you decide to let someone go because their expectations don't match the contract they signed? Is the penalty to your reputation so high that it's never worth the time you would save by doing this?
I am genuinely curious to see how other contractors manage this.