Then something changes and blows the estimates out of the water. But the MBA's think since only one line in the spec changed, the schedule should stay the same.
And that's when you re-negotiate, or quit.
From my experience, it's easy to make bad estimates because bad estimates are easy to make. If it's a big project, take your worst possible guess, and multiply by 1.5.
One of the biggest reasons bad estimates are so easy to make, is that the stakeholders "forget" to include too many of the details. And even, sometimes, some of the big essential features. It's debatable how many of these things are really "forgotten", versus not known or just intentionally left out to lower the estimate.
Therefore, I go about it this way:
I write out clearly what the specs are. Often this is just a repeat of the stakeholder's own specs. I estimate each major "feature" in the specs.
My standard contract states that this is only an estimate, based on the written scope of work just described. If at any point it looks like the work will take more than 10% over the estimate, it is time to examine why and the terms must be re-negotiated.
If any significant changes or additions are made to the scope of work, the terms must be re-negotiated.
These stipulations make sure everybody is talking, and if anything goes over estimate, everybody knows why. It also makes sure that if they add more work, I get more money.
I have a third stipulation I put in every contract: single point of contact. The stakeholder(s) must appoint one person, and one person only, who is to give me instructions and discuss the specifications. Nobody else, even the CEO, is allowed to do that.
I insist on these. So far, I have not had anybody turn me down because they thought the terms were unreasonable. That last clause keeps me from getting caught between conflicting instructions from different people. Other than that one, these are SOP for many engineering contracts. I just borrowed from those.