DEV Community

張旭豐
張旭豐

Posted on

How to Price a Freelance Project: A Simple Framework With Examples

How to Price a Freelance Project: A Simple Framework With Examples

One of the hardest parts of freelancing is figuring out what to charge. Not because you lack skills — but because most pricing advice is either too vague ("charge what you're worth!") or too complex (complex spreadsheets nobody uses).

After losing $2,000 on a poorly-scoped project and spending three years iterating on how I price work, I built a framework that actually works: three numbers, one formula, and you're done.

This article gives you that framework — free. If it helps you land a fair deal, I offer $10 quick reviews (see below).


The Three Numbers You Need

Before the formula, you need three inputs:

1. Base Rate (BR)

What you'd charge for a trivial version of this project — one that barely works. Not what you wish you could charge. What you'd honestly accept if you were desperate.

2. Scope Multiplier (SM)

How much more complex is this project than the trivial version? Use this scale:

Complexity SM Range Example
Trivial 1.0–1.2 Static HTML page
Simple 1.3–1.5 3-page website with contact form
Medium 1.8–2.5 Database-backed app with auth
Complex 3.0–4.0 Real-time features, third-party integrations
Epic 5.0+ Full platform, multi-team

3. Risk Buffer (RB)

What percentage of the project scope is likely to change or expand?

Change Likelihood RB
Very unlikely 10–15%
Possible 20–25%
Likely 30–40%
Almost certain 50%+

The Formula

Final Price = BR × SM × (1 + RB)
Enter fullscreen mode Exit fullscreen mode

That's it. Three numbers, one multiplication.


Real Examples

Example 1: The "Quick Widget"

  • Base Rate: $500 (trivially, a single HTML page)
  • Complexity: Medium (API integration, custom UI) → SM = 2.0
  • Risk: Client has a history of changing requirements → RB = 25%
$500 × 2.0 × (1 + 0.25) = $1,250
Enter fullscreen mode Exit fullscreen mode

What to say to the client: "Based on the scope and typical revision patterns, my estimate is $1,200–$1,300 for this project."


Example 2: The "Small Fix"

  • Base Rate: $100 (trivial bug fix)
  • Complexity: Low-medium (a few files) → SM = 1.3
  • Risk: Low, but scope could creep → RB = 15%
$100 × 1.3 × (1 + 0.15) = $149.50 → $150
Enter fullscreen mode Exit fullscreen mode

What to say: "$150, and that includes a 15% buffer for minor scope questions."


Example 3: The "Big Platform"

  • Base Rate: $2,000 (MVP that barely works)
  • Complexity: Complex (auth, payments, real-time) → SM = 3.5
  • Risk: High — client is a startup, pivots likely → RB = 40%
$2,000 × 3.5 × (1 + 0.40) = $9,800
Enter fullscreen mode Exit fullscreen mode

What to say: "For a full platform build with those integrations and that risk profile, I'm at $9,800. If budget is tight, we can scope down to an MVP first at $3,500."


Composite Case Study: From $800 to $1,200

Here's a composite example based on typical freelancer pricing patterns I see:

A freelance engineer was asked to build a client dashboard. They prepared a quote using their gut feeling:

  • Base Rate: $800 for the "basic version"
  • Scope: Medium complexity → SM = 1.5
  • Risk: Client had changed requirements before → RB = 0.2

Original gut quote: $800

When they ran it through the framework:

$800 × 1.5 × (1 + 0.2) = $1,440
Enter fullscreen mode Exit fullscreen mode

The framework was telling them they were undercharging by $640 — nearly half.

What happened: They sent the $1,440 quote with their reasoning. The client negotiated to $1,200 and both sides walked away happy. The freelancer earned $400 more than their original gut feeling.

The lesson: Your gut quote and your framework quote are often different numbers. Run both. If the framework number is higher — that's your protection buffer doing its job.


The Pricing Worksheet (Copy This)

Use this template when a new project comes in:

Base Rate (BR): $____
Scope Multiplier (SM): ____
Risk Buffer (RB): ____%

Final Price = BR × SM × (1 + RB)
           = $____ × ____ × (1 + .____)
           = $____
Enter fullscreen mode Exit fullscreen mode

Negotiation tip: Present the number as a range. Say "$1,200–$1,500" instead of "$1,350." The range feels less arbitrary and gives room to move without cutting deep.


Pricing Decision Checklist

