Strongly disagree. This is a failure of communication. If you're billing by the hour, your client should have a general idea of how long something will take. A lower bound and an upper bound. Time-box all tasks.
As soon as you know you're going to break through the upper bound, stop work, inform the client, provide a new estimate, and let them make the call.
Eating the difference defeats the purpose of working hourly.
> you may not know what your rate should be. In these cases, you may want to consider flat rate arrangements.
Disagree with this as well. If you don't know what your rate should be, how can you name a flat rate? You should know what your competition is asking for and ask for slightly more, because you're better.
In a world with perfect information, you'd be right. Unfortunately, people have to make decisions with incomplete and potentially misleading information all the time. Demanding perfect time-boxing ahead of time is a recipe for disaster.
Dear client, this task will take 2 to 6 hours. If I find out it will take longer than this, I will reach out.
Dear client, I am 1.5 hours into this task. Based on my experience, it look like it will take 7 to 10 hours instead. Should I continue?
For all of this to work well, you need to have experience in estimating well and also understand that whatever number pops into your head, multiply it by 2 and tell the client that. I have never had a client be pissed at me because I finished something for less time/money than they were expecting.
That said, this sort of thing should really be used for highly indeterminate tasks, like fixing bugs.