Essays / ShoUp
My user count moved three times in a week. The database was fine.
A few weeks back my production database told me a horror story. Seventy-nine percent of my coach accounts were closed. The product is young, an AI agent that phones a coach’s clients and runs their accountability check-ins, and there it was in the rows: nearly everyone who had ever signed up had walked.
I believed it instantly. That’s the thing about bad news. It arrives pre-verified. Nobody audits a figure that confirms their fear.
Then it got worse in a useful way. I went looking for who owned churn and found that nobody did. It sat in no KPI, on no dashboard, in nobody’s job. A retention crisis with no owner is its own small confession. But before handing it to someone, we did the unglamorous thing. We read the accounts.
Second count: the “churned” coaches were test accounts. Mine. Created in development batches over months and never flagged as tests. They had never paid, never added a client, never been people. They could not churn, because they had never been alive. The 79 percent evaporated. What remained was a handful of real coaches.
Then I corrected the recount myself, because part of that handful was also mine. Final answer: four real coaches. All four are people I know, helping me test the product. Lifetime revenue: one card transaction, twenty dollars. That’s the honest baseline. Pre-revenue. Four users. All insiders.
So the count moved three times in one week. Disaster, then a handful, then four. Same database every time. And the database was fine. It never changed and never lied. Every row said exactly what it had always said. What changed was the question. Each count quietly used its own definition of “user”. Nothing in the schema marked a test account, so every session rebuilt the population from scratch and landed somewhere new.
A number without a written definition is an opinion with a decimal point.
Two rules came out of that week. I’d hand them to any founder with a dashboard.
Measure before you conclude. The 79 percent was real arithmetic on real rows, and still wrong, because the rows meant something different from what I assumed. I came close to building a retention plan for customers who never existed. That plan would have eaten a month and fixed nothing. One afternoon of reading actual accounts beat it. When a number surprises you, find out what it is actually counting before you act on it. The checking feels slow. It is the fastest thing you will do all month.
Give every number one canonical query. The fix was almost insultingly boring. A test flag on the account, set once, by a human who knows which accounts are which. Then one count query, and every report, dashboard and weekly review reads that query. Not a version of it. That one. Now when two reports disagree, one of them is broken and we can prove which. Before, both were “right” under their own private definitions, which made both useless.
This is how it happens everywhere, by the way. Nobody decides to keep five versions of a number. Dashboards multiply. Each one gets written on a different day, by a different person, holding a slightly different idea of what counts. Each query is defensible on its own. Together they guarantee that two people in the same meeting are describing two different companies. The cure is fewer queries, not better dashboards. GitLab runs this idea at company scale. Every KPI in their public handbook sits beside a written definition. You don’t need their size to steal it. You need one flag and one line of SQL.
Here’s the reframe I didn’t expect. Four is a better number than the big one I’d been carrying. The old count flattered me and taught me nothing, because most of it was furniture. The new count is small and completely true, and I can act on it. I could ring every user I have before lunch, ask what’s broken, and all four would pick up. No vanity metric returns your calls.
Twenty dollars and four users is not the paragraph a founder dreams of publishing. The alternative was a bigger number I couldn’t trust, resting on rows I had never read. Growth measured from a false floor is noise with a trend line under it.
My dashboard says four today. Tomorrow it will say four, unless something true happens. When it moves, it will mean a real person did a real thing, and I’ll know for certain, because exactly one query is allowed to answer the question now. The count is small. I can stand on it.