100 Days of Rack: What the Numbers Actually Say
A hundred days after launch, the real ledger: 33,266 sets recorded, 322 accounts, 31 people paying, and the finding that eleven technical articles and nine Reddit posts brought in fewer visitors than ChatGPT did on its own. Plus the four things that went badly enough to write down, including why nearly half of all signups never complete a single workout and why the most expensive bug of the quarter never threw an error.
Rack went public a hundred days ago. I have kept a written retrospective every week since, which means there is a real ledger rather than the version I would prefer to remember. This is that ledger: what the product did, what the marketing did, and the four things that went badly enough to be worth writing down.
I am writing it partly because I read a lot of these posts before I started and most of them only publish the numbers that flatter the author. The useful ones published the other kind.
What a Hundred Days of Real Use Looks Like
Since launch, people have recorded 1,543 completed sessions and 33,266 sets through Rack — about 1,028 hours of lifting, from 165 lifters. Counting back to the first commit in February rather than to launch, it is 1,933 sessions and 41,864 sets across 173 people. A minority of those arrived by importing a history from another app, which is why the word above is “recorded” and not “logged on a watch”.
There are 322 registered accounts and 31 people paying. The database will tell you 35, but four of those are accounts I comped by hand, and counting comps as revenue is the sort of thing you only do once before it starts lying to you about your own business. Sixty-five people trained in the last 28 days; 26 in the last 7.
That is a small product. It is also a real one, and the shape of the usage is the part I actually care about: the median person who sticks is training two to four times a week and recording every set, which is the behaviour the whole thing was built to support.
The Channel That Worked Was the One I Never Worked On
Over those hundred days I published eleven long technical articles and nine Reddit posts. Here is every attributable source of visitors for the whole window:
- Every Reddit post I have ever written, combined: 2 people
- All eleven articles: zero. Not a small number — there is no row in the data at all.
- ChatGPT, which I have never once optimised for or thought about: 19 people
Two caveats before anyone takes that as a law of nature. First, 615 of my visitors arrive with no tag at all, so every number above is a floor rather than a total; the real figures are higher and I cannot see them. Second, a good part of that blindness is my own fault. I shipped several posts with untagged links and only fixed my measurement properly in June, so the zero next to my writing is partly a measurement failure and not purely a demand failure.
The shape survives the caveats, though. The channel I worked hardest on is the one I can least prove, and the channel I never touched is my most consistent source of actual humans. Someone asks an assistant which app logs strength training to a Garmin, and it answers. I did not build that and I do not control it.
An Untagged Channel Is Not a Slow Channel. It Is an Invisible One.
This is the lesson I would pay money to have learned on day one. For months I could not answer a very basic question — is my writing failing, or is it working and unmeasured? — and because I could not answer it, I kept making the decision by feel. Feel said write more. The data, once it existed, said something different.
The fix costs nothing and takes a minute: tag every outbound link before you publish it, never afterwards. Retrofitting is not the same thing, because the traffic you already lost does not come back to be counted. If you are choosing between shipping one more post and instrumenting the ten you already shipped, instrument.
Forty-Six Percent of Signups Never Complete a Single Workout
173 of 322 accounts have completed at least one session. That means nearly half of everyone who signed up never used the product once, and for most of the run I was treating acquisition as the constraint. It was not. Getting a second person through the door is worth very little when the first one never made it past the entryway, and the fastest growth available to me was never a new channel — it was the gap between installing and finishing one workout.
Some of that is genuinely hard: a Garmin strength app needs a watch, an install, and a pairing step before the first set gets recorded, and every one of those is a place to lose somebody. But naming it as the bottleneck took me three months longer than it should have, because I was reading the wrong number.
Shipping Ends at the Store, Not at the Merge
The worst entry in the whole ledger is a discipline problem rather than a technical one. Twice during this run I fixed a data-loss bug, verified it, merged it, and then left the build sitting unsubmitted while I went back to writing code, because submitting to the App Store is a manual chore and code is more fun. For a stretch of days, people were hitting a bug that was already solved on my laptop.
A fix that has not been submitted does not exist. It helps nobody, it is indistinguishable from not having done the work, and the fact that it feels finished is exactly what makes it dangerous. That one is now a checklist item rather than a decision I get to make when I feel like it.
The Bugs That Cost the Most Do Not Throw
The most expensive thing I found all quarter was silent. Rack writes each session into Garmin’s FIT format so it lands in Connect as a real strength activity, and when I audited the exercise codes we emit, roughly seventy-seven of them were wrong. Nothing ever errored. Garmin accepted every single file, because a receiving system validating a well-formed file has no way to know you meant a different exercise. Sessions had simply been landing under the wrong name for months.
The fix that actually holds is not “be more careful”. It is a check that asserts our output against Garmin’s own published profile rather than against our own copy of the truth, so the whole class of error cannot come back quietly. If you integrate with anything you do not own, your error rate there is invisible by default and you have to go looking for it. Related reading: why Garmin’s native strength mode stops logging mid-session, which is a different silent failure in the same family.
Two Things I Would Tell Myself on Day One
Tag every outbound link before you publish, not after. An untagged channel is invisible, not slow, and you will burn months unable to tell those apart.
Check whether the assistants already recommend you.That took me a hundred days to notice and it was free the entire time. Ours appears to be a side effect of writing specific, boring, factually correct pages about one narrow problem — which is not a growth tactic so much as a reason to keep the writing honest.
One more that did not make the list because it is not advice so much as an observation: every single week, when product work and marketing work competed for the same afternoon, product won. Every week, for a hundred days. I have twelve retrospectives that say the same sentence in slightly different words, and knowing the pattern did not break the pattern. If you are one person, the honest move is to assume you will lose that fight and build the schedule so it does not need winning.
What Rack Actually Is
For anyone arriving here cold: Rack is a strength training app for people who wear a Garmin. Your programme runs on the watch, you log each set where you lift it, and the session is written into Garmin Connect as a real strength activity so it counts toward Training Load and recovery instead of showing up as an untitled block of time. If you want the longer version of why that is harder than it sounds, the full set of lessons from building for these watches covers what is fixable in software and what is not.
Frequently Asked Questions
How many people use Rack?
As of the end of July 2026 there are 322 registered accounts, 173 of which have recorded at least one completed workout, and 31 people paying. Across the first hundred days after launch, people recorded 1,543 completed sessions and 33,266 sets, roughly 1,028 hours of lifting. Counting back to the first commit in February 2026 rather than to launch, it is 1,933 sessions and 41,864 sets across 173 lifters.
Does content marketing work for a small app?
It did not measurably work for us in the first hundred days. Eleven long technical articles produced no attributable visitors at all, and every Reddit post combined produced two people, while ChatGPT — a channel we never worked on — produced nineteen. Two important caveats: most of our traffic arrives untagged, so all of those figures are floors rather than totals, and several posts shipped with untagged links, so the zero next to our writing is partly a measurement failure rather than purely a demand failure.
Why do so many app signups never use the product?
For Rack, 173 of 322 accounts have completed at least one workout, so roughly 46% signed up and never used it once. A Garmin strength app asks for a watch, an install, and a pairing step before the first set is recorded, and each of those is somewhere to lose a person. The wider lesson is that acquisition is often not the real constraint: a second visitor is worth little while the first never finishes one session.
What is the most common kind of bug in a watch integration?
The silent kind. When we audited the exercise codes Rack writes into Garmin’s FIT format, about seventy-seven were wrong, and nothing had ever errored — Garmin accepted every file, because a well-formed file gives the receiving system no way to know you meant a different exercise. If you integrate with a system you do not own, your error rate there is invisible by default. The durable fix is a check that asserts your output against the vendor’s published profile rather than against your own copy of it.