
A Performance Budget With Numbers
I’ve spent nine years cleaning up the digital equivalent of a landfill, and most of it comes from people who think “optimization” is just a plugin you toggle on. I recently inherited a client site that was so bloated with unoptimized page builder modules it felt like trying to run a marathon through waist-deep molasses. Everyone wants a fast site, but nobody wants to talk about the actual math of how to set a performance budget before the damage is already done. Most “experts” will try to sell you on complex, abstract metrics that mean nothing when a single heavy theme is dragging your LCP into the dirt.
I’m not here to give you a lecture on theoretical data or academic white papers. Instead, I’m going to show you how I actually do it—the unfiltered, practical way—so you can stop guessing how much bloat your site can handle. We’re going to talk about setting real constraints on assets, scripts, and images before they ever touch your production environment. By the end of this, you’ll have a clear set of rules to follow, ensuring you never have to spend your weekend un-building someone else’s mess just to get a decent PageSpeed score.
Table of Contents
Defining Your Core Web Vitals Thresholds

Look, you can’t just say “I want a fast site” and call it a plan. That’s like telling a client you’ll design a logo that “looks professional”—it’s meaningless fluff. To actually build something that doesn’t choke on a 4G connection, you need to pin down your core web vitals thresholds before the first line of CSS is even written. I’ve spent too many afternoons cleaning up sites where the LCP (Largest Contentful Paint) is hovering in the “unacceptable” zone because someone decided a 4MB hero image was a good idea.
Don’t get bogged down in every single vanity metric, either. Focus on the ones that actually impact how a human feels while navigating a page. I usually start by setting strict resource size constraints for my assets; if a single JavaScript file is pushing 500kb, we’re having a conversation. You need to decide what “passing” looks like for your specific project. Is it a sub-two-second load for mobile? A specific CLS (Cumulative Layout Shift) score that keeps the UI from jumping around like a caffeinated squirrel? Pick your battles, define the numbers, and treat those limits as non-negotiable.
Setting Hard Resource Size Constraints

Once you’ve decided on your thresholds, you have to actually put some teeth into them. I’ve seen too many “budgets” that are really just polite suggestions that get ignored the second a client asks for a high-res hero image or a heavy slider plugin. You need to establish strict resource size constraints for your assets. I don’t care how pretty a font is; if that custom typeface is pulling in a 500kb file just to render three words, it’s a non-starter. I set hard limits on my total JavaScript execution time and my CSS payload because once those numbers creep up, the user experience doesn’t just dip—it falls off a cliff.
Don’t just eyeball the file sizes in your browser inspector and hope for the best. You need to treat your budget like a real ceiling, not a floor. I rely on performance budget enforcement tools directly in my build process to catch bloat before it ever hits the staging site. If a new plugin pushes my total page weight past the limit, the build fails. It sounds aggressive, but it’s the only way to stop the slow creep of “just one more script” that eventually turns a snappy site into a digital anchor.
Stop Guessing and Start Policing Your Assets
- Audit your “must-haves” versus your “nice-to-haves” before you even touch a plugin. If a feature doesn’t serve the primary conversion goal, it doesn’t get a seat at the table, and it certainly doesn’t get a slice of your kilobytes.
- Treat your JavaScript like a toxic asset. Every script you add is a debt you’ll eventually have to pay back in latency; if you can’t justify why a specific library is running on every single page load, strip it out and use vanilla code instead.
- Set a strict “image tax.” I’ve seen too many sites where a single hero image weighs more than the entire CSS file combined. Decide on a maximum file size for your media and stick to it, or your performance budget will be dead on arrival.
- Don’t just set a budget for the initial load; set one for the interaction. If your “Time to Interactive” is tanking because some fancy animation is hogging the main thread, your budget isn’t working—it’s just a suggestion.
- Automate your enforcement. I don’t have the patience to manually check every deployment, so I bake these constraints into my build process. If the build exceeds the budget, it fails. Period.
Stop Guessing, Start Governing

Look, setting a performance budget isn’t about being a digital killjoy or gatekeeping every new font your client wants to try. It’s about creating a roadmap so you aren’t stuck playing whack-a-mole with Core Web Vitals every time a marketing team decides to drop a massive, unoptimized video on the homepage. We’ve covered the essentials: you need to define your non-negotiable thresholds for LCP and CLS, and you absolutely must set hard limits on your resource sizes. If you don’t decide how much bloat you can afford before the site starts crawling, someone else—usually a plugin or a heavy-handed theme—will decide for you. And trust me, they rarely choose wisely.
At the end of the day, a performance budget is your best defense against the slow decay of a once-snappy website. I’ve spent too many years un-building client sites that were perfect until someone “improved” them with a bloated page builder. Don’t let that be your legacy. Take control of the technical constraints now, so you can spend your time actually designing and developing rather than just fighting fires. Build something that is intentionally lean, and you won’t just be making a faster site; you’ll be making a better one.