The Purgatory of Good Intentions — and the Performance Ghost Nobody Mentions

Off By

Engineering Culture & Performance

The Purgatory of Good Intentions

And the performance ghost nobody mentions.

“I’m moving the Largest Contentful Paint ticket to the next sprint, alright?”

“Sure, we have to finish the payment gateway refactor first anyway. Does anyone actually have a problem with that?”

“It’s been in the backlog since before I joined the team.”

“We’ll get to it. It’s on the list. It’s literally right there in the ‘To Do’ column.”

Three heads nod in the grainy grid of the video call. Nobody objects. To object would be to break the social contract of the modern engineering team, which states that as long as a problem has a number and a status, it is technically being solved.

The ticket-let’s call it Ticket #4182-has outlived two Product Managers and one major frontend framework migration. It has been groomed, re-estimated, split into three sub-tasks, and “refined” until the original edge has been worn smooth. It is now a rounded pebble of an idea, sitting at the bottom of a digital ocean.

The Relic in the Coin Pocket

I found twenty dollars in a pair of old jeans this morning. It was a crisp, forgotten note wedged into the tiny coin pocket, likely a relic from a night out ago that I’ve since blurred into a general memory of loud music and expensive appetizers. The feeling was one of pure, unearned windfall.

$20

But as I smoothed the bill out on my desk, I realized that for , that money had been doing nothing. It was a resource I owned but couldn’t use because I’d filed it away in a place I never checked.

The backlog is exactly like those jeans, only instead of finding twenty dollars, you find the ghosts of every argument you’ve ever lost. We tell ourselves the backlog is a queue, a vibrant waiting room for the future of our product. It isn’t. More often than not, the backlog is where an intention goes to be stored respectfully so that we don’t have to deal with the discomfort of its presence in the room.

The instant a concern becomes a ticket, it acquires the appearance of being handled. This is a psychological sleight of hand. How does a company convince itself that a spreadsheet of failures is actually a roadmap for success?

The Anatomy of Inertia

1

Recurring friction point (e.g., interactivity).

2

Moment of collective tension raised in a meeting.

3

Resolution through “Artifact Creation” (The Ticket).

4

The ticket is assigned “weight” (The Illusion of Reality).

5

Tension drops to zero. Problem is “captured.”

How organizational pressure is bled off through documentation rather than execution.

Oscar G.H., a crossword puzzle constructor I know who spends his days obsessing over the structural integrity of intersecting letters, once told me: “A puzzle without a constraint is just a list of words. If you can put anything anywhere, nothing matters.”

Engineering is the same. When everything is a priority, nothing is. But we’ve discovered a clever way to bypass this: we use the backlog to pretend we haven’t made a choice. We don’t say “we aren’t going to fix the performance.” We say “we’ve prioritized it for the future.”

Comfortable Language, Heavy Realities

The word “Hydration” is a perfect example of how we hide complexity behind comfortable language. In the world of web development, hydration is the process where a static, non-interactive page-the “skeleton”-gets its JavaScript “brain” so that buttons actually do things when you click them.

We talk about it like it’s a refreshing glass of water for the site. In reality, for a lot of heavy React apps, hydration is more like a traffic jam where the cars are all trying to start their engines at the exact same second. If the “brain” is too heavy, the user is left staring at a button that looks ready but is actually a frozen ghost.

🚗🚕🚙🚌

300ms INP Delay

Interaction to Next Paint

We tolerate these ghosts because we’ve democratized the responsibility for them. When speed became everyone’s job, it quietly became nobody’s. The developers care, but they have features to ship. The PMs care, but they have conversion metrics to hit. The designers care, but they have brand aesthetics to protect. Everyone agrees the site should be fast, in the same way everyone agrees we should probably eat more leafy greens.

From Aspiration to Obligation

This is why most performance initiatives fail. They are treated as internal aspirations rather than external obligations. You cannot “aspire” your way out of a Interaction to Next Paint (INP) delay. You cannot “hope” a layout won’t shift when an ad loads. These are binary states of failure or success.

In my experience, the only way to kill the ghost in the backlog is to move the problem out of the “intention” category and into the “consequence” category. This is what Digital Heroes does by reframing the entire relationship between a vendor and a client.

