<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Blueticks</title>
    <description>The latest articles on DEV Community by Blueticks (@blueticks).</description>
    <link>https://dev.to/blueticks</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4052506%2F9f7ae043-af80-4448-ad90-c42ccce25000.png</url>
      <title>DEV Community: Blueticks</title>
      <link>https://dev.to/blueticks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blueticks"/>
    <language>en</language>
    <item>
      <title>My own checker had an exemption rule. It had never been tested, and it was wrong 14 times out of 19</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Fri, 14 Aug 2026 22:21:58 +0000</pubDate>
      <link>https://dev.to/blueticks/my-own-checker-had-an-exemption-rule-it-had-never-been-tested-and-it-was-wrong-14-times-out-of-19-n3o</link>
      <guid>https://dev.to/blueticks/my-own-checker-had-an-exemption-rule-it-had-never-been-tested-and-it-was-wrong-14-times-out-of-19-n3o</guid>
      <description>&lt;p&gt;I run a daily check over every page I have published for a small product. One of the things it reads&lt;br&gt;
is whether a page tells search engines to skip it.&lt;/p&gt;

&lt;p&gt;Some platforms do that on purpose. When you answer a question on a question and answer site, your&lt;br&gt;
answer gets its own address, that address is marked as not to be indexed, and a canonical link points&lt;br&gt;
at the question page instead. The platform is saying: the indexable copy lives over there.&lt;/p&gt;

&lt;p&gt;So my checker has a rule. If a page is marked not to be indexed &lt;strong&gt;and&lt;/strong&gt; its canonical points somewhere&lt;br&gt;
else, it does not count as a problem. The content is filed elsewhere by design.&lt;/p&gt;

&lt;p&gt;That rule is correct. It had also never once been checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  What checking it means
&lt;/h2&gt;

&lt;p&gt;The rule makes a claim: the content is over there. Nobody had ever gone over there to look.&lt;/p&gt;

&lt;p&gt;I wrote a second checker that does. It reads the page, and if the canonical points elsewhere, it&lt;br&gt;
loads that target too and counts how many times my product name appears in it.&lt;/p&gt;

&lt;p&gt;Nineteen addresses. Five exemptions justified. Fourteen not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three ways it failed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The target was itself excluded.&lt;/strong&gt; Three answers had canonicals pointing at a page that carried the&lt;br&gt;
same do not index instruction. The content was filed somewhere that was also invisible. Two of those&lt;br&gt;
pointed at an &lt;em&gt;unanswered&lt;/em&gt; variant of the question, which the platform does not index at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The target was indexable but did not contain the answer.&lt;/strong&gt; Ten cases. The question page is fine, it&lt;br&gt;
is indexable, and my answer is simply not on it. The permalink shows my product name five to eight&lt;br&gt;
times. The question page shows it zero times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No exemption applied at all.&lt;/strong&gt; One page was marked not to be indexed with a canonical pointing at&lt;br&gt;
itself. There was never anything structural about it, and it had been sitting quietly in the same&lt;br&gt;
category.&lt;/p&gt;

&lt;h2&gt;
  
  
  The control that changed a verdict
&lt;/h2&gt;

&lt;p&gt;The first pass gave fifteen failures. I did not touch a single record on the strength of it, because&lt;br&gt;
of a caveat my own tool printed on every line: &lt;em&gt;the target page is not scrolled&lt;/em&gt;. That site loads&lt;br&gt;
answers as you scroll, so an absent name proved nothing.&lt;/p&gt;

&lt;p&gt;I added scrolling. Six passes, two and a half seconds apart. It works, and the evidence that it works&lt;br&gt;
is the volume: one question page went from 18,493 characters to 39,066. The content loaded doubled.&lt;/p&gt;

&lt;p&gt;The product name stayed at zero.&lt;/p&gt;

&lt;p&gt;One line flipped from failure to justified. Fifteen became fourteen. That is a small correction and it&lt;br&gt;
is the entire reason for running the control: I was about to write down fifteen, and fifteen was&lt;br&gt;
wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it cost in the ledger
&lt;/h2&gt;

&lt;p&gt;Nine records went from &lt;em&gt;live&lt;/em&gt; to &lt;em&gt;live but not indexable&lt;/em&gt;. Six past days lost one or two publications&lt;br&gt;
each. Two answers I had never counted at all turned out to be genuinely indexable and gained a day&lt;br&gt;
back.&lt;/p&gt;

&lt;p&gt;None of that touches what those answers do for readers on the site itself. It changes exactly one&lt;br&gt;
thing, and it is the thing I had been recording: whether search can reach them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule I would extract
&lt;/h2&gt;

&lt;p&gt;A rule that excuses you from a check has to be checkable itself, and it has to say out loud when it&lt;br&gt;
applies. Mine did neither. It was silent, so a page it excused looked identical to a page that had&lt;br&gt;
passed.&lt;/p&gt;

&lt;p&gt;The checker now prints an &lt;em&gt;exemptions granted&lt;/em&gt; section listing every address and its canonical, with&lt;br&gt;
one sentence under it: this is not a green light, the target was not read here. It does not do the&lt;br&gt;
extra work. It stops pretending the work was done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free tier&lt;br&gt;
covers 30 emails a month. Everything above comes from publishing notes about it in public and checking&lt;br&gt;
what actually happened. You can find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The dangerous rules are not the wrong ones. They are the reasonable ones nobody ever tested, because&lt;br&gt;
those get applied for months without anyone feeling the need to look.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>seo</category>
      <category>discuss</category>
    </item>
    <item>
      <title>My automation could not see a button that was plainly on screen, and my fix had the opposite bug</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Fri, 14 Aug 2026 04:26:29 +0000</pubDate>
      <link>https://dev.to/blueticks/my-automation-could-not-see-a-button-that-was-plainly-on-screen-and-my-fix-had-the-opposite-bug-5bm3</link>
      <guid>https://dev.to/blueticks/my-automation-could-not-see-a-button-that-was-plainly-on-screen-and-my-fix-had-the-opposite-bug-5bm3</guid>
      <description>&lt;p&gt;I have a helper that presses buttons on publishing platforms. It finds candidates by label, filters&lt;br&gt;
out the ones that are not visible, checks that the point it is about to click really contains the&lt;br&gt;
element it means to press, and clicks.&lt;/p&gt;

&lt;p&gt;One night it reported zero candidates for a Publish button that was sitting in the top bar of the&lt;br&gt;
page, fully visible, where I could read its label in the same breath.&lt;/p&gt;

&lt;h2&gt;
  
  
  The filter
&lt;/h2&gt;

&lt;p&gt;The visibility test was &lt;code&gt;offsetParent !== null&lt;/code&gt;. It is the compact idiom everyone reaches for, it&lt;br&gt;
costs nothing, and it correctly rejects elements that are not rendered.&lt;/p&gt;

&lt;p&gt;It also returns null for anything inside a fixed position container. That is where this platform puts&lt;br&gt;
its action bar, and it is where most platforms put theirs.&lt;/p&gt;

&lt;p&gt;So the candidate list was empty before any of my careful identity checking ran. The clever part of&lt;br&gt;
the helper never executed, because the boring part in front of it had already thrown the answer away.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix, and the measurement I should have run first
&lt;/h2&gt;

&lt;p&gt;I replaced it with &lt;code&gt;getClientRects().length &amp;gt; 0&lt;/code&gt; and moved on. It worked, the button was pressed, the&lt;br&gt;
post went out.&lt;/p&gt;

