If you're a freelance web worker, then you may have run into this scenario before:
Prospective Client: I think I'd like to work with you! What's your hourly rate?
You: Great! My hourly rate is $X.
Prospective Client: Oh, that's a bit more than we can afford. Would you consider doing the project for a flat fee?
First off, let me point out the obvious error in reasoning here: you can't say that an hourly rate is too expensive until you know how long the project is going to take. What if I can make your Groupon clone in 2 hours? The cost of the project could end up being lower than the cost of someone who charges a lower hourly rate but takes longer to get things done. So, I gotta call bullshit on that one.
But more importantly, I want to talk about the evils of working on a project for a fixed amount. In short, I think someone always gets screwed. It's the nature of the agreement.
Flat Rate == Stand-off
When a project is agreed upon to be completed for a fixed amount of money (and it supposedly has a fixed scope, yeah right), the worker and the client have set themselves against each other.
The worker is given an incentive to complete the project in as little time as possible. The faster you work, the higher your effective hourly rate is! So, screw quality, let's get this sucker done (not that you'll think this way, but the agreement promotes thinking this way).
And consequently, the worker also will end up wanting to fight tooth and nail to not let the client change anything whatsoever about the scope of the project. The thought process there goes something like,
"The client wants a little lightbox widget to view larger versions of photos? Well, that doesn't take very long, but I won't get paid any more for it, and it wasn't part of the initial agreement. What do I doooooo?"
At that point, as the worker you either stick to your guns and say no, or you say yes and effectively give away a little of your time for free.
On the other side, the client now knows exactly how much they're paying, and they will want to get as much as possible for that amount of money. When they change their minds about aspects of the project (as all clients do, hey it's natural), they'll be confronted with a worker that either says "no, no, no", or a worker that says "yes", begrudgingly, and resents them just a little more with each new request.
So by the end of the project, either the worker has given more time than they planned to, and effectively devalued their time, or the client paid more than they would have if the worker had been paid hourly. Or maybe, just maybe, it worked out just right. That's rare.
How I Think You Should Do It
- Do your work for an hourly rate.
- Give your clients good estimates, with a low and a high number as a range for the cost.
- Find parts of the project scope that are vague, and talk them out and make them more specific.
- Tell the client that you won't exceed the estimated price so long as there isn't a significant change in scope to the project.
- Communicate about cost and progress over time as the project goes on.
- If the scope is creeping, talk to the client about it and give them an idea of how much more the upper-end of the estimate needs to be to accommodate these changes.
Stop asking for a flat fee for your projects (I know, you won't). Yes, it's a little scary to not know exactly how much your project is going to cost. But we can give you a range! And we can give you a worst-case scenario.
I think it mainly comes down to trust. A flat fee for a project feels safer. But it's an illusion, and it makes for a bad relationship.
Full Disclosure: I'll still do a fixed-rate project, once in a blue moon. But I feel dirty and a little ashamed of myself every time I do, and I always tell myself "this is the last time..."
I know I'm taking a bit of a hard line on this. And if you disagree, I'd love to hear it in the comments.