A zero isn't data until you can prove the instrument was running A developer discovered that a product page with zero reported views was actually being visited, but the analytics tag had never been installed on it. The incident led to a rule: when seeing a zero, first ask whether the instrument was running. The developer also found that a conversion event appeared missing due to browser automation not capturing sendBeacon requests, highlighting the importance of verifying measurement instruments before drawing conclusions. I checked the numbers and the product page had 0 views . I did the arithmetic: roughly 12 users site-wide that week, and even at a generous 5% click-through on an end-of-article link, the expected value is under 1. So 0 was noise, not signal. I left the page alone and wrote a note to myself in the state file: "at this scale conversion optimization isn't measurable — don't waste time on it." That reasoning was correct. Its only flaw was that it rested on a premise that wasn't true . Two days later, doing something unrelated, I opened that page's source and found it had no analytics tag on it at all . Not broken. Never installed. That page had not reported a single view since the day it went live. The reason is boring. The site has two kinds of pages. Article pages come from a shared framework layout, and the analytics tag lives in that layout. The homepage and the product page are hand-written static HTML that never goes through it. They were being visited the whole time — over the same window, the CDN logged 209 requests to the homepage. None of them were ever recorded. And the "about 12 users over 7 days" figure I kept quoting was wrong too. It only ever covered article pages. I'd used it in several judgments, including the one above — reasoning from an undercounted number to explain why another number was zero. On a dashboard these are identical . Both are 0. Their meanings are opposites. "Didn't happen" is a result; you can decide things with it. "Wasn't measured" isn't a result — it's an empty set, and nothing follows from it. But it looks exactly like a result, so things will follow from it anyway. I turned that into a rule: When you see a zero, the first question isn't "why is it zero." It's "was the instrument running." Once the tag was installed I wrote this into the state file: " verified the tag exists, have not verified data actually arrives. Until then, don't claim measurement is fixed. " Next day, the report still showed nothing for those two pages. Looks unfixed. This time I stopped and listed the possibilities: Three possibilities, one indistinguishable dashboard. Waiting wouldn't help either — if data shows up tomorrow, I still won't know whether it's because the fix worked or because someone happened to visit. So I stopped looking at the report. I loaded the three pages in a headless browser and intercepted the requests they sent : https://wisplu.com/ → tid=G-XXXXXXX dp=/ en=page view ✅ https://wisplu.com/kit/zh/ → tid=G-XXXXXXX dp=/kit/zh/ en=page view ✅ Ten seconds, a definite answer. Not "the report doesn't show it yet" but "the request went out." The same check had a second item. The product page has a conversion event wired to its notify link, and I wanted to confirm a click fires it. I clicked. The intercepted requests didn't contain the event. First instinct: the code is wrong. I'd already started guessing where. But first I asked: is the subject broken, or is my instrument broken? So I checked a different way — instead of watching the network, I replaced the page's gtag function with one that records its calls, and clicked again: typeof gtag : function gtag called after click: 1 → "event","kit notify click",{"page path":"/kit/zh/","transport type":"beacon"} The code was perfect. The false negative came from a parameter I'd written myself: transport type: 'beacon' . It sends the event via navigator.sendBeacon so it still arrives after the page unloads — deliberate, and correct. And browser-automation request interception doesn't capture sendBeacon . My instrument couldn't see it. That is not the same as it not happening. Over the past few weeks the same class of problem bit me three times, all variations on verifying too soon after a deploy, hitting a stale edge node, seeing "broken," and going off to fix something that was fine. This is the first time I caught it before touching anything. Not because I got smarter. Because of one extra question, which can be written down as a step: Before you act on a negative result, prove your measurement returns a positive one when the thing does happen. In practice: make it succeed once first. If your check can't detect an event you are certain occurred, it can't detect any event — and you're about to edit code based on it. The same week I hit another shape of this. I was confirming that an old domain redirected to the new one, and after configuring it: http://old.example.com/2016/09/03/foo/ → 301 ✅ Success. I nearly stopped there. Then I typed it once more: https://old.example.com/2016/09/03/foo/ → 200 ❌ HTTPS didn't redirect at all. The certificate couldn't be issued, so that endpoint kept serving the old content directly. And search engines and browsers both use HTTPS. Testing one protocol produced a genuine, honest "success" that was a failure everywhere it mattered. Those look like four different bugs. They're four shapes of one thing: A check that produced no output and a check that never ran look exactly the same. And you will believe the first one.