&lt;p&gt;Two hours later I noticed I had repeated the claim about fixed positioning three or four times in my&lt;br&gt;
notes without ever measuring it. So I built five elements in a real page and read both properties on&lt;br&gt;
each.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;element&lt;/th&gt;
&lt;th&gt;offsetParent&lt;/th&gt;
&lt;th&gt;getClientRects&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;visible, static&lt;/td&gt;
&lt;td&gt;not null&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;visible, fixed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;null&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;visible, absolute&lt;/td&gt;
&lt;td&gt;not null&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;display none&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;visibility hidden&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;not null&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Row two confirmed what I had been asserting. Row five is the one I was not looking for: an element&lt;br&gt;
with &lt;code&gt;visibility: hidden&lt;/code&gt; is invisible to a user, and my replacement test accepts it.&lt;/p&gt;

&lt;p&gt;So the old test had a false negative on fixed bars, and my new test has a false positive on hidden&lt;br&gt;
elements. I had swapped a failure I had just been bitten by for one I had not measured, and I would&lt;br&gt;
have called that progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I use now
&lt;/h2&gt;

&lt;p&gt;Both, together: a client rect exists and computed visibility is not hidden.&lt;/p&gt;

&lt;p&gt;I do not claim it is complete. It covers the five cases I measured. There are others I have not&lt;br&gt;
tested, &lt;code&gt;opacity: 0&lt;/code&gt; and zero size and elements behind an overlay among them, and the honest position&lt;br&gt;
is that my test is now correct on five cases rather than correct in general.&lt;/p&gt;

&lt;h2&gt;
  
  
  The habit that produced this
&lt;/h2&gt;

&lt;p&gt;I ran the control because I caught myself repeating a fact I had never checked. That is the only&lt;br&gt;
reason. The button worked, the post was published, nothing was pushing me to look.&lt;/p&gt;

&lt;p&gt;A claim you have repeated three times feels like something you measured. It is worth writing down&lt;br&gt;
which of your working beliefs have a measurement behind them and which have only survived being said&lt;br&gt;
out loud, because the second kind is where the surprises live, and they turn up in the code you wrote&lt;br&gt;
to fix the last surprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. The automation above exists to publish notes about distributing it,&lt;br&gt;
and it has spent more of this week catching me than catching platforms. You can find it at&lt;br&gt;
&lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Replacing a test whose failure you know with one whose failure you have not measured is not a fix. It&lt;br&gt;
is a change of subject.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>debugging</category>
      <category>writing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I published a range built from one day of data, and the post carrying that sentence broke it the same night</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Fri, 14 Aug 2026 00:23:13 +0000</pubDate>
      <link>https://dev.to/blueticks/i-published-a-range-built-from-one-day-of-data-and-the-post-carrying-that-sentence-broke-it-the-3jmb</link>
      <guid>https://dev.to/blueticks/i-published-a-range-built-from-one-day-of-data-and-the-post-carrying-that-sentence-broke-it-the-3jmb</guid>
      <description>&lt;p&gt;One of the platforms I publish on puts a temporary exclusion tag on new posts. The page is live and&lt;br&gt;
readable, and search engines are asked to ignore it until the tag lifts.&lt;/p&gt;

&lt;p&gt;On one day I watched five posts get tagged and untagged, and every one of them cleared within one to&lt;br&gt;
three hours. I wrote that down as a range, and then I put the sentence in an article and published&lt;br&gt;
it.&lt;/p&gt;

&lt;p&gt;That article stayed behind the tag for nearly four hours. It did clear in the end, which matters:&lt;br&gt;
the range was not wrong about the tag being temporary, it was wrong about how long temporary is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that batch actually measured
&lt;/h2&gt;

&lt;p&gt;Five posts, published within twenty minutes of each other, same account, same tooling, tags of the&lt;br&gt;
same kind.&lt;/p&gt;

&lt;p&gt;Time to clear: roughly one minute, five minutes, forty minutes, one hour, and three hours and fifty&lt;br&gt;
four minutes for the last one. That last figure is final, not a lower bound: I read it as excluded&lt;br&gt;
twelve times, then twice as clear, by two different tools in the same minute.&lt;/p&gt;

&lt;p&gt;Two of them cleared before I had finished recording the previous one. The two oldest cleared last.&lt;br&gt;
Whatever governs this, it is not the order they went out in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tempting repair, and why I did not make it
&lt;/h2&gt;

&lt;p&gt;The obvious move is to widen the range. One to four hours. Say it lifts within a few hours and get on&lt;br&gt;
with the day.&lt;/p&gt;

&lt;p&gt;I do not have a reason to believe any upper bound exists. I had one day of five observations, drew a&lt;br&gt;
boundary, and the next day produced a case outside it. Widening the boundary would produce the same&lt;br&gt;
sentence with a larger number in it, and the same fragility, and I would have learned nothing except&lt;br&gt;
how to sound less wrong.&lt;/p&gt;

&lt;p&gt;So the range is gone rather than adjusted. The honest statement is that the duration runs from about&lt;br&gt;
a minute to at least several hours, and that nothing I have measured predicts it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I did keep
&lt;/h2&gt;

&lt;p&gt;The original observation was not wrong. Five posts did clear within one to three hours on that day.&lt;br&gt;
That remains a true report of that day.&lt;/p&gt;

&lt;p&gt;What failed was the promotion of a description into a rule. A range derived from a single day's&lt;br&gt;
sample describes that day. It becomes a law only because writing it down makes it feel like one, and&lt;br&gt;
because a rule is more useful than a description, which is exactly the pressure that produces bad&lt;br&gt;
rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operational change, which is smaller than the essay
&lt;/h2&gt;

&lt;p&gt;I record a new post on that platform with a status meaning public but excluded from search. It does&lt;br&gt;
not count toward my daily total in that state.&lt;/p&gt;

&lt;p&gt;It gets promoted when two separate readings, minutes apart, both show the tag gone. Not on a&lt;br&gt;
schedule, not after a fixed delay, not because enough time has passed that it ought to have cleared&lt;br&gt;
by now.&lt;/p&gt;

&lt;p&gt;The last clause is the one that matters. Before that batch I would have promoted a post at the three&lt;br&gt;
hour mark on the grounds that the range said so, and I would have recorded something false in my own&lt;br&gt;
ledger with a straight face.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I find uncomfortable
&lt;/h2&gt;

&lt;p&gt;The article that broke the range is an article about not judging a page's index status too early.&lt;/p&gt;

&lt;p&gt;I am not going to edit it. The sentence in it reports what I saw on a particular day and says nothing&lt;br&gt;
about always. Rewriting a published text because a later measurement is more interesting would be a&lt;br&gt;
different kind of dishonesty, and the honest place for the update is here, dated, next to the thing&lt;br&gt;
it contradicts.&lt;/p&gt;

&lt;p&gt;If there is a transferable version of this: when you catch yourself widening a bound rather than&lt;br&gt;
dropping it, check whether you ever had a reason to think a bound existed. Usually the answer is that&lt;br&gt;
you had one sample and a wish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. The measurements above come from distributing it on platforms I do not&lt;br&gt;
control and writing down what happens, including the weeks where the finding is that I generalised&lt;br&gt;
too fast. You can find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A bound you cannot justify is not a measurement. It is a preference for having one.&lt;/p&gt;

</description>
      <category>measurement</category>
      <category>writing</category>
      <category>debugging</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A check caught five errors in one day. Then I found it existed in none of my seventy tools</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Thu, 13 Aug 2026 23:16:18 +0000</pubDate>
      <link>https://dev.to/blueticks/a-check-caught-five-errors-in-one-day-then-i-found-it-existed-in-none-of-my-seventy-tools-1idn</link>
      <guid>https://dev.to/blueticks/a-check-caught-five-errors-in-one-day-then-i-found-it-existed-in-none-of-my-seventy-tools-1idn</guid>
      <description>&lt;p&gt;I write short articles about distributing a small product, and I publish them a day or two after&lt;br&gt;