The Contractual Baseline

Instead of promising to “try” to make a site fast, they write the Core Web Vitals thresholds directly into the contract. If the Largest Contentful Paint-which is just a fancy way of saying “The Main Event” or the biggest thing on the screen-doesn’t show up in under for 75% of real users, there is a financial penalty. Specifically, they refund the launch sprint.

LCP Performance

> 2.5s

Contractual Outcome

Sprint Refunded

Performance is no longer a ticket; it’s a debt with interest.

This shift changes the physics of the sprint planning meeting. When performance is a contractual obligation with a dollar amount attached, it is no longer a ticket that can be “parked.” You don’t park a debt that is actively accruing interest. You pay it.

Inactive Potential vs. Present Debt

I think about that twenty-dollar bill I found. The reason it stayed in my jeans for is that there was no consequence to forgetting it. I didn’t lose my house; I didn’t miss a meal. It was just “inactive potential.” Most site performance improvements are treated the same way. We see them as potential upside-“if we fix this, we might get a 2% lift in SEO”-rather than a present-day debt.

But for a SaaS founder or a marketing leader, a slow site is not “inactive potential.” It is a leak. It is a quiet, constant drip of users who click a link, wait , decide the world is too short for this particular delay, and bounce back to the search results. That is not a ticket in a backlog; that is a hole in the bucket.

We have become experts at creating “artifacts of progress.” We love a good Gantt chart. We love a well-organized Trello board with custom labels for “Technical Debt” (color-coded in a warning orange, naturally). We love the feeling of “clearing” a meeting by assigning an action item. These are all calming activities. They lower our collective heart rate.

But the user doesn’t see your Jira board. The user doesn’t care about your “checkout refactor” or the fact that you’re migrating to a new state management library. The user only feels the “Nervous Page”-my term for Cumulative Layout Shift, where the text jumps three inches down the screen just as you’re about to click “Buy Now.” To the user, that isn’t a technical trade-off. It’s a broken promise.

If a performance goal doesn’t have a “price” for failure, it isn’t a goal; it’s a hobby. Most agencies will tell you they “build for performance.” They will show you a Lighthouse score from a local machine that had nothing running but a single tab. That is a lab score. It’s a controlled environment. It’s a lie.

The Lab Score

98/100

Perfect Conditions

Real User (75th %)

42/100

Old Android on 4G

The gap between corporate comfort and user reality.

Real performance happens in the hands of a user on a Android phone on a spotty 4G connection in a moving train. That is the 75th percentile. That is where the money is won or lost. And that is where the “intention” of a backlog ticket falls apart.

Foundation, Not Hoarding

We need to stop treating our digital products like puzzles that can be finished “someday.” We need to treat them like the rigid structures they are. Oscar G.H. was right: the constraint is what makes the thing matter. When you stop allowing yourself the luxury of the “Future Sprint,” you are forced to make the hard architectural decisions today.

“Do we really need that third-party tracking script that adds 400ms of blocking time? Do we really need this 2MB hero image?”

– The easy decisions when money is on the line

The backlog will always be there. There will always be a place to put the ideas that aren’t quite ready, the “nice-to-haves,” and the “maybe-one-days.” But the core vitals of your business-the speed, the stability, the responsiveness-don’t belong there. They belong in the foundation.

Filing a ticket is an act of closure, but not the kind we need. It’s the closure of an eye. We close our eyes to the problem so we can keep walking. But eventually, we trip. We trip over the very things we said we’d get to later.

I’m going to spend that twenty dollars today on something tangible. I’m not going to put it back in the drawer. I’m not going to “save it for a rainy day.” I’m going to convert that potential into a reality. It’s a small thing, but it’s an antidote to the habit of hoarding intentions. Your site performance deserves the same respect.

Stop filing the debt. Start paying it.

If your current team or agency can’t give you a number they are willing to stand behind with their own wallet, then you aren’t buying a solution-you’re just buying more tickets for the purgatory.

The argument shouldn’t end when the ticket is created. The argument should only end when the page loads, the layout stays still, and the user gets what they came for without having to wait for the organization to stop lying to itself about what “later” actually means.