Customers always want a quotation of the amount of time it will take to write a certain feature (printing a new report, adding a new form, importing/exporting data, etc).
Suppose I estimated the correct amount of time needed (seldom happens), then I can get an accurate quotation simply using hours
× hourly rate
. Wonderful!
But things seldom go as planned, and customers actually wanted the feature a little different with respect to what I had implemented. So I would need to change this little thing, maybe the font, 'blue' color in 'dark blue', dash line into dotted line, ... all easy '5 minutes' task, delivered one at a time to let the customer to verify the result... and each little task needs a little test time, a little commit time, more time to compile and upload the upgrade to the customer... so I added extra work (adjustments) for free. Maybe the estimate was 2 days but in the end I actually worked 3 days for the same amount of money.
Because the price quotation is fixed I cannot ask for more money. The little changes are to fulfill the 'correct desired result', for customer—programmer misunderstandings or things unsaid (think about the tree-swing comic tree-swing article ;-) ).
In other cases, I think the hourly rate is not applicable since my quotation would be too high with respect to market price. There are little tasks that are a bit tricky and require a lot of time to make things work yet no one will spend hundreds of dollars for it (at the moment I cannot find an example). So I feel I'm forced to write as a quotation something similar to the 'market price' (pretending I will resell this feature to someone, sometime in the future).
In both cases I ended up doing a certain amount of work, for a very low hourly rate. As you may imagine I feel frustrated at times since I don't even get the 'hourly rate', the though to 'gain something' seems an impossible dream.
How do you manage these cases? Where am I wrong?