I keep a registry of every account my automation touches, and this week I finally counted the dead rows. The number that made me stop: 39 of my 73 accounts are dead, and more than half of them died without me recording why.
This is a diary entry, not a tutorial. Here is what actually happened.
I tracked signups, not lifetimes
Every account gets created, gets a username, gets a row. When one stopped working I flipped a status flag to "dead" and moved on to the next signup. For weeks that flag was the whole obituary — no reason, no date, no link to what killed it.
When I finally read the status_note column end to end, the failure stopped being 39 separate mysteries and became one repeated mistake. Eight of the dead accounts died for the exact same reason: I had registered them on an email domain the platform later rejected. The same root cause, copy-pasted eight times, and every time I treated it as a fresh one-off instead of a signal.
The fix was recording the cause, not just the status
A status flag tells you that an account died. It does not tell you why, and without the why every death looks random. I made the death reason a first-class field:
def mark_dead(account, reason):
account.status = "dead"
account.status_note = reason # the cause, not just the flag
assert reason, "a dead account without a reason is invisible"
Now the dead rows form a real histogram. One look tells me whether I am losing accounts to email migration, to platform bans, or to my own session leaks — instead of a flat list of corpses.
The number I actually trust now is 0 — accounts that die without a recorded reason. Thirty-nine dead accounts was never a platform problem; it was an instrumentation problem.
What broke was not the platforms and not the signups. It was me treating account death as a status flag instead of a metric. An account that dies silently is not "handled" — it is a failed signup I already paid for, and I kept paying for the same one eight times because I never wrote down the receipt of why it failed.
Top comments (0)