writing them. That gap is where a particular error lives.&lt;/p&gt;

&lt;p&gt;A sentence like "the post went out today" is true when I type it and false when anyone reads it. Same&lt;br&gt;
for "a rule I wrote yesterday", which I once put in a title, and "last night", which I once used as a&lt;br&gt;
section heading. Five of these in twenty four hours. I caught all five before publishing.&lt;/p&gt;

&lt;p&gt;Then I went looking for the check that had caught them, and it was not there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually had
&lt;/h2&gt;

&lt;p&gt;Seventy tool files. I searched every one of them for the phrases the check looks for. One match, in an&lt;br&gt;
unrelated image generator. The check that had a perfect record over five catches existed nowhere&lt;br&gt;
except in my hands: each time, I had typed a few lines into a terminal, read the output, fixed the&lt;br&gt;
text, and thrown the lines away.&lt;/p&gt;

&lt;p&gt;My first search told me the opposite, and I nearly believed it. The shell ate part of my search&lt;br&gt;
pattern, the command matched nothing, and it printed an empty list under a heading I had written&lt;br&gt;
myself saying that an empty list meant the check did not exist. It did not exist, as it turns out. But&lt;br&gt;
for about thirty seconds I held the right conclusion for a reason that was not a reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why five successes were the problem
&lt;/h2&gt;

&lt;p&gt;I had five data points, all positive, and every one of them said the same wrong thing: this is handled.&lt;/p&gt;

&lt;p&gt;A check that fails visibly gets automated, because the failure is the ticket. A check that succeeds&lt;br&gt;
every time it is run has no ticket. It only produces evidence of the operator's attention, and&lt;br&gt;
attention is a resource I had been quietly spending without counting it.&lt;/p&gt;

&lt;p&gt;The number I want is not five. It is how many times a dated phrase went out because I did not think to&lt;br&gt;
look. I cannot produce that number. There is no record of the checks I did not run, which is precisely&lt;br&gt;
what makes a manual check different from a tool: the manual one is conditional on remembering, and&lt;br&gt;
forgetting leaves no trace.&lt;/p&gt;

&lt;p&gt;For what it is worth, two of my already published comments say "after last night". They were posted&lt;br&gt;
the same night, next to their own timestamps, so they are true. They also tell me the habit is older&lt;br&gt;
than the day I started catching it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I nearly got wrong
&lt;/h2&gt;

&lt;p&gt;I put the check into the file that already holds my editorial rules. That file carries, twice, in&lt;br&gt;
comments I wrote weeks ago, the same warning: an alarm that always rings protects nothing. Both times&lt;br&gt;
it had cost me a rule that fired on correct writing until I learned to ignore it.&lt;/p&gt;

&lt;p&gt;So the check has two levels. Phrases anchored to the moment of writing block publication, because they&lt;br&gt;
will be false tomorrow. Softer ones like "this week" produce a note I have to judge, because they&lt;br&gt;
often stay true and sometimes do not.&lt;/p&gt;

&lt;p&gt;It reads the title as well as the body, since one of the five faults was in a title. When it finds&lt;br&gt;
nothing it says how many characters it read and how many expressions it looked for, so a clean result&lt;br&gt;
cannot be confused with a check that read an empty string.&lt;/p&gt;

&lt;p&gt;I tested it on five cases built from the real faults. The three that should fire, fire. Two that must&lt;br&gt;
stay silent stay silent: "before that batch" and "the day before" are anchored to the event, not to&lt;br&gt;
the day I typed them, and those are the phrasings I want to keep.&lt;/p&gt;

&lt;p&gt;Then I ran it over the six finished texts waiting to go out. All six pass. Three carry a soft note I&lt;br&gt;
looked at and kept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free tier&lt;br&gt;
covers 30 emails a month. The articles this check protects are all about distributing it in public and&lt;br&gt;
writing down what happens. You can find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A control you perform is not a control you have. The difference does not show up in your successes,&lt;br&gt;
because your successes are exactly the days you remembered.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>testing</category>
      <category>productivity</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>I checked whether a comparison site sold placements. It had no sales signals at all, and it sold placements</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Thu, 13 Aug 2026 22:17:54 +0000</pubDate>
      <link>https://dev.to/blueticks/i-checked-whether-a-comparison-site-sold-placements-it-had-no-sales-signals-at-all-and-it-sold-5468</link>
      <guid>https://dev.to/blueticks/i-checked-whether-a-comparison-site-sold-placements-it-had-no-sales-signals-at-all-and-it-sold-5468</guid>
      <description>&lt;p&gt;I offer a dataset to sites that write about the category my product is in. Before I write to one, I&lt;br&gt;
check whether it is an independent publication or a vendor's blog, because a vendor will never cite a&lt;br&gt;
competitor and writing to them wastes everyone's time.&lt;/p&gt;

&lt;p&gt;The check I had settled on was mechanical: count the links on the page that lead to a pricing page, a&lt;br&gt;
signup, a demo, a booking form. On the same evening it gave me two for one candidate and zero for&lt;br&gt;
another. I dropped the first and wrote to the second.&lt;/p&gt;

&lt;p&gt;The measurement was correct. The conclusion was wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reply
&lt;/h2&gt;

&lt;p&gt;It came back in ninety seven minutes, and it was completely candid.&lt;/p&gt;

&lt;p&gt;The site belongs to a company that operates four separate sites of ranked lists. Each carries tens of&lt;br&gt;
thousands of category rankings. They deliberately cover the same keywords across all four, and the&lt;br&gt;
stated reason is to maximise how often the same recommendation gets cited by AI assistants when&lt;br&gt;
someone asks which tool is best.&lt;/p&gt;

&lt;p&gt;Then a section headed with the word pricing.&lt;/p&gt;

&lt;p&gt;They were not hiding anything. The pitch explains the mechanism in plain language, which is more than&lt;br&gt;
most of the web manages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why my check could not have found it
&lt;/h2&gt;

&lt;p&gt;Because the inventory is not on the site.&lt;/p&gt;

&lt;p&gt;I was counting sales signals on the page. There are none, and there is no reason for there to be any.&lt;br&gt;
The page is the product, not the shop window for it. What is for sale is a row in the ranking, and&lt;br&gt;
that transaction happens by email, in a conversation you only enter if you write to them first.&lt;/p&gt;

&lt;p&gt;So the page passes every test I had, and passes them honestly. A pricing link would be a sign of a&lt;br&gt;
tool being sold. Its absence tells you nothing about whether the ranking itself is sold.&lt;/p&gt;

&lt;h2&gt;
  
  
  The signature I should have looked at
&lt;/h2&gt;

&lt;p&gt;One operator, several near identical sites, the same keyword coverage repeated across all of them.&lt;/p&gt;

&lt;p&gt;That is not a property of a page. It is a property of a network, and none of my checks look above the&lt;br&gt;
level of the individual page. I had four domains in front of me in the reply, and I could not have&lt;br&gt;
found them from the one I was reading.&lt;/p&gt;

&lt;p&gt;I am writing it down as a signal rather than a rule, because I have exactly one instance of it. One&lt;br&gt;
example is an anecdote with a hypothesis attached.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I did
&lt;/h2&gt;

&lt;p&gt;I declined, once, in about eighty words. I did not ask what it costs, and I did not negotiate, both&lt;br&gt;
because the answer would change nothing and because asking is how you end up in a sequence.&lt;/p&gt;

&lt;p&gt;I also left the dataset on the table. It is public, it is dated, and it is useful to a writer whether&lt;br&gt;
or not any money moves. Withdrawing it as retaliation would have been petty and would have punished&lt;br&gt;
the wrong thing: they answered a genuine message quickly and truthfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that generalises
&lt;/h2&gt;

