“The site feels slow” is a common complaint with an uncommonly specific fix. Almost every case comes down to a missing performance budget.

Set a hard limit before you build, not after. Deciding “this page ships under 250KB and loads interactive in under 2 seconds” before development starts changes every decision that follows, from image formats to which libraries you’re allowed to add.

Images are usually the biggest offender. A single unoptimized hero photo can outweigh the entire rest of the page. Modern formats and proper sizing alone fix most speed complaints.

Third-party scripts add up silently. Chat widgets, analytics, and marketing pixels each seem harmless alone, but stacked together they can double your load time without anyone noticing which one is to blame.

Measure on a throttled connection. Your fiber connection at the office isn’t representative of a customer on mobile data. Test like your slowest realistic visitor, not your fastest one.

How to actually enforce a budget once you set one

Automate the check, don’t rely on memory. A CI step that fails the build when a page exceeds its byte budget catches regressions before they ship, rather than relying on someone remembering to check manually before every release.

Lighthouse CI makes this concrete. Google’s own Lighthouse CI tooling can be wired into a deploy pipeline to fail a build automatically if performance scores drop below a set threshold, turning “the site feels slow” from a vague complaint into a measurable regression with a clear cause.

Fonts are an underrated offender. Loading four font weights when the design only actually uses two, or failing to subset a font to the characters actually used, silently adds real weight to every single page load.

Budget by page type, not site-wide. A rich product page reasonably needs a larger budget than a simple contact page. A single site-wide number either starves your most important pages or lets your least important ones bloat unchecked.

A performance budget only works if it’s treated as a hard constraint, not a nice-to-have. The same discipline applies to mobile layout decisions, which I cover in Designing for Thumbs: Mobile UI Patterns That Work.

A budget that revealed the real problem

A client insisted their site “just needed better hosting” to fix reported slowness. Setting a hard page-weight budget and auditing against it told a different story: the homepage was loading 4.2MB of images, three separate analytics scripts nobody remembered installing, and a chat widget that pulled in its own bundled copy of jQuery. No hosting upgrade would have fixed any of that, the problem was entirely in what the page was asking the browser to load, not where the server lived.

Trimming that down to under 800KB and removing the redundant scripts cut load time by more than half, on the exact same hosting plan. The client’s instinct to blame infrastructure is a common one, because infrastructure feels like the technical, serious answer. In practice, the biggest performance wins usually live in what gets loaded, not where it’s hosted.

A performance budget forces that audit to happen before launch instead of after a client notices something feels slow, which is always the more expensive time to find it.

Explaining this to a client who is not technical

“Performance budget” means nothing to most business owners, and leading with the technical framing loses the conversation before it starts. What works better is translating it into a business metric they already care about: every extra second of load time on mobile is well-documented to cost a measurable percentage of visitors before the page even finishes loading, backed by years of industry data from companies like Amazon and Google publishing their own conversion-versus-speed findings. Framed that way, a performance budget stops sounding like an engineering preference and starts sounding like a straightforward business decision with a clear return.

I also show clients a live, real-time speed test on their actual current site during the sales conversation, not a hypothetical example. Watching their own homepage load slowly on a throttled connection, in front of them, does more to justify a performance budget than any slide deck of statistics could. It turns an abstract technical concept into something they experienced directly, which is a much stronger foundation for agreeing to prioritize speed over one more animation or one more embedded video in the final design.

A performance budget is ultimately a promise to future visitors that the site will respect their time and their data plan. Once a client sees it that way, defending the budget against scope creep gets a lot easier for everyone involved.

Once a client has seen their own site tested this way, performance tends to stop being a line item that gets cut under budget pressure. It becomes something they actively protect, because they have felt, first-hand, exactly what a slow page costs a real visitor.

A fast site is not a luxury feature, it is table stakes for every other investment made in the page actually paying off the way it should.

A performance budget set once and never revisited will eventually get eroded by good intentions: one more tracking pixel here, one more widget there, each individually reasonable and collectively fatal to load time. Reviewing the budget against the live site every few months keeps it honest long after the initial launch excitement has faded.

A fast site quietly does more selling than most of the content sitting on it.

A business that takes speed seriously from the first line of code tends to keep that discipline as the site grows, while one that treats it as an afterthought tends to keep deferring it indefinitely, one reasonable-sounding addition at a time.

Speed is one of the few improvements a visitor feels immediately, without needing to be told, which makes it one of the highest-leverage investments available on almost any website.

A faster site is simply a better site, full stop.

Nothing else on this list matters as much to a first-time visitor.

Speed is a feature, not a nice-to-have afterthought.