Blog

A stranger took my beta app to the gym and found the bug I couldn't

Three sessions on university WiFi did what weeks of my own testing didn't

A stranger took my beta app to the gym and found the bug I couldn't

Until last week I believed the only people using Hey Spotter were me and my family. It's a workout app you talk to. You say "3 sets of 10 at 60 on chest press" and an AI coach logs it, remembers your history, and tells you what you did last time when you sit down at a machine. It's early. TestFlight, rough edges, small free tier.

Then, while I was on vacation, an email arrived from someone I've never met. A retired engineer had found the public beta link, taken the app to his university gym for three sessions, and written up a report better than most bug tickets I've seen from professional QA. What worked, what didn't, and the one that mattered: the app recorded his history for two exercises and then quietly stopped. He even suspected the cause himself, since the campus gym WiFi had been dropping his connection mid workout.

He asked a fair question. Was his lost history still on the phone somewhere?

I read it on my phone and wrote back that he'd get real answers when I was home.

Where the sets went

Honest answer: no, and the reason is worse than a sync bug.

Spotter keeps every workout on the phone. There is no cloud account holding your sets. But turning "three sets of ten at sixty" into a structured log entry takes one network call, because the AI does the parsing. That call was the weak point. If the connection dropped at that moment, the app showed an error and moved on. Nothing retried. The set never existed.

The error message made it worse. It said "nothing was logged," which wasn't even reliably true. A connection that died in the middle of the AI's reply could land after some sets had already been written. So the app was losing data and occasionally lying about it, and my own testing never caught it because my home gym WiFi never drops.

The fix

The set you speak is now kept no matter what the network does. If a message can't reach the coach, it goes into a durable queue on the phone and the bubble gets marked "Waiting for connection. Sends automatically." It re-sends on its own when the connection comes back, when you reopen the app, or right before your next message, in the order you spoke.

Spotter chat in airplane mode with a queued set marked Waiting for connection

The tricky part wasn't the queue. It was making sure a retry can never log the same set twice. Only messages that failed before anything was written get queued, and a queued message is delivered to the coach exactly once. If the connection dies partway through a reply instead, the app now says so plainly and points you at History to see what made it in, instead of claiming nothing did.

Photos survive too. A machine placard shot attached to a queued message is kept at full quality and arrives with it. And there's a banner when you're offline reminding you that manual logging in History needs no connection at all.

Two queued sets stacked up with the offline banner showing

The airplane mode test

Airplane mode on. Log a treadmill session, then two strength sets. Watch them stack up in the queue. Airplane mode off, and both delivered in order and got logged.

One detail from the test I didn't plan. I made up numbers to have something to log, and claimed 100 lbs on chest press when my history showed 55. The coach didn't just accept it. It asked whether I was coming back from something or wanted to dial it back, then told me to rest before adding more weight. I built that behavior, and it still caught me off guard to be questioned by my own app.

The coach catching up after reconnecting and questioning the weight jump

Shipped in a night

The report came in on a Thursday night mid vacation. The fix merged Monday night and went out the same day as build 17, with a changelog started so testers can see what changed in every build from here on. The tester who found it gets the credit in the release notes.

This is the part of building in public that actually works. I could not have found this bug, because I don't train on captive portal WiFi at a university rec center. Someone who does found it in three sessions and wrote it up clearly enough to fix in a day. If you're building something and holding the beta back until it's polished, you're holding back the people who will find what you can't.

One year ago today

Writing this, I checked something. A year ago today, to the day, I published a post about an idea that hit me on a hiking trail in Cambria, California, 2,500 miles from my laptop. That idea became VoiceCommit. Last December I wrote about why hotels and travel keep unlocking my best ideas. And now the most useful beta report I've ever gotten reached me on vacation.

A full year of this pattern probably deserves its own post. Later.

Spotter is in beta on TestFlight. heyspotter.app if you're curious.

šŸ’Œ Want more insights like this?

Subscribe to my newsletter for weekly deep dives into frontend development, AI, and productivity

I wrote this post inside BlackOps, my content operating system for thinking, drafting, and refining ideas — with AI assistance.

If you want the behind-the-scenes updates and weekly insights, subscribe to the newsletter.

Related Posts