[$] Scope-Creep Response Kit

Client keeps adding features mid-project

The build was scoped in March and the requirements have been arriving ever since, one Slack message at a time. Below is the sort that tells you which reply each one gets, the change-order email for the big ones, and how to move the rest into a phase 2 the client is happy to pay for.

Sort every request before you answer it

The reason feature creep works is that each request looks small on its own. Sorting is what stops that. Three sizes, and the test for each is mechanical enough that you can do it while reading the message.

SizeTestWhat you send
TinyUnder 15 minutes, no judgment calls, no new assets, and fewer than three so far on this projectDo it. Say you did it. Log it on a running list so it isn’t invisible at the end.
SmallFifteen minutes to about a dayQuote it inline, in the reply you’re already writing. Price and new date in one sentence. Wait for a written yes.
BigOver a day, or it changes what the project isChange order. Original work carries on to the original date; the new work waits for approval.

If you can’t tell small from big, it’s big. If you can’t tell tiny from small, it’s small. The failure mode is always guessing downward.

On a software build there are two things the sort will catch that a gut call won’t. The first is the request that is small to build and large to maintain: an extra user role, a second login method, a new state a screen can be in. Every one of those multiplies your test surface for the rest of the project, and it belongs in the big bucket even when the ticket looks like an afternoon. The second is the request that is small in isolation and big in sequence. The fourth “can we also” of the month is not a fifteen-minute task; it’s the fourth interruption to a schedule that was built without any of them.

Whatever the bucket, price from a rule you set in advance rather than a number you invent while annoyed. The kit’s pricing rules use a change rate you set once, a half-day minimum on anything you price at all, and a rush multiplier for work that has to jump the queue. On a $120/hr change rate that half day is $480, and it is the floor for a “quick” feature, because a forty-five minute change costs you the reading, the context reload, the doing, the testing, the deploying, and the follow-up question.

The reply for the small bucket

This is the one you’ll send most often, and it takes about ninety seconds.

Script 2 · The “can you just also” mid-project

When: the project is underway and a new deliverable appears in a sentence that starts with “oh, and.”

Hi [Name], Happy to add [the CSV export / the second admin role / the Stripe webhook]. That’s outside the scope we agreed in the proposal, so here’s what it looks like as an addition: • Work: [one-line description] • Cost: [$X] (fixed) / [Y hours at $Z/hr] • Timeline: adds [N days] to the current delivery date, so [new date] Reply “approved” and I’ll fold it in. If you’d rather keep to the original scope and timeline, that’s completely fine too. Just let me know. [Your name]

Slack version: “Can do. That’s an addition to the agreed scope: [$X], adds [N days] (new delivery [date]). Want me to go ahead? A quick ‘yes’ here is enough.”

The timeline line matters more than the price on a build. A client who is spending someone else’s budget will approve costs all day and will stop dead at a date that moves past a launch they’ve already announced. Putting both in every reply hands them the trade-off, and after two or three of these most clients start sorting their own requests before sending them.

Don’t start until the yes is in writing. A thumbs-up on the Slack message counts. A verbal “yeah go for it” on a call does not, and the version of this where you build it first and invoice after is the one that ends in an argument.

The change order, and how to pause without stopping

For anything over a day, the price goes in a one-page change order instead of an email bullet. The form exists to force the three questions that scope creep skips: what exactly, how much, by when. The kit’s template covers the original proposal reference, the concrete work involved, the price with a cap if it’s hourly, the new delivery date and which milestones move, and an explicit “not included” list naming the next three things the client will ask for. Number them per project, CO-01 onward. Hitting CO-04 on one project is a signal to talk about the account rather than the change.

Then the hard part. Clients say “go ahead” and don’t sign, and if you build on a verbal yes you have donated the work. Script 14 handles it.

Script 14 · Pausing work until the change order is signed

When: they’ve verbally agreed, they keep saying “go ahead,” and they won’t sign. Or they’ve started treating the feature as done and are planning around it.

Hi [Name], I’ve drafted the plan for [the item] and I’m ready to start. I just need the change order signed before I do. I know it feels like paperwork, but it protects both of us: you get a fixed price and date in writing, and I don’t end up doing unbilled work. So that nothing’s ambiguous: work on [the item] is paused until the change order is returned. The original scope continues and isn’t affected. It’s a one-page form, attached again here. A reply of “approved, [Name], [date]” works too if signing is a hassle. [Your name]

Slack version: “Ready to start on [item] the moment the change order’s signed, pausing on it until then. Original scope unaffected. A reply of ‘approved, [your name], [date]’ is enough if signing is a pain.”

The sentence that makes this safe to send is “the original scope continues and isn’t affected.” You are pausing one feature, not the project, so nothing about the message is a threat. Mean it, though. The first time you pause and stay paused, every future change order from that client comes back inside a day.

Batch the rest into a phase 2

Half the requests on a growing build aren’t urgent and don’t belong in the current sprint. Rather than pricing each one as it lands, keep a visible list and let it fill up.

The list also settles the arguments. When a client asks why the launch slipped, the log has fourteen dated entries on it, and the answer stops being a matter of opinion. Send it as a summary at the end of every fortnight whether or not anything is pending.

Some additions genuinely improve the product, and script 11 in the kit is for those: agree enthusiastically and price it in the same message. Splitting them, with “great idea” today and “about the cost” tomorrow, is what makes the second message feel like a bait and switch.

Try it on the real message

Paste the client’s email

Paste the Slack message or email with the new requirement in it. The tool matches the situation, prices it against your change rate and the half-day minimum, and writes both the email and the chat version. Three a day, no signup, nothing stored.

Open the full tool in its own tab if the frame feels cramped.

The change order template, all fourteen scripts and the scope-definition clause that keeps the next build from doing this are in the $12 kit.

The other seven situations

Or read the three full scripts on the free page, or paste an email into the reply tool.

Questions

How do I stop a client adding features mid-build without sounding difficult?

Say yes to the feature and no to the schedule. Every request gets “happy to add that,” a price, and a new delivery date in the same message. You are not refusing anything, so there is nothing to push back on, and the client starts making the trade-off themselves once each request has a number attached.

When should a request get a change order instead of an inline price?

Over about a day of work, or when it changes what the project is. Under a day, quote it inline in the email you are already writing. If you cannot tell which side of the line a request falls on, treat it as the bigger one: the failure mode is always guessing downward.

What if the client says the feature is obviously part of the project?

Point at the document rather than at their memory. “I checked the proposal and that wasn’t part of what we scoped, section 2 lists what was included.” Then price it as an addition in the same email and say it is a common assumption, because it usually is. Arguing about what was obvious has no end; a section number does.

IL

Who made this. Ian Lehrer, Lehrer Group LLC, Spring, Texas. I build small tools for people who bill by the project.

The scripts were drafted with AI help and then edited line by line so they read like something a person would actually send. If one lands badly with a client, email me and I’ll fix it: lehrerenterprise@gmail.com.