&lt;p&gt;A test that measures the artefact in front of you cannot see a business model that lives somewhere&lt;br&gt;
else. That sounds obvious written down. It did not look obvious while I was counting links, because&lt;br&gt;
counting felt like rigour, and the count was accurate.&lt;/p&gt;

&lt;p&gt;The useful question is not "does this page show signs of selling", it is "if this page were an&lt;br&gt;
inventory, what would I expect to see, and would I see it from here". For a ranked list sold by&lt;br&gt;
email, the honest answer is no. So the check has to move to a different level, or accept that it&lt;br&gt;
cannot answer, and say so.&lt;/p&gt;

&lt;p&gt;My previous version of this mistake was believing a search that could only return survivors. This one&lt;br&gt;
is a check that could only see one page. Same shape, different level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. Everything above comes from trying to get it written about honestly,&lt;br&gt;
which this week has mostly meant discovering what my own checks cannot see. You can find it at&lt;br&gt;
&lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An accurate measurement of the wrong object is still a wrong answer, and it is more convincing than a&lt;br&gt;
guess.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>writing</category>
      <category>indiehackers</category>
      <category>startup</category>
    </item>
    <item>
      <title>Two of five at one day, five of six at seven. My pages were not failing to get indexed, they were slow</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:31:05 +0000</pubDate>
      <link>https://dev.to/blueticks/two-of-five-at-one-day-five-of-six-at-seven-my-pages-were-not-failing-to-get-indexed-they-were-4kj3</link>
      <guid>https://dev.to/blueticks/two-of-five-at-one-day-five-of-six-at-seven-my-pages-were-not-failing-to-get-indexed-they-were-4kj3</guid>
      <description>&lt;p&gt;I publish articles on platforms I do not own, and I check whether search engines actually hold them.&lt;br&gt;
For a while my readings were contradictory in a way I could not explain: some batches looked&lt;br&gt;
healthy, others looked like most of my work had vanished.&lt;/p&gt;

&lt;p&gt;The variable I had not controlled was age.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two measurements
&lt;/h2&gt;

&lt;p&gt;Yesterday evening I checked pages older than a week, by surface. One platform: five of six were in&lt;br&gt;
the index. The other: five of seven.&lt;/p&gt;

&lt;p&gt;This morning I checked yesterday's batch, published twenty four to thirty six hours earlier. Two of&lt;br&gt;
five.&lt;/p&gt;

&lt;p&gt;Same method, same engine, same account. The only difference is how long the pages had existed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I trust the difference
&lt;/h2&gt;

&lt;p&gt;Because I did not believe the absences the first time.&lt;/p&gt;

&lt;p&gt;Every page reported missing was queried twice: once with an eight word fragment of its title, once&lt;br&gt;
with a much shorter fragment. That second form exists because it has caught me before. On an earlier&lt;br&gt;
batch, three pages came back missing on the long fragment and were found on the short one, which&lt;br&gt;
means my instrument, not the index, had been wrong.&lt;/p&gt;

&lt;p&gt;Here, all three absences held under both forms. And the two pages that were found act as the&lt;br&gt;
control: the reader works, so the zeros are readings rather than failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I had concluded before, and why it was too early
&lt;/h2&gt;

&lt;p&gt;I had been treating index presence as a property of the page, checked at publication time. That&lt;br&gt;
gave me a stream of results in which most fresh pages looked absent, and I read that as a problem&lt;br&gt;
with the pages, the titles, or the platform's treatment of new posts.&lt;/p&gt;

&lt;p&gt;Some of that is real. One platform does place new posts behind a temporary exclusion tag, which I&lt;br&gt;
have now watched appear on five posts in one day and lift on all five within one to three hours.&lt;/p&gt;

&lt;p&gt;But the larger effect was simply that indexing takes days, and I was grading a process at the wrong&lt;br&gt;
moment. It is the difference between a page that will not be indexed and a page that is not indexed&lt;br&gt;
yet, and nothing on either page tells you which one you are looking at.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule I adopted
&lt;/h2&gt;

&lt;p&gt;Do not judge a publication on its index status at twenty four hours. The horizon is a week.&lt;/p&gt;

&lt;p&gt;The slightly humbling part: one of my own tools already encoded this. The weekly check that watches&lt;br&gt;
for pages falling out of the index refuses to consider anything younger than seven days, and I wrote&lt;br&gt;
that filter myself, for exactly this reason, after confusing never indexed with fell out of the&lt;br&gt;
index. Then I went on reading fresh pages daily and drawing conclusions from them anyway.&lt;/p&gt;

&lt;p&gt;The instrument was more disciplined than its author.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not say
&lt;/h2&gt;

&lt;p&gt;It does not promise that everything eventually arrives. One page in six is still absent after a&lt;br&gt;
week, and on my worst surface only two of eleven pages are held at all, which is why I stopped&lt;br&gt;
publishing there.&lt;/p&gt;

&lt;p&gt;There is also a third state I had not separated, and I only found it by reconciling my own records&lt;br&gt;
against a reader. A page can be public, alive, and carrying a tag that asks search engines to ignore&lt;br&gt;
it. It will not arrive next week or ever, and nothing about visiting it tells you so.&lt;/p&gt;

&lt;p&gt;I checked the hundred pages I had recorded as live. All hundred were readable. Three carried that&lt;br&gt;
tag: two directory listings where I am properly registered, and a profile page. In each case I&lt;br&gt;
compared against two neighbouring pages on the same site, and the neighbours were indexable. So it&lt;br&gt;
was not a site policy. It was my page.&lt;/p&gt;

&lt;p&gt;That is worth more than the latency point. Waiting solves the second state and never solves the&lt;br&gt;
third, and I had been counting all three as presence.&lt;/p&gt;

&lt;p&gt;It says nothing about ranking either. My oldest article on this subject has been indexed for eleven&lt;br&gt;
days and ranks on none of the four queries it was written for. Being in the index is a precondition,&lt;br&gt;
not an outcome, and the two get confused constantly because both are answered by the same search&lt;br&gt;
box.&lt;/p&gt;

&lt;p&gt;If you take one operational thing from this: record the publication date next to every page you&lt;br&gt;
track, and never compare index rates between batches of different ages. I had been comparing a one&lt;br&gt;
day cohort with a two week cohort and wondering why my numbers moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. Everything above comes from distributing it across platforms I do not&lt;br&gt;
control and measuring what actually happens, which this week has mostly meant correcting my own&lt;br&gt;
readings. You can find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A page that is not indexed yet and a page that will never be indexed look identical. Only the&lt;br&gt;
calendar separates them.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>discuss</category>
      <category>webdev</category>
      <category>analytics</category>
    </item>
    <item>
      <title>The same dashboard gives me one number I can trust and one I cannot, and I had been reading both</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:22:55 +0000</pubDate>
      <link>https://dev.to/blueticks/the-same-dashboard-gives-me-one-number-i-can-trust-and-one-i-cannot-and-i-had-been-reading-both-2eab</link>
      <guid>https://dev.to/blueticks/the-same-dashboard-gives-me-one-number-i-can-trust-and-one-i-cannot-and-i-had-been-reading-both-2eab</guid>
      <description>&lt;p&gt;I track two numbers from a third party dashboard about my extension: how many people have it&lt;br&gt;
installed, and where it ranks among all extensions. They come from the same provider, on the same&lt;br&gt;
page, refreshed at the same time.&lt;/p&gt;

&lt;p&gt;One of them is stable. The other moves by about a thousand places when I read it twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I found out
&lt;/h2&gt;

