The Change Request Ledger: How to Stop Scope Creep Without Playing Villain
Scope creep rarely arrives as a single big ask. It drips in through Slack, hallway chats, and 'quick questions'. Here's the ledger system we use to make every change visible without turning the client relationship adversarial.

Scope creep almost never shows up as a dramatic request. It shows up as "while you're in there, can you also..." on a Thursday call, and three weeks later your margin is gone. The fix isn't a sterner contract. It's a visible, boring ledger that both sides look at every week.
Why 'just track it in Jira' doesn't work
Every agency I know has tried to solve scope creep with their project tool. Add a label. Flag the ticket. Put it in a "Change Requests" epic. It fails for the same reason every time: the client doesn't live in Jira, Linear, or ClickUp. They live in email and Slack. By the time a change is a ticket, it already feels like work in motion, and asking for money for work in motion makes you look petty.
The other failure mode is the formal change order PDF. It's technically correct and operationally dead. Nobody wants to sign a document for a half-day of work, so the PM swallows it, and twenty swallowed half-days later the project is a month late.
The ledger sits between those two extremes. It's a single shared document — we use a Notion page or a Google Sheet, it genuinely does not matter — that both sides treat as the source of truth for anything that wasn't in the original statement of work.
What goes in the ledger
Every row is one request. The columns we've landed on after a few years of iteration:
- ID — CR-001, CR-002. Humans remember numbers.
- Date raised — when the client first mentioned it, not when you logged it.
- Raised by — their name, not "client". Specificity matters later.
- Description — one sentence, in the client's language.
- Original SoW reference — the section it relates to, or "net new".
- Classification — one of: clarification, in-scope adjustment, out-of-scope, bug.
- Estimate — hours or days, as a range.
- Decision — absorbed, billed T&M, deferred to phase 2, declined.
- Status — open, agreed, done.
The classification column is where the real work happens. Most arguments about scope are actually arguments about which bucket a request belongs in. Making the bucket explicit forces the conversation early, when it's cheap.
The four classifications, in plain English
Clarification is free. If the SoW says "user can log in" and the client asks "does that include password reset?", that's a clarification — you should have asked, they should have told you, and now you're figuring it out together. Log it, estimate it at zero, mark it agreed. The point of logging it is so that next month, when there are fourteen of these, you can show the pattern.
In-scope adjustment is also free, but worth tracking. The SoW said three dashboard widgets, they want to swap one for a different one of equivalent complexity. Fine. Log it so that when they later say "you only built two of the three widgets we agreed on", you can point to CR-017.
Out-of-scope is the billable category. New feature, new integration, new user role. Estimate it, send it, wait for a yes before you build.
Bug is the dangerous one. Clients call everything a bug. Half the time it's a bug, half the time it's a missing requirement they're hoping you'll build for free. Logging it in the ledger with an honest classification — "behaviour matches SoW section 4.2, client expectation differs" — turns a fight into a document review.
The weekly ritual that makes it work
A ledger nobody reads is just a graveyard. The habit that keeps it alive is a ten-minute slot at the start of your weekly status call, before any demo or progress update. You share your screen on the ledger, scroll to the open rows, and go top to bottom.
For each open row: what is it, what's the estimate, what do you want to do? Three options from the client: approve, defer, decline. If they want to think about it, it stays open — but it also stays visible, which creates gentle pressure to decide.
The first time you do this with a new client it feels awkward. By week three it's the most useful ten minutes of the call. Non-technical clients especially appreciate it because it gives them a lever they understand: they can see exactly what trading a new request for an existing one costs.
A concrete example
Here's a fragment of a real ledger (names changed) from a fixed-bid build we did last year:
ID Date Raised by Description Class Est Decision
CR-003 12 Mar Sarah Add CSV export to orders table out-of-scope 1d billed T&M
CR-004 14 Mar Sarah Does login include SSO? clarification 0 no, phase 2
CR-005 18 Mar Dev (us) Auth flow — SoW silent on 2FA clarification 0.5d absorbed
CR-006 21 Mar Mike 'Bug': admin can't edit own role bug (by design) 0 declined, documented
CR-007 22 Mar Sarah Replace Stripe with Adyen out-of-scope 6d deferred to phase 2
CR-008 25 Mar Sarah Add Slack notifications on new signup out-of-scope 1.5d billed T&M
CR-006 is the one worth studying. The client called it a bug. We classified it as by design, pointed at the SoW's role-based access section, and declined to fix it for free. Because it was in the ledger, the conversation took four minutes instead of an email thread. They agreed, and we logged a line item for "phase 2 — role self-editing" so it wasn't forgotten.
By project close, that ledger had 34 rows. Six were billed as T&M on top of the fixed bid, totalling about 11% of the original contract value. Zero of them were disputed, because every one had been agreed in a weekly call with a timestamp and an owner.
Making the ledger legally useful
Your master services agreement should reference the ledger explicitly. One clause, roughly:
Changes to scope will be tracked in the shared Change Request Ledger. Items classified as out-of-scope and marked 'billed T&M' in the ledger constitute authorised additional work and will be invoiced at the rates in Schedule A.
That sentence does a lot of work. It means you don't need a signed PDF for every three-hour task. The ledger entry, acknowledged in a recorded weekly call or a Slack thread, is the authorisation. Your lawyer may want to tighten the language — ours did — but the structure holds up.
If you want to see how this fits into the broader way we run engagements, our services page has more on how we structure fixed-bid and T&M work.
When the ledger reveals something worse
Sometimes you'll do this diligently for a month and realise the ledger has 50 rows and the client has approved three of them. That's not a scope problem. That's a client problem. Either they can't make decisions, in which case see our piece on unblocking non-technical stakeholders, or they're hoping you'll build everything and bill nothing.
The ledger is also an early warning system for your own team. If your PM is logging ten "clarifications" a week, your SoW was too vague. If your engineers are quietly absorbing "small" changes without logging them, your margin is bleeding and you can't see where. We now treat "did you log the CR?" as a standard code review question for client-facing work.
The one anti-pattern to avoid
Don't weaponise the ledger. The moment a client feels like every question gets logged as a potential invoice, trust evaporates and they stop talking to you — which is far more expensive than any scope creep. Clarifications should genuinely be free and generous. The ledger earns its keep on the out-of-scope rows, not by nickel-and-diming the clarifications.
Where we'd start
If you've never run a ledger, don't retrofit it onto a project in flight — you'll look like you're changing the rules. Start it on your next new engagement. Create the sheet before the kickoff call. Put CR-001 in it during kickoff (there's always something). Add the ritual to your weekly status agenda. Give it eight weeks before you judge whether it's working.
The honest promise isn't that scope creep will disappear. It won't. The promise is that it will be visible, priced, and discussed in daylight — which is the only version of scope creep an agency can actually survive.
Want a team like ours?
72Technologies builds production software for the kind of teams who actually read this blog.
Start a projectKeep reading

Taking Equity Instead of Cash: An Agency's Field Guide to Not Getting Burned
Equity-for-build deals sound romantic until you're three years in with no exit, no cash, and a cap table you can't read. Here's how we think about them.

The Retainer Reset: Converting Project Clients to Monthly Without Discounting Yourself to Death
Most agencies try to sell retainers like extended warranties — vague, defensive, and cheap. Here's how we actually convert finished-project clients into profitable monthly engagements without turning into a glorified bug-fix service.

Firing a Client Without Losing the Team: An Agency Playbook
Some clients cost more than they pay. Here's how to end the engagement cleanly, protect your engineers, and keep the pipeline healthy on the way out.
