Methodology

A Zero From an Unvalidated Instrument Is Void

Twenty dated readings from one operating estate, each wrong the same way: the instrument was never validated. A zero from an unvalidated instrument is void.

A query asked for thirty days of records and returned thirty-one distinct days — no extra data, just a clock. The rows were stamped in UTC while the query ran in Central time, so the instrument invented a day.

Inside a single 90-day window that closed on 2026-08-20, we recorded twenty separate occasions on which the measuring tool, and not the system it was pointed at, was the thing that was wrong. Every one is dated, sourced to an audit written at the time, and caught the same way: a reading was checked against something other than itself. Two earlier posts set this up — Marketing Dashboards Lie by Default. We Caught Ours Doing It. on auditable dashboards, and We Measured Our Own Rot — Then Built a System That Fixes Itself on health checked by a machine on every run. This series points both at the checking machinery.

The argument is narrow and it is the whole point: most bad marketing decisions we see are made on sound judgement applied to a reading nobody validated. A green test suite, an HTTP 204, an empty table, a zero on a dashboard — each read as a fact about the world when it was a fact about the instrument.

The two lines this series is built on

A precondition that is always false is worse than no precondition, because it gets believed once.

That is the expensive one: a check that can only ever return false does not get ignored, it gets believed once, at the moment it matters, by someone with no reason to doubt it. No check leaves a known gap; a permanently false one closes it on paper.

A zero from an unvalidated instrument is void.

That is the operating rule. Void, not suspicious — it carries no information in either direction until the instrument has been shown able to return something else.

Establish, Validate, Cross-Read

The standing rule is validate the instrument, then believe the reading, and part six builds it into a six-check discipline under that name. This post runs on three steps, each with a worked example from the twenty.

1. Establish that the instrument can return a different answer. A push-notification validate endpoint returned an empty device list, and a check built on it reported that our alerts were going nowhere. Re-run against a group that was demonstrably delivering, it returned the same empty list, and an infrastructure finding became an instrument artifact.

2. Validate on the surface that validates, not the one that accepts. Between 2026-06-09 and 2026-08-02 our pipeline database recorded eight successful HTTP 204 responses from GA4's Measurement Protocol, against zero of the target event across 90 days. The collection endpoint answers 204 to payloads it discards; the debug endpoint names the invalid value, and only the first was in the shipping path — The 204 That Lied has the diagnosis.

3. Cross-read against an independent surface before acting. In a daily lead series live-read on 2026-08-17 for an HVAC contractor, the campaign metrics view reported zero Local Services leads for 2026-08-14 while the lead resource returned a row. Only reading both shows which surface to trust.

The five families

Silent success — a success code is a receipt for transport, never for a write (part two: 10, 12, 16). Empty answers that cannot say why — an empty result and a broken query are indistinguishable (part three: 3, 11, 17, 18, 20). The log that does not log — vendor surfaces have scope boundaries nobody documents (part four: 1, 9, 13, 14, 15). The number that is a different number — the population, formula or window moved under the number (part five: 2, 7, 8, 19). Private copies of a shared contract — one rule reimplemented in several places drifts independently in each (part six).

They are ordered by how cheaply they are found: the first two yield to one more question put to the instrument, the last three only to comparing it against something outside itself.

The twenty

Sixteen were catalogued through 2026-08-11; instances 17 to 20 came out of a gap-closure pass on 2026-08-20 — a register of instrument failures that was itself incomplete, which is why it carries a date and not a claim of completeness.

#InstrumentWhat it saidWhat was true
1Ad platform change-event logno change was madeconversion-action edits are not covered
2Present-key count on a lead field68 charged leads in July49 — the format omits false; 39% over
3Search Console searchAppearancezero rows, all four propertiesinstrument failure, not a signal
4Profile reader's field maskthe listing is certifiedstored no category data — certifying what it cannot see
5A human screenshot"categories verified live"the field was an affirmative empty list
6Profile snapshot APIverified, four categoriesreturns the owner-submitted copy; one category unapproved
7Search-term reporta junk-traffic rate for the accountcovers 30.2% of spend
8Campaign metrics viewzero Local Services leads, 2026-08-14the lead resource returns a row
9Edge deployment listthe worker is three commits behindbyte-for-byte identical — it prints oldest-first
10391, then 503 passing teststhe integration worksit never wrote anything
11Push-notification validate endpointzero devices — alerts go nowherealways empty for a group key; the group was delivering
12An audit logno rows — no new leads arrivedevery enrolment failed; the line fired only on success
13A CRM's paged aggregationsigned and installed = 0unstable sort, 797 records on one import timestamp
14A CRM's published API docsone webhook topic namethe live catalogue uses another name
15Pagination parameter stepped by 1925 rows61 unique — an item index, not a page index
16GA4 Measurement ProtocolHTTP 204, successpayload discarded on a lowercase enum
17A phone system's call logtotalPages: 1, 1,000 records for a monthtruncated at the page cap; it covered 16 days
18Message store with no date floor3, 1, 5 and 0 messages in four mailboxes200 each
19An answer-rate formulathe assistant answered the calla human answered and talked for 251 seconds
20A scheduled monitoring taskexit 0, "window complete"a healthy monitor watching nothing

None of this is a vendor complaint: several of the worst rows are our own code and tests, and one ran on our own site for 90 days.

Twenty instrument failures, grouped into five families A register of twenty numbered instances arranged in five family rows: silent success; empty answers that cannot say why; the log that does not log; the number that is a different number; and the parent family, state that looks maintained. Four instances are highlighted as additions from the 2026-08-20 gap pass. A closing callout carries the two lines the series is built on: a zero from an unvalidated instrument is void, and a precondition that is always false is worse than no precondition. THE REGISTER — TWENTY DATED INSTANCES, FIVE FAMILIESSilent success#10#12#16Empty answers#3#11#17#18#20The log that doesn't log#1#9#13#14#15A different number#2#7#8#19Looks maintained (parent)#4#5#6added in the 2026-08-20 gap pass“A zero from an unvalidated instrument is void.”“A precondition that is always false is worse than no precondition — it gets believed once.”
Every instance is dated and sourced in the register; the series walks the families one post at a time. Instance numbers match the register's ordering, not severity.

What would prove this wrong

  • A dated re-audit finding that in most of the twenty the underlying system was the defect and the instrument reported it correctly. Then this is a series about ordinary bugs wearing a flattering frame.
  • A validation pass across the same window that produced no disagreements. If cross-reading every instrument against an independent surface agreed every time, the discipline is ceremony and should be dropped.
  • Any instance where the instrument did label its own drop and we missed it. That row leaves the set, because the failure was ours. We expect at least one.
  • A concentration in one vendor. These span an ad platform, a search console, an analytics product, a CRM, a phone system, a message store, an edge command line and our own tests. If most prove to sit under one roof, this is procurement rather than measurement.

Ask what your instrument returns when it should refuse

One number in your reporting outweighs the rest. Find out what its instrument returns when fed something it should reject — same run, same endpoint. If nobody can tell you, the number is not evidence yet. It becomes evidence the day somebody watches that check say no.

  • #blog
  • #measurement
  • #instrumentation
  • #audit
  • #instruments-that-lie
Share X LinkedIn
Build it yourself?

Get the kit, not just the theory.

We'll send the build checklist behind this post — and the next pillar when it ships. One email, no drip sequence. Unsubscribe in one click.

Want this built for you?

Book a discovery call. We'll walk your numbers.

20 minutes. Tell us what's broken, hear what we'd ship in the next 90 days. No pitch deck.