The failure mode that costs clients the most money is not an outage. An outage is loud: someone notices within minutes, an incident gets opened, it gets fixed. The expensive failure is a measurement chain that breaks quietly while continuing to produce plausible numbers.
Here is the shape of it. A page is changed — a redesign, a consent banner, a tag manager tidy-up, a script moved from the head of the document to the footer for performance reasons. The change is sensible in isolation and passes review. But it alters the order in which things execute, and a tracking call that used to fire before the visitor could click now fires after some of them already have. Collection drops. Not to zero, which would be noticed — to eighty per cent, or sixty.
Nothing alerts. The dashboard still renders. Conversion rate appears to fall, so the team responds to a conversion problem that does not exist: they rewrite the copy, they cut the budget on the channel that looks weakest, they shelve the campaign. The actual defect is four lines of markup in a template.
Why this class of bug survives review
Three reasons, in roughly this order of frequency.
Tracking is tested on the page, not in the funnel. The standard check is to load the page, open the network tab, and confirm the request goes out. That confirms the tag exists. It does not confirm the tag fires before the visitor acts, on a slow connection, on a device where the third-party script takes two seconds to arrive. The gap between "the tag is installed" and "the tag observes the behaviour" is where the losses live.
Nobody owns the chain end to end. The marketing team owns the campaign, the agency owns the landing page, an engineer owns the tag container, and the analytics platform is administered by a fourth party. Each link is somebody's responsibility. The chain is nobody's.
There is no expected value to compare against. If you do not know what the event volume should be, a forty per cent drop looks like a bad week. Seasonality, campaign timing and genuine performance variation give any plausible drop a plausible explanation, and the plausible explanation is always cheaper to believe than a defect.
What to instrument instead
The fix is not more analytics. It is a small number of checks that fail loudly.
- Ratio monitoring, not volume monitoring. Alert on the ratio between two events that should hold roughly constant — page views to tracked sessions, form renders to form starts. Volume moves for a hundred legitimate reasons; a ratio that shifts sharply is almost always a defect.
- A synthetic transaction. A scheduled job that loads the real page, performs the real action, and asserts that the event arrived in the real destination. This catches what unit tests cannot, because it exercises the whole chain including the third parties.
- A collection heartbeat. Alert when an event type that fires every day stops arriving. This sounds trivially obvious and is almost never in place.
- Deploy annotation. Every release writes a marker into the analytics timeline. When a metric steps rather than drifts, the first question is whether anything shipped that day, and the answer should take five seconds to find.
Reading the damage after the fact
When you do find one of these, the interesting question is how long it ran. Step changes are the tell: genuine performance moves are usually gradual and correlate with something external, while a broken chain produces a clean discontinuity on a specific date. Compare the suspect metric against one collected by a different mechanism — server logs against client-side analytics, for instance. Two sources that normally track each other and suddenly diverge give you the break date precisely.
Then, and this is the part teams skip: revisit the decisions made during the affected window. If a channel was cut because it looked weak, it was cut on bad data. The tracking fix restores the reporting. It does not restore the budget.
Every measurement system should be able to tell you the difference between "this number is low" and "this number is missing". Most cannot, and that is the whole problem.
Before a redesign, not after
Measurement is far cheaper to preserve than to reconstruct. Before a rebuild, write down every event currently collected, what triggers it, and what decision it feeds. Anything on that list that no decision depends on can be dropped deliberately. Everything else is a requirement of the new build, tested in the funnel rather than on the page, before launch rather than after.
That document takes an afternoon. Reconstructing a year of comparable history after the fact is not possible at any price.