Freelancing

Hourly vs Project Pricing for Freelancers

Hourly vs Project Pricing for Freelancers

Every guide on hourly vs project pricing lands on the same advice: bill by the hour when the scope is fuzzy, quote a fixed fee when it's defined. RateMyFreelance says it, Taim says it, Upwork's explainer says it. The advice is correct. It's also the easy half of the problem.

The model decides who carries the risk when the estimate is wrong. What it doesn't decide is the number. And the number is where I see freelancers lose the most money, myself included.

I've billed both ways for years. Here's how I pick, and how I handle the part the guides skip.

When hourly is the honest choice

Hourly is right when you genuinely can't see the work yet:

  • Debugging and rescue work. "The site is slow", "checkout is broken", "something's on fire". You can't quote a fix you haven't diagnosed.
  • Maintenance and support. Irregular, reactive, no clean definition of done.
  • Advisory work. Calls, code reviews, second opinions.
  • Undefined scope. "Improve our web presence" is a wish you can't put a number on.

The risk math is simple, and this guide puts it well: with hourly billing the client carries the scope risk, so if the work takes longer they pay more. With a fixed price you carry it, and every surprise comes out of your effective rate. So bill the uncertainty by the hour.

Two things keep hourly from being a blank cheque:

  1. A cap with an approval threshold. "Up to 8 hours, then I pause and show you what I found before going further." The client knows their maximum exposure, and you never silently burn budget.
  2. A floor on the rate itself. Compute it from your income target and real billable hours, not from what feels safe to say out loud. I wrote the math in how to set your freelance rates for the first time.

The honest downside: hourly punishes you for getting good. Every year you get faster, and every year the same job pays less.

When project pricing pays better

Fixed pricing pays better when three things are true:

  • You can write the deliverables as a yes/no list.
  • You've built the same thing before, so your estimate comes from experience.
  • The client is buying an outcome rather than a timesheet.

That last point is where the money is. Say a dashboard takes a beginner 60 hours and takes you 25 because you already know the stack, and the client has seen beginner quotes near $6,000. At a $100/hour rate:

Who bills, and how Hours Invoice Effective rate
Beginner, hourly 60 $6,000 $100/hour
You, hourly 25 $2,500 $100/hour
You, fixed quote 25 $5,000 $200/hour

Bill hourly and your experience costs you 35 hours of pay. Quote a fixed fee under what the client expected to spend anyway, and the speed goes into your margin, where it belongs.

To make a fixed quote safe instead of a gamble:

  • Deliverables written as yes/no items the client can check off
  • A named out-of-scope list, so "obviously that includes X" can't surprise you later
  • A fixed revision count, with extra rounds billed hourly
  • A deposit up front - I take 50%
  • A risk buffer on top of the hourly equivalent. Taim suggests anchoring at 1.3-1.5x, which matches what under-scoped jobs have cost me over the years

The trap: quoting a project price blind

So you've decided it's project work. Now you have to name the number, and this is where the guides go quiet.

When you quote a fixed fee without knowing the client's range, one of three things happens:

  • You quote above their ceiling. Silence. You never find out they had $4,000 and you said $9,000.
  • You quote under their floor. Instant yes, and you just left money on the table. You'll find out months later what they'd actually budgeted.
  • You spend a week doing the "well, what's your budget" dance, where both sides shade their honesty to protect their anchor.

Neither side wants to say a number first, because the first number becomes the anchor the other side negotiates against. So the client says "we're flexible" and you say "it depends" and everyone's time evaporates.

I wrote about what this guessing game costs and what to do when a client won't share their budget. The short version: this pattern shows up in most freelance sales conversations. Spend ten minutes on r/freelance and count the "how do I ask for the budget" threads. People keep asking because nobody has a clean answer.

The bridge: paid discovery

The standard fix I see, and the one I use, is paid discovery. You charge a small fixed fee - a few hundred dollars, a defined day or two - to produce a scope document. Then you quote the real build from facts instead of vibes.

It works for three reasons:

  1. You get paid to learn what the job actually is.
  2. The client gets a deliverable they can take to any developer, including a different one. Fair - they paid for it.
  3. It filters out clients who were never going to pay real money.

The honest limits: discovery doesn't reveal the client's ceiling, it only clarifies the scope. And some clients won't pay for what feels like homework before the real quote. When discovery is overkill - a defined build, a client who just wants the number - the anchoring problem is still sitting there.

Where anonymous budget matching fits

That leftover problem is why I built FairPrice. Both sides submit a budget range through a neutral link, and neither sees the other's range until both are in. Overlapping ranges produce a fair price at the midpoint of the overlap. A near miss still counts as a match: when the gap between the ranges is within 15% of the smaller range, the fair price is the midpoint of that gap. Only a wider gap returns no match, and then you've both saved a proposal cycle. The mechanics are in what anonymous budget matching is.

Say you submit $4,000-$6,000, a $2,000-wide range. Three different client ranges:

Client submits The math Outcome
$5,000-$7,000 Overlaps you at $5,000-$6,000 Match, fair price $5,500 (midpoint of the overlap)
$6,200-$8,200 $200 gap, under 15% of $2,000 ($300) Match, fair price $6,100 (midpoint of the gap)
$7,000-$9,000 $1,000 gap, over the $300 limit No match

Scope it correctly, though:

  • It's for agreeing a project fee. An hourly rate is a single number with no range to match, and retainers die from scope drift rather than anchoring. Different problem, different fix.
  • It's one tool among several. Paid discovery, tiered packages, and a published "starting at" price all work too. Pick what fits the client in front of you.

The decision table

The work looks like Bill Watch out for
Debugging, maintenance, "why is it slow" Hourly, with a cap Client anxiety - give them an approval threshold
Defined deliverables you've built before Fixed project Scope creep - revision limits in writing
Vague goals, new client, moving priorities Hourly or paid discovery Locking a number before you can see the job
Defined build, unknown client budget Fixed, but agree the range first Blind quoting cuts both ways
Ongoing relationship, stable monthly scope Retainer Scope drift - review monthly

Scripts you can copy

Hourly, with a cap:

"There's enough unknown here that a fixed price would be a guess. I'll bill $X/hour, up to Y hours, then pause and show you what I found before continuing. Worst case you're out $Z for a full diagnosis."

Fixed project:

"Fixed price for [deliverables]: $X. That includes two rounds of revisions. Anything outside the list bills at $Y/hour, and I'll flag it before doing the work. 50% to start, 50% on delivery."

Paid discovery:

"Before I give you a number that means something, I need a day inside the problem. I charge $X for that. You get a written scope and estimate you can take to anyone, including me."

Agreeing a range without the dance:

"Rather than us both guessing, let's each submit a range through this link. You won't see mine until yours is in, and I won't see yours until mine is in. If they overlap or land close, we get a fair price. If they're far apart, we've saved each other a week."

Pick the model by visibility, the number by information

The model question has a boring, correct answer: hourly for work you can't see, fixed for work you can, discovery for the space in between. The number is harder, and it's where the real money moves. Once you stop guessing at it, most of the stress in the hourly-versus-project debate turns out to have been about the number all along.


Ready to Try Anonymous Budget Matching?

Stop guessing your client's budget. Use FairPrice to find fair prices through anonymous matching.

Get Your Fair Price

Related Articles