All articles
Opportunity3 min read

The system I built for the first 1000 subscribers

I have four subscribers. The first thing I built on the way from four to a thousand wasn't a growth tactic — it was attribution, and a lesson in why small numbers tell you whatever you want.

I have four subscribers.

I'm writing that despite the title, because most posts called "the first 1000 subscribers" are a retrospective by someone who already got there, and the weakness of that genre is always the same: what worked and what merely happened at the same time cannot be separated afterwards. I'm still at the start. I don't have a result. I have a rig.

And the first thing I built on the way from four to a thousand wasn't a growth tactic. It was the ability to tell which channel produced which subscriber.

Why instrumentation came first

Trying tactics at four subscribers is pointless. Try something, get two signups, and you will never know whether those two came from the thing you tried or from something else you posted that week. Without attribution there is no optimisation. There is only a story.

So the counter came first. How many people saw the resource page and how many submitted the form, both in my own table. Vercel's dashboard counts unique visitors; my table's job is the ratio.

Two decisions in that counter couldn't have been changed later.

The slug is canonical, language lives in its own column. If the English page sent its own slug, the same resource would split across two rows and the conversion rate would halve. For the same reason the form submission maps its source tag back to the canonical slug: otherwise views would land in one row and signups in another.

When views are zero the rate is empty, not zero. "Nobody saw it" and "they saw it and didn't sign up" are entirely different facts. Papering over a division by zero with a zero would report a failure that never happened.

Channel splitting, and why the list is closed

The counter gained a channel column: site, DM, story, bio link, YouTube. The link in a video description carries ?k=yt; links sent through Instagram DMs carry their own tag.

The list is closed, meaning the database rejects a value it doesn't recognise. The reason is plain: an open field would collect yt one day, youtube the next, YT the day after, and show three separate channels. When the measuring instrument breaks, the measurement breaks with it.

One detail in that column could have ruined it: unless the channel is part of the row's primary key, DM traffic overwrites site traffic, because both write to the same day and the same slug. It went inside the key.

What the counter doesn't store

The table keeps nothing about the visitor. No IP, no hash, no session, no cookie, no user agent.

The cost is concrete: I can't count unique visitors. "Are these 40 views 40 people or one person visiting 40 times?" is a question I cannot answer. I accepted that, because counting uniques requires an identifier, and an identifier adds an entry to the cookie inventory and a line to the privacy notice. For a list of four, that's a bad trade. There's also no permission to delete a counter — deleting one is editing the past.

The one real event so far

A video went out and a row appeared in the list from an address that isn't one of mine. The first real subscriber.

The dashboard that day read: 4 views, 1 submission, 25 percent conversion. The number looks good and is completely useless, because at least two of those four views are mine — the automated browser I audit the site with writes to the counter too. So the real rate is somewhere between the two, and I don't know where.

There is exactly one conclusion I can draw: the system works end to end, from form to record to delivery email. The list of conclusions I cannot draw is much longer — which channel works, what the rate is, whether the video or the caption under it did the work.

Small numbers don't lie. They just tell you whatever you want. I could have read that 25 percent as a success or as a failure, and both readings rested on the same four rows.

What I don't know

I don't know whether this system gets to a thousand. Building measurement doesn't produce anything to measure. It only means you can see it when you do.

The second one is more uncomfortable. The time I spent on instrumentation could have gone into writing. I don't know whether the right move at four subscribers is to build a counter or to publish ten more articles. While writing this I am doing both, but I haven't run them separately and compared, which means I don't have an answer. I have a preference.

Build One File, Sell It Again and Again

Free resource

Build One File, Sell It Again and Again

Digital products with AI: what, why, where — and one step to take today for each of 12 concrete products.

No spam, leave whenever you like. When you sign up you can read how your email address is handled in the Data Protection Notice and the Privacy Policy.