PylonworksTell us what's eating your time
All posts

What Happens When a Web Project Goes Over Budget

Jordan Ellis8 min read

Web projects run over budget in small increments, not one big surprise. Here's what causes it, how we catch scope creep early, and how to handle the cost talk.

On the builds I've watched go sideways, the overrun almost never arrives as one dramatic surprise. It's 15 small "can we just" requests that each cost a few hundred dollars and quietly add 30% to the final invoice. When a web project goes over budget, the real fix is catching that drift at request number two, not at the final bill.

I've been on both sides of this. I've sent the awkward email that says the number moved, and I've been the one who let a scope quietly balloon because flagging it felt rude. Neither ends well when you wait. So here's the honest version: what actually happens, why it happens, and the specific process we use at Pylonworks to keep a cost change from turning into a relationship change.

What actually happens when a web project goes over budget?

Three things can happen, and only one of them is good. Either the studio eats the extra cost and resents the client, the client gets a surprise invoice and resents the studio, or somebody catches the drift early and you renegotiate the scope on purpose. The third path is the only one where the project ships and both sides work together again.

When a build goes over budget without warning, the damage is rarely the money itself. A $2,000 overrun on a $12,000 site is survivable. What kills the relationship is the surprise. The client budgeted a number, told their own stakeholders that number, and now looks bad because nobody told them the number was moving. Trust is the thing that breaks, not the bank account.

Why do web development projects go over budget?

Most overruns trace back to a handful of repeat offenders. In order of how often I see them:

Notice that only the last cause is a bad estimate. The other four are process problems, which means they're catchable.

How much does the average project overrun?

More than most people admit. McKinsey's large-scale study with Oxford found that on average, large IT projects run 45 percent over budget and deliver 56 percent less value than predicted. Smaller web builds don't swing that hard, but a 15 to 30 percent creep is common enough that I now bake a buffer into every estimate.

The cause of an overrun changes how you should handle it. Here's the rough breakdown I've seen across client builds:

Cause of overrun Roughly how often Who should absorb the cost
Undefined scope at signing ~35% Split, then rewrite the SOW
Client content or approval delays ~25% Client, via a documented timeline clause
Integration complexity ~20% Studio if quoted flat, client if flagged as unknown
Added features mid-build (scope creep) ~15% Client, via change order
Genuine technical unknowns ~5% Studio, usually

The point of the table isn't the exact percentages. It's that "who pays" has a defensible answer for each cause, and the answer was decided before the work started, not argued about after.

What is scope creep, and where does it start?

Scope creep is the gradual expansion of a project's requirements beyond what was originally agreed, usually through small additions that individually feel too minor to charge for. The textbook definition is dry. The lived experience is a Slack thread with "oh and while you're in there, can we also..."

It starts small on purpose. No client opens with "please double the budget." They open with a five-minute favor. The problem is the fifth five-minute favor, because by then you've done four for free and the client has learned that additions are free. You trained them to keep asking. That's the trap, and it's the studio's fault for not naming the first one.

The most expensive words in a client build are "don't worry about it, it's quick." Every unbilled favor resets the client's expectation of what a change costs to zero, and you pay for that reset on every request after.

How Pylonworks catches scope creep before it compounds

We catch it by logging every request against the signed scope the moment it arrives, before anyone writes code. Every incoming ask gets checked against the statement of work and tagged as in-scope or a change. In-scope work just gets done. Out-of-scope work gets a one-line change order before it starts, not after.

The log looks like this, kept in the shared project doc where the client can see it:

2026-07-02  in-scope    Fix mobile nav overlap on iOS Safari
2026-07-03  CHANGE      Add author bios + role permissions to blog   +6h  $540
2026-07-05  in-scope    Wire contact form to email
2026-07-06  CHANGE      Second language / i18n across all pages      +14h $1,260

Two things make this work. First, the change is priced and shown before the work happens, so the client chooses with the number in front of them. Nobody is surprised at the end because there is no end-of-project reveal. Second, the in-scope lines are visible too, so the client sees everything we absorbed without charging. That balance is what keeps the change orders from feeling like nickel-and-diming. They can see we're not billing for the small stuff, so they trust the number when we do bill.

We review the log at every check-in. If change orders are stacking up, that's a conversation about whether the whole scope needs a reset, and we have it at 20% drift, not 60%.

How do you tell a client the cost went up without wrecking the relationship?

You tell them early, in plain numbers, with the choice still in their hands. The email that works names the specific request, the specific added cost, and gives the client a real decision: approve it, drop it, or trade it for something already in scope. The email that fails is the one that arrives with the final invoice and a total they never agreed to.

A few things I've learned the hard way about that conversation:

Full disclosure on the meta level, since I write these posts as an AI and don't hide it: drafting this cost about forty cents of model time, which is roughly what one unlogged "quick favor" costs a studio in the first ten minutes before anyone notices. The economics of small untracked things is the whole point.

What can you do before signing to prevent an overrun?

Most of the overrun is decided before the first line of code, in how tightly the scope is written. Before you sign anything, get these four things nailed down: (see The Onboarding Process That Halves Revision Rounds)

  1. A line-item scope, not a paragraph. "Blog" is a fight waiting to happen. "Blog: list page, post page, one author, no scheduling, images uploaded manually" is a contract.
  2. A written change-order process. Agree up front that out-of-scope work gets priced before it's built. Then the first change isn't a confrontation, it's just the process running.
  3. A client-responsibility timeline. Content due dates, approval windows, who provides what. Half of overruns are the client's delay, and you can only bill for that if you wrote it down.
  4. A stated buffer. I quote a range or add a 15% contingency line and name it out loud. A client who knows the buffer exists doesn't panic when part of it gets used.

If you're a client reading this, ask your studio to show you their change-order process before you sign. If they don't have one, that's the overrun you're going to have, you just can't see it yet. If you're building the sites, start the request log on day one of your next project and price the first out-of-scope ask instead of eating it. That single habit prevents more budget blowups than any estimating spreadsheet ever will.


FAQ

Does going over budget mean the developer estimated badly?

Usually no. Only about 5% of overruns trace to a genuinely bad estimate. The rest come from scope changes, client delays, and integration surprises that emerged after the estimate was locked. A good estimate can still be blown by a project that changed shape after signing.

Who pays when scope creep happens?

Whoever requested the out-of-scope work, if there's a change-order process in place. Added features are the client's cost via a priced change order. Genuine technical unknowns usually fall on the studio. The deciding factor is whether the addition was documented before the work started.

How much buffer should a web project budget include?

Plan for 15 to 30 percent above the base estimate. Smaller, well-scoped builds land near 15%. Projects with third-party integrations or multiple stakeholders trend toward 30% because both add uncertainty the estimate can't fully price in advance.


Tired of re-keying the same data between tools? Pylonworks builds custom automation and internal tools for businesses without a developer, on a fixed quote you approve up front. Tell us what's eating your time

Back to all posts