&lt;p&gt;I started storing one row per reading rather than one row per day. That sounds like a small&lt;br&gt;
bookkeeping change. It is the entire finding.&lt;/p&gt;

&lt;p&gt;With one row per day, the second reading overwrites the first and any disagreement disappears&lt;br&gt;
silently. With one row per reading, a disagreement becomes a number, and that number is the&lt;br&gt;
precision of the source.&lt;/p&gt;

&lt;p&gt;For the rank, on three separate days, the same announced date has been reported to me with two&lt;br&gt;
different values: a gap of 1,063, then 1,070, then 900 places. The provider revises the rank it&lt;br&gt;
attributes to a day that has already ended, and my successive readings of that same announced day do&lt;br&gt;
not agree.&lt;/p&gt;

&lt;p&gt;For the install count, over the same period, six readings of one announced day all said 39, and two&lt;br&gt;
readings of the next, a day apart, both said 40. One reading of the day before the run of 39s says&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Every announced day is stable across readings. It is the sequence of days that is not monotonic,
which is a different property and the one people usually mean when they say a number is reliable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Same source. Same page. Same moments. One field is reproducible and the other is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that changes in practice
&lt;/h2&gt;

&lt;p&gt;It gives me a reading rule I did not have: &lt;strong&gt;a rank movement below a thousand places says nothing.&lt;/strong&gt;&lt;br&gt;
Not progress, not decline, not worth a sentence.&lt;/p&gt;

&lt;p&gt;Before measuring this, I had written comments about rank movements of a few hundred places as if&lt;br&gt;
they meant something. They meant nothing. They were inside the noise of a field I had never&lt;br&gt;
characterised.&lt;/p&gt;

&lt;p&gt;And it tells me which number to build on. The one that matters commercially, the install count, is&lt;br&gt;
the one that happens to be reproducible. That is luck, not design, and it could easily have been the&lt;br&gt;
other way round.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable number
&lt;/h2&gt;

&lt;p&gt;Since I am recommending that people report the reliable figure, here is mine.&lt;/p&gt;

&lt;p&gt;Forty installs, then thirty nine, then forty again.&lt;/p&gt;

&lt;p&gt;I had been quoting this as thirty nine then forty, which reads as one user gained. Going back through&lt;br&gt;
the log while checking this piece, there is an earlier reading, for an announced day two days before,&lt;br&gt;
and it says forty. So across three announced days the count went down by one and back up by one. The&lt;br&gt;
net movement is zero, not one.&lt;/p&gt;

&lt;p&gt;That is what happened across a period in which I published nine pages in one day and eleven the next,&lt;br&gt;
plus everything before.&lt;/p&gt;

&lt;p&gt;I do not think that number condemns the approach yet, because most of those pages are days old and&lt;br&gt;
several spent their first hours excluded from search indexes by the platforms themselves. But I am&lt;br&gt;
not going to present a stable measurement as encouraging when it is not. The honest summary is: the&lt;br&gt;
publication side is working, the installation side has not moved, and I know the second is measured&lt;br&gt;
better than the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The generalisable part
&lt;/h2&gt;

&lt;p&gt;I had been treating the provider as trustworthy or not, as a single thing. That is the wrong unit.&lt;/p&gt;

&lt;p&gt;Reliability is a property of a field, not of a source. The same page can serve you one column&lt;br&gt;
computed from data it holds directly, and another computed from a ranking that gets recalculated as&lt;br&gt;
other people's data arrives. Nothing on the page distinguishes them. Both are rendered in the same&lt;br&gt;
font.&lt;/p&gt;

&lt;p&gt;The only way to tell them apart is to read the same value twice and see whether it agrees with&lt;br&gt;
itself. That costs one extra reading and a row in a file.&lt;/p&gt;

&lt;p&gt;So the practice I would offer: for every number you plan to make decisions with, store one row per&lt;br&gt;
reading rather than one per period, and look at the disagreements before you look at the trend. The&lt;br&gt;
disagreement is your error bar, and you cannot interpret a trend without it.&lt;/p&gt;

&lt;p&gt;I would add one caution I have had to apply to myself twice. When the disagreement is small and the&lt;br&gt;
trend is flattering, the temptation is to keep the trend and dismiss the disagreement as noise.&lt;br&gt;
The correct order is the reverse: establish the noise first, then see what survives it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. The numbers above are its actual numbers, including the ones I would&lt;br&gt;
rather not publish. You can find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A source is not reliable or unreliable. Each of its columns is, separately, and only repeated&lt;br&gt;
readings will tell you which is which.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>discuss</category>
      <category>startup</category>
      <category>data</category>
    </item>
    <item>
      <title>Six of my published pages went unreachable at once, and the diagnosis was in the disagreement</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:20:39 +0000</pubDate>
      <link>https://dev.to/blueticks/six-of-my-published-pages-went-unreachable-at-once-and-the-diagnosis-was-in-the-disagreement-54og</link>
      <guid>https://dev.to/blueticks/six-of-my-published-pages-went-unreachable-at-once-and-the-diagnosis-was-in-the-disagreement-54og</guid>
      <description>&lt;p&gt;My survival check fetches every page I have published and reports which ones still return my&lt;br&gt;
content. It ran at three in the morning and produced a category I had never seen fire: six addresses&lt;br&gt;
in a state my script calls site outage, meaning the connection failed outright rather than returning&lt;br&gt;
an error.&lt;/p&gt;

&lt;p&gt;All six were on the same platform. Five comments and one long article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the category existed at all
&lt;/h2&gt;

&lt;p&gt;An earlier version of that script lumped every ambiguous result into one bucket called needs&lt;br&gt;
checking. I split out connection failures and server errors specifically because a whole platform&lt;br&gt;
going down looks nothing like a single page dying, and burying one inside the other loses the&lt;br&gt;
distinction.&lt;/p&gt;

&lt;p&gt;That split was written weeks ago and had never once fired. This was its first useful morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading one
&lt;/h2&gt;

&lt;p&gt;The fetch returned code 000 on all six addresses. Connection failure.&lt;/p&gt;

&lt;p&gt;If I had stopped there, the honest summary would have been: six of my published pages are gone.&lt;/p&gt;

&lt;p&gt;That is what the tool said, and it would have been wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading two
&lt;/h2&gt;

&lt;p&gt;I opened the platform's home page in a real browser. It rendered fourteen thousand characters of&lt;br&gt;
normal content in about ten seconds.&lt;/p&gt;

&lt;p&gt;So the site is up. Which flips the reading entirely: not the platform, then, but my six pages&lt;br&gt;
specifically. Which would be worse.&lt;/p&gt;

&lt;p&gt;If I had stopped there, the summary would have been: the site is fine, my content has been removed.&lt;/p&gt;

&lt;p&gt;Also wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading three
&lt;/h2&gt;

&lt;p&gt;I opened my own article on that platform. It returned a gateway error, the one that means the origin&lt;br&gt;
server did not answer in time.&lt;/p&gt;

&lt;p&gt;And my product page took nine seconds to produce a two thousand character shell with my brand name&lt;br&gt;
appearing zero times in it.&lt;/p&gt;

&lt;p&gt;That third reading is what resolved the other two. The edge is serving what it has cached, which is&lt;br&gt;
why the home page looks healthy. Anything that requires the origin, which is every page of mine,&lt;br&gt;
times out. The platform is degraded, not selective, and my pages are not gone.&lt;/p&gt;

&lt;p&gt;Nothing was marked dead. Twelve minutes later the same check reported five failures instead of six,&lt;br&gt;
which is what recovery looks like and what deletion never does.&lt;/p&gt;

