I've been working for a client for several months. Up until now, the estimates have been pretty casual: sometimes they ask when I think something will done. Often they just assign me a story and I bill them for it.
But recently a feature took substantially longer than estimated (they pressured me to lower an estimate, and I stupidly caved). Now they're asking that I make an estimate for a feature, get approval, and then not bill for more than the estimate.
What do folks think I should do? To me, software engineering is fundamentally a chaotic activity. Sometimes something you think will take an hour takes a day.
What seems fair to me is that I set an estimate, and then bill for the estimate, regardless of how long it actually takes... that way my underestimations are compensated with my overestimations. Then I can track my velocity and over time get paid for the time I actually work, rather than constantly absorbing the overages.
What do other folks do?