Blog

Why your deploy isn't showing: a field guide to the five caches between you and your users

You shipped, the pipeline is green, and the site still shows last week. Before you blame the framework, meet the five caches standing between your commit and your customer — and the 5-minute triage that names the guilty one.

You shipped. The pipeline is green, the server says the new commit is live, and the homepage still shows last week. Nothing in software erodes trust in a deploy pipeline faster — and in nine cases out of ten the pipeline is innocent. Between your commit and your customer stand up to five caches, each with its own idea of “fresh”, and any one of them can serve the past with total confidence.

We got to relive this recently on our own site. We updated content, rebuilt, verified the build succeeded — and the old text survived. We rebuilt again. It survived again. Two clean builds, one stubborn ghost. The culprit turned out to be a cache we will introduce as suspect number four, and the fix was one deliberate rm in the right place. That evening produced this field guide.

Meet the five suspects

The 5-minute triage

Work from the origin outwards — it is faster than guessing from the browser inwards.

The rule that prevents the whole genre

Every cache you add must come with a written eviction story: what clears it, when, and who owns that. Not a vague “it revalidates hourly” — a sentence a colleague can act on at 2 a.m. If you cannot write the eviction story, you are not adding a cache, you are adopting a stray ghost.

Caches are wonderful. Ours is why the page you are reading arrived in well under a second. But a cache is a promise about the past, and promises need expiry dates. Put the five suspects on a sticky note; the next “deploy isn't showing” costs you five minutes instead of an evening.