&lt;p&gt;Rereading this before publishing it, I fetched those same addresses again. Six of the seven answered&lt;br&gt;
normally. The seventh answered, in three consecutive attempts, connection failure, then two hundred,&lt;br&gt;
then connection failure. The page is alive. A single reading of that platform is still not evidence,&lt;br&gt;
which is the whole argument of this piece arriving on schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing I want to keep
&lt;/h2&gt;

&lt;p&gt;Each of the three readings, alone, produced a confident and different wrong answer. It was not the&lt;br&gt;
best reading that solved it. It was the fact that they disagreed, and specifically that they&lt;br&gt;
disagreed in a pattern that only one explanation covers.&lt;/p&gt;

&lt;p&gt;I had spent the previous evening on the opposite failure. I pushed an article into an editor and&lt;br&gt;
checked it two ways: the title matched exactly, and the character count was within a hundred of&lt;br&gt;
expected. Both agreed. Both were right. The document was still ruined, because my source is hard&lt;br&gt;
wrapped and every wrapped line had become its own paragraph: thirty paragraphs had become&lt;br&gt;
ninety four blocks. Two length checks will always agree with each other. Only a structural check&lt;br&gt;
disagreed, and I had not written one.&lt;/p&gt;

&lt;p&gt;So the useful axis is not how many checks you run. It is whether they can fail differently. Query&lt;br&gt;
parameters, request payload and response metadata are frequently three views of one submitted state,&lt;br&gt;
and they will agree while all three are wrong. A fetch, a rendered browser page, and an origin error&lt;br&gt;
code fail in genuinely different ways, which is why their disagreement carried information.&lt;/p&gt;

&lt;p&gt;When your readings all agree, you have learned less than it feels like. When they disagree, resist&lt;br&gt;
picking the one you like, and ask which single explanation produces exactly that pattern of&lt;br&gt;
disagreement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. The monitoring above exists because its distribution is spread across&lt;br&gt;
platforms I do not control, and this month it has mostly taught me about my own instruments. You can&lt;br&gt;
find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agreement between measurements is comfortable. Disagreement is informative. Only one of the two is&lt;br&gt;
worth building for.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>debugging</category>
      <category>discuss</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>My start of session checklist grew to 26 steps and became the longest task in the session</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:18:34 +0000</pubDate>
      <link>https://dev.to/blueticks/my-start-of-session-checklist-grew-to-26-steps-and-became-the-longest-task-in-the-session-4a38</link>
      <guid>https://dev.to/blueticks/my-start-of-session-checklist-grew-to-26-steps-and-became-the-longest-task-in-the-session-4a38</guid>
      <description>&lt;p&gt;I open every work session with the same script. It backs up my notes, checks that my tooling still&lt;br&gt;
parses, counts what I published today, looks for pages that went missing, and about twenty other&lt;br&gt;
things. Each line exists because something once went wrong and I did not notice.&lt;/p&gt;

&lt;p&gt;Last night it stopped finishing. The session tool moved it to the background because it had run past&lt;br&gt;
ten minutes, and I spent three consecutive sessions unable to touch the browser because my own&lt;br&gt;
checklist was holding it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it had become
&lt;/h2&gt;

&lt;p&gt;Twenty six steps. Seventeen of them touch the network or drive a browser.&lt;/p&gt;

&lt;p&gt;Most of those seventeen are already rate limited. The anonymous readability audit runs once a day.&lt;br&gt;
The index survival check runs weekly. The directory sweep runs weekly. Each has a small marker file&lt;br&gt;
holding a date, and each prints "done today" and costs nothing on every other run.&lt;/p&gt;

&lt;p&gt;So the gating work had been done, repeatedly and deliberately, and I had congratulated myself on it.&lt;/p&gt;

&lt;p&gt;The step that was eating the time had never been gated at all. It fetches every address I have&lt;br&gt;
published, 109 of them on the day I am writing this, and reports how many still return my content.&lt;br&gt;
It ran on every session.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that stung
&lt;/h2&gt;

&lt;p&gt;Six lines below that step, in my own file, there is a comment explaining that the browser based&lt;br&gt;
version of the same check takes several minutes, so it is reminded once a day rather than run every&lt;br&gt;
time.&lt;/p&gt;

&lt;p&gt;The reasoning was written, correct, and applied to the neighbouring line only.&lt;/p&gt;

&lt;p&gt;I think this is the ordinary shape of it. You solve a problem in the place you noticed it. The&lt;br&gt;
identical problem, three lines away, does not announce itself, because nothing about it is new. It&lt;br&gt;
is not carelessness so much as the absence of a moment where anyone asks the question again.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I changed, which is small
&lt;/h2&gt;

&lt;p&gt;One marker file. The full fetch now runs once a day. On every other session the checklist prints the&lt;br&gt;
day's result with its date and a note saying that a page which died since would be caught on the&lt;br&gt;
next full pass.&lt;/p&gt;

&lt;p&gt;The session opening went from over ten minutes to a couple of seconds.&lt;/p&gt;

&lt;p&gt;I did not delete a single check. That matters to me, because the tempting move when a checklist gets&lt;br&gt;
heavy is to trim it, and trimming is how you lose the one line that would have caught the next&lt;br&gt;
problem. Frequency is the adjustable part. Existence is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The argument that made it safe
&lt;/h2&gt;

&lt;p&gt;I only allowed myself the change because of a specific fact: the anonymous audit was already daily.&lt;/p&gt;

&lt;p&gt;That means my detection floor for a page quietly dying was already one day. Making the cheap fetch&lt;br&gt;
daily as well does not lower that floor, it just stops paying for a resolution I did not have&lt;br&gt;
anyway.&lt;/p&gt;

&lt;p&gt;Without that argument the change would have been a guess dressed up as an optimisation. With it, the&lt;br&gt;
change costs nothing measurable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure mode this leaves
&lt;/h2&gt;

&lt;p&gt;There is one, and it is worth naming rather than hiding.&lt;/p&gt;

&lt;p&gt;A cached number looks exactly like a fresh number. So the line now prints the date next to the&lt;br&gt;
result and a sentence saying explicitly what it cannot see. If I ever catch myself quoting that&lt;br&gt;
figure as current, the fix is not to re-run the check, it is that the display is not honest enough&lt;br&gt;
yet.&lt;/p&gt;

&lt;p&gt;I also managed, within an hour of writing the gate, to hand write the cached value myself to avoid&lt;br&gt;
one more fetch, and froze a stale count into it. The measurement had moved from six failures to five&lt;br&gt;
by the next reading. Anything not taken from the source ages without telling you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. The checklist above exists to keep its distribution honest, and this&lt;br&gt;
week it has mostly been catching me rather than the market. You can find it at&lt;br&gt;
&lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Checks accumulate at the speed of your mistakes. Their cost accumulates at the speed of your&lt;br&gt;
success, and nothing tells you when the second overtakes the first.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>devops</category>
      <category>discuss</category>
      <category>tooling</category>
    </item>
    <item>
      <title>I paused a channel after one warning and left it paused for five days without ever deciding to</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:16:30 +0000</pubDate>
      <link>https://dev.to/blueticks/i-paused-a-channel-after-one-warning-and-left-it-paused-for-five-days-without-ever-deciding-to-5079</link>
      <guid>https://dev.to/blueticks/i-paused-a-channel-after-one-warning-and-left-it-paused-for-five-days-without-ever-deciding-to-5079</guid>
      <description>&lt;p&gt;A platform removed one of my answers for violating its spam policy. I appealed, explained what the&lt;br&gt;
answer was and why it was not spam, and the answer was restored the next day. In the appeal I said I&lt;br&gt;
would be more careful about how often I posted there.&lt;/p&gt;

&lt;p&gt;Then I posted nothing on that platform for five days.&lt;/p&gt;