Before you send your next quote, run through this:

  • [ ] I know my Base Rate (what I'd charge for a trivial version)
  • [ ] I chose a Scope Multiplier and documented why
  • [ ] I added a Risk Buffer for scope uncertainty
  • [ ] I checked whether the project has hidden complexity I haven't discussed
  • [ ] I turned the final number into a price range, not a single digit
  • [ ] I know my walk-away number before the negotiation starts

Common Mistakes

Mistake 1: Using hourly rates

"If I charge $50/hr and it takes 20 hours, that's $1,000." But if you finish in 10 hours, you just left $500 on the table. Scope-based pricing rewards efficiency. Hourly rates reward slowness.

Mistake 2: Ignoring the risk buffer

Most freelancers quote the happy path. When scope expands (and it always does), you're eating the cost. The risk buffer is your protection.

Mistake 3: Anchoring to the client's budget

If a client says "we have $5,000" and your formula says $8,000, don't immediately drop to $5,000. Say: "For $5,000, here's what we can deliver. Here's what the full scope costs. Your choice."

Mistake 4: No internal revision buffer

Build 10–20% slack into your own formula before presenting. Not as padding — as a buffer for your own estimation errors. You're better at estimating than most, but you're not perfect.


Try the Interactive Calculator

Want to skip the formula and get a number right now? Here's a browser-based calculator you can use immediately — no signup, no account needed.

How to use it: Copy the HTML below, save it as calculator.html, and open it in any browser. Enter your base rate, estimated hours, and scope risk. Get a fair price range instantly.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Freelance Pricing Calculator</title>
<style>
  * { box-sizing: border-box; margin: 0; padding: 0; }
  body { font-family: system-ui, sans-serif; background: #0d1117; color: #e6edf3; padding: 2rem; }
  .container { max-width: 600px; margin: 0 auto; }
  h1 { font-size: 1.4rem; color: #58a6ff; margin-bottom: 1rem; }
  label { display: block; font-size: 0.875rem; color: #8b949e; margin-bottom: 0.25rem; }
  input { width: 100%; padding: 0.5rem; background: #161b22; border: 1px solid #30363d; border-radius: 4px; color: #e6edf3; margin-bottom: 0.75rem; }
  .result { background: #1c2128; border: 1px solid #30363d; border-radius: 6px; padding: 1rem; margin-top: 1rem; font-size: 1.5rem; font-weight: bold; color: #58a6ff; text-align: center; }
  .note { font-size: 0.75rem; color: #484f58; margin-top: 0.5rem; text-align: center; }
</style>
</head>
<body>
<div class="container">
  <h1>Freelance Pricing Calculator</h1>
  <label>Base Rate ($) <small>— what you'd charge for a trivial version</small></label>
  <input type="number" id="rate" value="500">
  <label>Estimated Hours</label>
  <input type="number" id="hours" value="20">
  <label>Scope Risk (1.0–2.0) <small>— 1.0=clear, 2.0=very uncertain</small></label>
  <input type="number" id="risk" value="1.3" step="0.1" min="1" max="5">
  <div class="result" id="output">$1,300 – $1,560</div>
  <p class="note">Formula: Base Rate × Hours × Risk = Fair Range</p>
</div>
<script>
function calc() {
  const r = +document.getElementById('rate').value;
  const h = +document.getElementById('hours').value;
  const s = +document.getElementById('risk').value;
  const base = r * h;
  const low = Math.round(base * s * 0.9);
  const high = Math.round(base * s * 1.1);
  document.getElementById('output').textContent = '$' + low.toLocaleString() + ' – $' + high.toLocaleString();
}
document.querySelectorAll('input').forEach(i => i.addEventListener('input', calc));
</script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

What you get:

  • ✅ Instant price range (no mental math)
  • ✅ Considers your floor rate, hours, and scope uncertainty
  • ✅ Works offline — save and use it anytime

Need a Pricing Review?

If you're mid-negotiation or about to send a proposal, I offer quick turnaround reviews:

$5 Quick Review

  • One pricing response based on your numbers
  • No revision
  • Sent within 24 hours

$10 Full Scope Review

  • Your project scope analyzed with the framework above
  • One response plus one revision
  • Specific price recommendation with negotiation range
  • Delivered within 24 hours

To order: Send payment via paypal.me/cheapuno and include a brief summary of your project (1–3 sentences).


Need a Custom Price for Your Project?

If you're mid-negotiation or about to send a proposal, I offer a quick turnaround review:

$10 Full Scope Review

  • Your project scope analyzed with the framework above
  • Specific price recommendation
  • Red flags identified before you underprice
  • Delivered within 24 hours
  • Payment: https://paypal.me/cheapuno

Format: PDF or text, depending on complexity. No contracts, no upsell.

Related Guides

If this framework helped you, you might also find these useful:


Last updated: 2026-07-01

Top comments (0)