All articles
Startups & BusinessAugust 24, 2026 6 min read

The Change Request Ledger: How to Charge for Scope Creep Without Losing the Client

Scope creep doesn't kill fixed-price projects — silent scope creep does. Here's the ledger system we use to bill every change without turning every meeting into a fight.

Every agency has lost money on a fixed-price project because someone said yes in a Slack thread. Not a big yes — a small one, on a Tuesday, buried between a GIF and a status update. Multiply that by twelve weeks and you've built half a product for free.

This is not a scope problem. It's a bookkeeping problem. Below is the change request ledger we run on every fixed-price engagement, why it works, and the exact language we use so clients don't feel nickel-and-dimed.

Why "just track scope changes" isn't enough

Most agencies already know they should track changes. The playbook is always the same: sign a Statement of Work, note deviations, invoice for extras. Then reality happens.

The project manager is buried in standups. The lead dev quietly builds the extra filter because it's "only two hours." The client's product owner asks for a small tweak in a design review and everyone nods. By the time someone raises the flag, you've got fourteen undocumented changes, a client who genuinely doesn't remember asking for most of them, and an awkward conversation about a $38k overage.

The issue isn't that agencies don't have a change process. It's that the process is triggered by judgment — someone has to decide this is a change and this warrants a formal request. That decision is exhausting, political, and gets skipped when everyone's tired.

The ledger removes the judgment. Every request gets logged. Pricing is decided later.

The ledger, in practice

A change request ledger is a single, shared, append-only document. Every request that isn't unambiguously in the original SOW goes on it. Not "every request we think is billable" — every request, full stop. The whole point is to defer the argument about billability until you have data.

Here's the minimum viable schema we use:

- id: CR-014
  date: 2026-03-11
  requested_by: Priya (client PM)
  channel: design review, Figma comment
  description: >
    Add CSV export to the reporting dashboard,
    including scheduled email delivery.
  original_sow_reference: none (dashboard export not specified)
  status: logged
  estimate: pending
  disposition: pending
  billing: pending

Every field matters. channel matters because it forces you to note where the request came from — verbal in a call, Slack DM, Jira comment. original_sow_reference matters because sometimes the answer is "actually, that's covered in section 3.2" and you close it as in-scope, no drama.

Disposition has four possible values: in scope (no charge, close it), absorbed (out of scope but we're eating it, and here's why), billable (out of scope, priced, needs sign-off), or descoped trade (client swaps this for something else in the SOW).

The weekly triage

Once a week, the delivery lead and the account lead sit down for thirty minutes and walk the ledger. New items get a disposition. Billable items get a rough estimate. Then — and this is the part most agencies skip — the ledger goes to the client. Every week. In its entirety.

Not a summary. The whole thing.

That weekly send is the single most valuable habit in this system. It turns the change conversation from an ambush into a routine. The client sees CR-014 logged on Monday, sees it marked "billable, ~12h" on Friday, and has the weekend to think about whether they want it. No one is surprised at invoice time because no one has been surprised at any point.

Pricing the ledger without the fight

Agencies get squeamish about pricing changes because they're afraid of the client's reaction. The fix is to decide your change-order pricing before the project starts and put it in the SOW.

We use three tiers:

  • Micro (under 4 hours): absorbed silently, no invoice. These are the goodwill items. Log them anyway.
  • Small (4 – 20 hours): billed at a pre-agreed change-order rate, usually 10 – 15% above the blended project rate.
  • Major (20+ hours): requires a written mini-SOW, signed before work starts. No exceptions.

The rate premium on small changes isn't greed — it's real cost. Context-switching, re-planning a sprint, updating QA scripts, and re-doing design reviews all have overhead that doesn't exist when work is planned up front. Naming that premium in the SOW means you never have to defend it mid-project.

The magic phrase in the contract is something like: "Changes are estimated in good faith at the rates below. The client may accept, reject, defer, or trade any change against existing scope of equivalent estimated effort."

The trade option is critical. It gives the client a lever that isn't "pay more" or "give up." A client who feels they have agency (pun intended) fights you less.

The awkward conversations, scripted

The ledger only works if you actually surface the awkward stuff. Here are the three conversations that come up, and how we handle them.

"I don't remember asking for this"

This is why the channel field exists. Open the ledger, show the Figma comment or Slack message. Nine times out of ten the client says "oh right, yeah" and moves on. The tenth time, you close the item as absorbed and eat it. You're not trying to win an argument; you're trying to make future logging feel safe for both sides.

"This feels like it should be included"

Sometimes clients push back on billability. Two options: agree and reclassify as in-scope, or hold the line with the SOW open in front of you. If you find yourself doing option two more than once or twice per project, the SOW itself was too vague. That's a lesson for the next engagement, not a hill to die on in this one.

"Can you just do it quickly?"

The developer answer is usually yes. The business answer is: log it, estimate it, ship it after sign-off. "Just doing it" is what got you here. The one exception is genuine defects — bugs against the agreed spec are not changes, and treating them as such will destroy trust faster than anything else on this list.

What the ledger actually protects

Margin is the obvious answer, but it's not the main one. The ledger protects the relationship. Fixed-price projects sour when the final invoice doesn't match the client's mental model of what they owe. Every unlogged change is a small delta between reality and their expectations. By week ten, those deltas are irreconcilable, and someone is going to be angry.

With the ledger, the client's mental model is updated weekly. There is no final surprise. Even if the total overage is uncomfortable, they've watched it accumulate. The conversation shifts from "why are you charging me this" to "how do we prioritize what's left."

That's a fundamentally different negotiation, and it's the one you want to be having.

A note on tooling

Don't over-engineer this. We've tried Jira workflows, custom Notion databases, and dedicated change-management SaaS. The best-performing version was a shared Google Sheet with six columns, sent as a PDF snapshot every Friday. The tool doesn't matter. The weekly cadence and the append-only discipline are what matter.

If your PM has to think for more than ninety seconds about whether to log something, the system is too heavy. Log first, classify later.

Where we'd start

If you're running a fixed-price project right now with no change tracking, don't try to reconstruct the past. Start the ledger today, forward-only, and tell the client: "We're formalising how we track requests so nothing falls through the cracks. Here's what's on the list as of this week." Frame it as a service upgrade, because it is.

On your next SOW, add the three-tier change pricing, the trade clause, and a line committing to a weekly ledger send. Then hold yourself to it — the client won't nag you to send it, but they'll notice when it stops arriving, and that's when the trust erodes.

If you want to see how we structure fixed-price engagements end-to-end, our engagement models page walks through when we recommend fixed price, T&M, or a hybrid. The ledger works with all three, but it earns its keep on fixed price.

#agency operations#pricing#client management#fixed price#scope

Want a team like ours?

72Technologies builds production software for the kind of teams who actually read this blog.

Start a project