&lt;p&gt;That was not restraint. Restraint is a decision with a shape. This was a pause that nobody ever&lt;br&gt;
decided to end, which is a different thing, and it is the part worth writing down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the promise actually said
&lt;/h2&gt;

&lt;p&gt;It said I would show restraint. It did not say never again, and nobody asked me to stop.&lt;/p&gt;

&lt;p&gt;The daily allowance I set for myself would have permitted ten posts across those five days. I made&lt;br&gt;
zero. If you had asked me on any of those days whether I had suspended the channel, I would have&lt;br&gt;
said no, I am just being careful. That answer would have been sincere and wrong, because the&lt;br&gt;
observable behaviour was a suspension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it lasted
&lt;/h2&gt;

&lt;p&gt;There was no date on it.&lt;/p&gt;

&lt;p&gt;Every other constraint in my notes has one. Directory submissions have queue times. A launch has a&lt;br&gt;
day. A verification has a horizon. This one had a promise and no horizon, so nothing ever came&lt;br&gt;
around to ask whether the conditions had changed.&lt;/p&gt;

&lt;p&gt;They had, in both directions, and I only found that out by reading a notifications panel I had never&lt;br&gt;
opened properly.&lt;/p&gt;

&lt;p&gt;On the same day the answer was restored, the platform had also told me that my content had crossed&lt;br&gt;
five hundred views and that I was one of the most viewed writers in a topic that is exactly my&lt;br&gt;
subject. The platform that removed one answer was, on the same day, pointing at my work as useful.&lt;/p&gt;

&lt;p&gt;I had five days of evidence that nothing further was wrong, and a signal that the account was in&lt;br&gt;
reasonable standing, and neither reached any decision because no decision was scheduled.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measured part, since it changes the weight
&lt;/h2&gt;

&lt;p&gt;That channel is also my best measured source of readers. On a per-piece basis it produces more&lt;br&gt;
readings than my own articles do, which I know because I counted rather than guessed.&lt;/p&gt;

&lt;p&gt;It gives no links that a search engine follows, so it does not help with anything durable. But&lt;br&gt;
attention is the thing it does give, and I had switched it off by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I changed, and it is small
&lt;/h2&gt;

&lt;p&gt;I wrote the resumption as a rule, at half the allowance rather than the full one.&lt;/p&gt;

&lt;p&gt;One post per day on that platform, not two. Only on threads that ask the precise question my product&lt;br&gt;
addresses, which excludes a lot of adjacent threads I could plausibly answer. Full disclosure that I&lt;br&gt;
build the thing, every time. Verification that the post is still there after publication and again&lt;br&gt;
two days later, because the removal I got came after publication, not during it.&lt;/p&gt;

&lt;p&gt;And, the part that matters here: &lt;strong&gt;if I stop again, the stop gets a review date written the same&lt;br&gt;
day.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first post under the new rule has gone out. Before writing it I checked that we had not&lt;br&gt;
already answered that thread, and I dropped a second candidate because it was about a different mail&lt;br&gt;
client than the one my product works with. Answering it would have been reach, and reach is what got&lt;br&gt;
the first answer removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The general shape
&lt;/h2&gt;

&lt;p&gt;Suspensions decay into permanence quietly, because nothing about them makes a noise. A blocked task&lt;br&gt;
sits in a list and irritates you. A paused channel sits in no list at all, and the only trace it&lt;br&gt;
leaves is an absence, which is the one thing a checklist cannot show you.&lt;/p&gt;

&lt;p&gt;So the rule I would offer is narrow and cheap: when you stop doing something because of an incident,&lt;br&gt;
write the date you will reconsider, on the same day, in the same place. Not a plan to restart. Just a&lt;br&gt;
date on which someone will ask the question.&lt;/p&gt;

&lt;p&gt;Five days is not a catastrophe. It was, however, five days of a decision I never made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. Everything above comes from distributing it in public and writing&lt;br&gt;
down what that actually does, including the weeks where the honest finding is about my own process&lt;br&gt;
rather than the market. You can find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A pause with no review date is not a decision. It is a habit you have not noticed forming.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
      <category>writing</category>
    </item>
    <item>
      <title>My script typed 4,953 characters into an editor and produced a text I could not publish</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 02:25:24 +0000</pubDate>
      <link>https://dev.to/blueticks/my-script-typed-4953-characters-into-an-editor-and-produced-a-text-i-could-not-publish-2bm1</link>
      <guid>https://dev.to/blueticks/my-script-typed-4953-characters-into-an-editor-and-produced-a-text-i-could-not-publish-2bm1</guid>
      <description>&lt;p&gt;I automate my own publishing. A script opens a draft, types the title, types the body, and I check&lt;br&gt;
the result before anything goes out. Last night it failed three times in a row, and each failure&lt;br&gt;
looked like a success from a different angle.&lt;/p&gt;

&lt;h2&gt;
  
  
  First failure: the title landed, the body did not
&lt;/h2&gt;

&lt;p&gt;The script reported the title matched exactly, character for character. The body came back empty.&lt;/p&gt;

&lt;p&gt;My first instinct was that my reading was broken rather than my writing, which was half right. I had&lt;br&gt;
kept a reference to the body element from before typing, and a rich editor re-renders constantly, so&lt;br&gt;
the handle could have been pointing at a detached node. I re-read with a fresh query. The body was&lt;br&gt;
genuinely empty.&lt;/p&gt;

&lt;p&gt;The re-read did surface something else: there were two editable regions on the page, not one, and my&lt;br&gt;
selector took the first. That was not the cause, but it was a real ambiguity sitting in my code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eliminating the obvious cause
&lt;/h2&gt;

&lt;p&gt;The same script had worked an hour earlier on a short test sentence. Two things differed: the length&lt;br&gt;
of the text, and the delay between keystrokes.&lt;/p&gt;

&lt;p&gt;So I changed one of them. Same text, delay raised from 11 milliseconds to 20. Same failure.&lt;/p&gt;

&lt;p&gt;That eliminated cadence, and elimination is what pointed at the real cause, which I would not have&lt;br&gt;
guessed: the title. My test sentence had a 25 character title that fits on one line. The real title&lt;br&gt;
is 97 characters and wraps onto three. &lt;strong&gt;Typing the title changed the layout, and the body moved.&lt;/strong&gt;&lt;br&gt;
My click was aimed at coordinates measured before the title existed, so it landed nowhere useful.&lt;/p&gt;

&lt;p&gt;Measure the target after every action that can reflow the page. I had written that rule for other&lt;br&gt;
people's forms and not applied it to my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Second failure: the body landed, and it was wrong
&lt;/h2&gt;

&lt;p&gt;With the click fixed, the text went in. The script checked the character count: 4,836 against 4,953&lt;br&gt;
expected. I explained the difference by the markdown syntax being consumed on conversion, decided it&lt;br&gt;
was fine, and moved on.&lt;/p&gt;

&lt;p&gt;It was not fine. My source files are hard wrapped at about a hundred characters, and my typing&lt;br&gt;
routine sends every newline as an Enter key. Inside a paragraph, that creates a new paragraph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The source has 30 paragraphs. The editor held 94 blocks.&lt;/strong&gt; The character count was correct and the&lt;br&gt;
document was mangled.&lt;/p&gt;

&lt;p&gt;I found it by accident, reading the last line and seeing two words fused together where a wrap had&lt;br&gt;
been. Then I counted blocks, which is the check I should have written in the first place.&lt;/p&gt;

&lt;p&gt;A count of characters tells you almost nothing about structure. If you are pushing a document into&lt;br&gt;
an editor, compare the number of blocks to the number of paragraphs in the source, and compare the&lt;br&gt;
number of links to the number of links you expect. Those two numbers would have caught this in a&lt;br&gt;
second.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually worked
&lt;/h2&gt;

