
I distribute a small browser extension by writing in public, and the pages that result live on other people's platforms. So I run a check every morning: fetch each of them, look for my product name, and tell me if one has gone quiet. It watched a hundred and sixty two addresses.
For several days it ended with the same sentence: five still undecided. It even named them. I had stopped reading that line, the way you stop hearing a fan.
Why I had stopped
To settle those five, the tool wanted to replay all seventy one of its undecided cases through a browser, which takes a long time. So I never ran it. A verification you decline to launch verifies nothing, and the reason I declined was not laziness, it was that the tool offered no way to ask a smaller question.
I added one: replay only the addresses whose name or URL matches what I give it. Then I asked about the five.
None of them was undecidable
Four were not my pages at all. They were outreach emails I had sent to other sites, and the address recorded against each one was the recipient's contact page or the article of theirs I had written about. Those pages are alive and they do not mention me. That is not a failure, that is what it looks like when someone has not replied.
The fifth sits behind an anti robot challenge. I do not go around those, so that address can never resolve, and reporting it as undecided every morning was the tool asking a question it had no way to answer.
A sixth, which the platform had removed weeks earlier and which now returns a plain 404, was still being fetched daily.
The shape of the mistake
The code kept every address except those in a list of statuses to skip. That list had grown one entry at a time, each addition triggered by finding something it should not have been watching. Two more were missing, and there was no reason to think a third pass would have been the last.
The function's own description said the opposite of what it did: it claimed to return the addresses of lines still declared alive. That sentence is a list of what to include. The code was a list of what to exclude. Nobody had noticed because both readings produce a plausible number.
I switched it to the inclusion the description promised. A hundred and sixty two became a hundred and fifty five: ten left, all of them correctly, and three arrived.
The three that arrived are the point
Those three are my own pages, publicly readable, and nothing had been watching them. Two were skipped because one column said submitted while the column next to it said live, and the filter read whichever cell it found first. The third was skipped because the word for discarded appears in its notes, and the filter searched the entire row rather than the status field.
That third one had been added to the watch list on purpose weeks earlier, with a note in my records saying so. It was won and then quietly lost, and the comment in the code describing exactly that danger was sitting three lines above the test that caused it.
After the switch: sixty three replayed, sixty three alive, none undecided.
What it costs, because it does cost something
An exclusion list is wrong loudly. It watches things it should not, and they show up as noise you can see. An inclusion list is wrong quietly: anything whose status is written in a way the list does not recognise simply vanishes from the check, and nothing tells you.
So the tool now names every address that carries no recognised status and that no other line covers. The first version of that warning listed eight, five of which were fine by design, and a warning that fires every morning is a warning you stop reading. I narrowed it to the real question: is this address watched by anything at all. It now names one or none.
Disclosure
I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free tier covers 30 emails a month. Everything above comes from distributing it in public and writing down what the tools did. You can find it at blueticks.io.
The five undecided were never a measurement problem. They were the check telling me, every morning for days, that it did not know what it was supposed to be looking at.
Comments (0)
Login to post a comment.