DB Dian Bilhokista

I read silence as bad copy. The emails never arrived.

19 September 2026

For twenty-eight days I ran a cold outreach campaign for a service I am good at: finding the places where a small business site quietly loses money. Broken analytics tags, a homepage that takes nine seconds on a phone, a checkout that half-works on mobile. I have fixed this for paying clients. I know the problem is real.

The campaign got nothing. Not a rejection, not a “no thanks” — nothing.

So I did what everyone does. I decided the writing was the problem, and I rewrote it. Better subject lines. A sharper opening. A specific observation about the recipient’s site instead of a generic compliment.

That was the wrong conclusion, and the data to prove it was sitting in my own database the whole time.

What the database actually said

Every send is logged. Here is the campaign, 11 August to 8 September 2026:

Delivery attempts that hard-bounced26.7%
Bounce rate at which mailbox providers start treating you as spam~2%
Targets whose domain my lead generator invented3%
Targets that were personal Gmail, not businesses21%
Replies0%

One caveat I have to make against myself, because the whole point of this piece is not making claims I cannot support: for the last week of the campaign my reply detection was broken. The mail token had been revoked and nothing was watching the inbox. So “zero replies” is really “zero replies ever recorded, with the last seven days unmonitored”. It does not change what follows.

More than one delivery attempt in four hard-bounced: 26.7%. The threshold at which mailbox providers start treating you as a spammer is around 2%. By the second week I was not landing in inboxes at all. The later emails — the good ones, the rewritten ones — were the least likely to arrive.

Then I looked at who I had been emailing. Three percent of the addresses were at example.com. That is the domain reserved by RFC 2606 for documentation. It cannot receive mail. It has no owner. My lead generator had invented it, along with a handful of addresses that literally began with recipient@, and a run of plausible-looking company domains that bounced on every single attempt.

One in five of my targets (21%) were personal Gmail addresses, which is to say they were not businesses with sites to audit at all.

So the sequence was: a fabricated list, sent to addresses that mostly could not receive it, from a sender whose reputation was burnt by week two, producing a silence I read as a verdict on my writing.

The copy was never tested. It never had the chance to be.

What a checker would have said, before any of it

I build a tool called flawline. It keeps your strategy as a list of claims in git, each one recording what holds it up, and it fails when a claim is stated more strongly than its evidence allows.

I wrote the campaign’s real thesis into it afterwards — the things I was actually acting on, with the confidence I actually held them at:

- id: leaks-exist
  statement: Small business sites lose money to broken tags and slow pages.
  confidence: validated        # years of fixing exactly this, for money

- id: stranger-will-pay
  statement: An owner will pay a stranger who emails them out of nowhere.
  confidence: assumed

- id: email-reaches-them
  statement: Cold email reaches these owners.
  confidence: assumed

- id: copy-is-the-problem
  statement: We got no replies because the writing was not good enough.
  confidence: indicated        # every delivered email, zero replies
  depends_on: [email-reaches-them]

flawline check:

strategy/problem.md: error: [method-ceiling] leaks-exist
    Marked "validated" on self-report evidence, on a stage whose claims are
    about other people. Your own history is a source about you, and the
    advantage stage is where it counts. Here it stops at "assumed", because
    you have not asked the people this claim describes.

strategy/problem.md: error: [overreach] copy-is-the-problem
    Claims "indicated" while resting on "email-reaches-them", which is only
    "assumed". A claim cannot be stronger than what holds it up.

4 error(s), 0 warning(s).

And flawline report, asked what the riskiest thing I believed was:

  email-reaches-them  (problem)
  Cold email reaches these owners.
  Nothing supports it, and 1 claim rests on it.

That is the whole story, found without access to the database, the bounce log, or the lead generator’s source. Not because the tool is clever. Because “the copy failed” is a conclusion that stands on “the email arrived”, and I had never established that the email arrived.

The first finding is the one that stings more. My strongest claim — that these leaks are real and cost money — I had marked validated, on the grounds that I have fixed them for years. flawline does not accept that at the problem stage. My experience is evidence about me. It says nothing about whether the specific strangers I was emailing have this problem, or know they have it, or would pay to have it named. I had never asked a single one of them.

What this is and is not

This is one campaign. Retrospective. Run by the person who built the tool, on his own data, which is the least impressive evidence there is — it is self-report, and by its own rules flawline would cap it at assumed.

It does not show that flawline makes campaigns work. Nothing here was prevented; the money and the twenty-eight days are gone.

What it shows is narrower and, I think, more useful: the failure was not hiding in the data. It was hiding in an unexamined dependency between two sentences I believed. A tool that does nothing but refuse to let a conclusion outrank its support would have caught it on day one, before the first send, in the time it takes to write five claims down.

The reason I built the thing is that I have made this mistake more than once, and I have never once caught it by thinking harder.


npx flawline init · github.com/bilhokista/flawline