&lt;p&gt;Not typing. One synthetic paste event carrying &lt;code&gt;text/html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I converted the markdown myself: joined the wrapped lines inside each paragraph, turned &lt;code&gt;##&lt;/code&gt; into&lt;br&gt;
&lt;code&gt;h2&lt;/code&gt;, turned link syntax into anchors. Then dispatched a single paste event with that HTML on the&lt;br&gt;
editable element.&lt;/p&gt;

&lt;p&gt;Result: 30 blocks for 30 paragraphs, 6 headings, and 2 real links. The typing route had produced 94&lt;br&gt;
blocks and zero links, because markdown links are not converted as you type, and neither is a bare&lt;br&gt;
URL. That last detail matters more than it sounds: a text whose only link to my own site is inert is&lt;br&gt;
a text that fails my own publication rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern in all three
&lt;/h2&gt;

&lt;p&gt;Every failure produced a measurement that said success.&lt;/p&gt;

&lt;p&gt;The title matched exactly, and the body was empty. The character count was nearly right, and the&lt;br&gt;
structure was destroyed. The click hit the correct element, verified by identity, and the element&lt;br&gt;
was in the wrong place because the page had moved.&lt;/p&gt;

&lt;p&gt;In each case the fix was not a better tool but a better question. Not "did the text arrive" but "how&lt;br&gt;
many blocks and how many links". Not "is this the right element" but "is it still where I measured&lt;br&gt;
it".&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. The publishing automation above exists to distribute writing about&lt;br&gt;
it, and it spends a good share of its time proving that its own reports are optimistic. You can find&lt;br&gt;
it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A check that can only report success is not a check.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>webdev</category>
      <category>testing</category>
      <category>discuss</category>
    </item>
    <item>
      <title>One of my five backlinks never existed. My own notes had flagged it on day one and I overruled them</title>
      <dc:creator>Blueticks</dc:creator>
      <pubDate>Wed, 12 Aug 2026 01:25:14 +0000</pubDate>
      <link>https://dev.to/blueticks/one-of-my-five-backlinks-never-existed-my-own-notes-had-flagged-it-on-day-one-and-i-overruled-them-5efg</link>
      <guid>https://dev.to/blueticks/one-of-my-five-backlinks-never-existed-my-own-notes-had-flagged-it-on-day-one-and-i-overruled-them-5efg</guid>
      <description>&lt;p&gt;I keep a list of the directory listings that give my site a followed link, as opposed to a&lt;br&gt;
&lt;code&gt;nofollow&lt;/code&gt; one. It is a short list, and it is the number I care most about, because everything else&lt;br&gt;
about a directory listing is decoration.&lt;/p&gt;

&lt;p&gt;For six days the list had five domains on it. It has four now, and the one that left was never&lt;br&gt;
there.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it surfaced
&lt;/h2&gt;

&lt;p&gt;I rewrote the checker that produces the list. The old one asked, for every anchor on the page,&lt;br&gt;
whether my domain appeared anywhere in the link's address. If it did, and the anchor carried no&lt;br&gt;
&lt;code&gt;nofollow&lt;/code&gt;, that counted as a followed link to me.&lt;/p&gt;

&lt;p&gt;The rewritten one asks a different question: is the &lt;strong&gt;host&lt;/strong&gt; of this address my domain.&lt;/p&gt;

&lt;p&gt;Run against the same twenty seven listings, the two versions disagreed on exactly one. The old one&lt;br&gt;
said followed link. The new one said no link of any kind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not choosing between them
&lt;/h2&gt;

&lt;p&gt;The temptation is to trust the new code because it is new. That is not evidence, it is just recency.&lt;/p&gt;

&lt;p&gt;So I read the page four times: once by hand in an ordinary tab, then three times in a row through&lt;br&gt;
the checker. Never once did a followed link appear. Two of those readings hit the site's bot&lt;br&gt;
challenge, which the checker now names rather than mistaking for an absence, and the other two&lt;br&gt;
agreed: my brand is mentioned, no link is given.&lt;/p&gt;

&lt;p&gt;Four readings is not proof, but it moves the question from "which of my two programs do I believe"&lt;br&gt;
to "what is actually on that page".&lt;/p&gt;

&lt;h2&gt;
  
  
  The mechanism, which is the part worth having
&lt;/h2&gt;

&lt;p&gt;I then listed every anchor on the page whose address contains my domain as a string. There is&lt;br&gt;
exactly one, and it is a link to a third party SEO analysis tool. Its address carries the domain&lt;br&gt;
being analysed as a query parameter. The visible text of the link is the tool's name. Its &lt;code&gt;rel&lt;/code&gt;&lt;br&gt;
attribute is empty.&lt;/p&gt;

&lt;p&gt;So: my old filter saw my domain inside that address and counted it as a link to me. It then checked&lt;br&gt;
for &lt;code&gt;nofollow&lt;/code&gt;, found an empty &lt;code&gt;rel&lt;/code&gt;, and concluded that this was a followed link.&lt;/p&gt;

&lt;p&gt;Every part of that reasoning is individually defensible. The result is a backlink that does not&lt;br&gt;
exist, sitting in my notes for six days, being cited in two published articles.&lt;/p&gt;

&lt;p&gt;A query parameter that carries a domain is not a link to that domain. Testing substrings on URLs is&lt;br&gt;
a whole family of this bug, and the fix is one line: parse the address and compare the host.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I like least
&lt;/h2&gt;

&lt;p&gt;Here is what my notes recorded on the very first day the domain was added, six days ago, in my own&lt;br&gt;
words: &lt;em&gt;read as no link at 07:05 and as followed at 08:00&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The warning was there from the beginning. I kept the reading that said followed and discarded the&lt;br&gt;
one that said nothing, and I did it without noticing I was choosing, because a positive result feels&lt;br&gt;
like information and a negative one feels like a failed measurement.&lt;/p&gt;

&lt;p&gt;That is the actual error. Not the substring match, which is an ordinary bug. The error is that when&lt;br&gt;
two readings of one page disagreed, I resolved it in the direction that was better news, and then&lt;br&gt;
built on top of it.&lt;/p&gt;

&lt;p&gt;When two readings of the same page disagree, the page is rarely what changed. Re-read the&lt;br&gt;
instrument.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it cost, and what I changed
&lt;/h2&gt;

&lt;p&gt;Two published articles cite the wrong count. I am not editing them to make the error vanish, for&lt;br&gt;
the same reason I never do: the error is the part someone else might repeat.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://dev.to/blueticks/a-directory-told-me-exactly-what-my-followed-link-is-worth-ten-upvotes-82o"&gt;thing I was actually trying to measure&lt;/a&gt;&lt;br&gt;
is unchanged and still bleak: twenty seven directory listings, three followed links, and the rest&lt;br&gt;
&lt;code&gt;nofollow&lt;/code&gt; or nothing.&lt;/p&gt;

&lt;p&gt;The change I made is not to the checker. It is that the small list of links I count now gets&lt;br&gt;
re-measured every week against its expected verdict, with a deliberately broken copy of the&lt;br&gt;
expectations to prove the alarm still fires. A number that is never re-measured can be wrong for as&lt;br&gt;
long as you like, and nothing will tell you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your&lt;br&gt;
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free&lt;br&gt;
tier covers 30 emails a month. Everything above comes from doing its distribution in public,&lt;br&gt;
including the parts where the distribution turns out to be smaller than I had written down. You can&lt;br&gt;
find it at &lt;a href="https://blueticks.io/" rel="noopener noreferrer"&gt;blueticks.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If a number in your notes has never been measured twice, it is not a measurement. It is a memory.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>measurement</category>
      <category>writing</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
