To give you an idea, we just hired a company for a $10,000 project they failed to deliver and we have no other option but to throw more money. Generally we have already figured out it will take us 2-3* the cost of what the vendor wants. So double check your work because if you screw up we may not hire you again.
When paying for the exact time and materials you get exactly what you paid for in equivalent work hours and their output. It's a more flexible arrangement where if the client has new or evolving requirements we can pick them up without having to re-negotiate the whole contract. I remember at least one fixed bid contract where we ended up working nearly six weeks extra and the agency had to eat that cost so we made nothing in profit, but at least fulfilled the contract.
I try to pad my estimates appropriately either way so we are usually on the under side of our quoted estimate for a given project with some wiggle room. Clients always appreciate when the work ends up being a bit cheaper than the quoted estimate. On the other hand, if we don't complete something the client does end up having to pay more (or source elsewhere, but almost always they prefer to keep us on if we've been doing good work for them).
If you fail, I get promoted for protecting the business by not doing it myself. If you succeed fast I look bad.
Being paid hourly rather than salaried means your income is heavily dependent on the hours you can secure. This can lead to awkward situations. I have to accurately track and itemize all my time, down to the minute, which is a big pain. When I finish something quickly I sometimes end up making less money for being efficient (but I never over-bill or inflate hours, since I think this is unethical and would also damage my reputation and ability to win repeat contracts). I sometimes offer potential hours to multiple parties hoping one of them bites, but if two or more bite at the same time suddenly I've over promised and have to deliver on more work than I can handle. I have to alway be looking for the next contract and always be ready to reopen an old contract. I'm often treated as an outsider working for an external team rather than a core team member. I'm the first to go when a company needs to save money. If I take longer than expected on something it becomes very stressful to justify to the client. I get dropped in to projects that have lost their technical team or technical lead, and I am expected to pick them up very quickly and deliver the same quality of work (or higher quality, since I have a high hourly rate and bill as an expert in the field). I have slow seasons where there isn't any work and it feels bad to have no stable income. Etc.
I liked the work for a couple years where I was working far less than full time, but still paying my bills and enjoying some freedom over when I put in my work hours. However now I have growing family and I am seeking more stability, and contract work ain't it.