I build airtxt, a voice-to-text keyboard for iPhone. Solo founder. About 600 automated tests, green for weeks.
Then I made a second account on my own phone to check something unrelated. Fresh signup, brand-new email. The app opened to a populated "Your Dictations" list — the previous account's transcripts, sitting there for a stranger to read.
Nothing had crossed the network. The server derives the owner from a verified token, so that half was fine. The bug was entirely on the device: dictation history and memos were single JSON files in a shared container, and sign-out cleared the session but left the files behind. Whoever signed in next inherited them.
What I learned wasn't "write more tests."
Every test I have runs as one user, on one fresh install. "A second person arrives on this device" is not a state my suite can construct. So a whole category of bug — anything that only shows up when a second identity touches the same storage — was structurally invisible to it. Not under-tested. Un-testable, in that shape.
Green tests are not evidence that a stranger's first five minutes work.
So I wrote a manual gate: a short list of checks a human runs on a real phone before every release, each written from a customer's point of view instead of a developer's. Sign in as A, dictate, sign out, sign in as B, look at the screen.
It earned its keep on the very next build, and caught the sequel: the fix wiped local data on account change. Safe , and it also meant that if you handed your phone to a friend so they could use their own account, your own notes were gone when you signed back in. Right on privacy, awful as a product. Invisible to tests too, because the tests assert the wipe happens.
That gate is permanent now. It runs before every release, and it keeps finding things no suite of mine ever will.
airtxt is live on the App Store, currently at 1.1.5: on-device or cloud speech recognition as a per-user toggle, 69 cloud language and regional options, a bot that joins your Zoom/Meet/Teams calls and returns a speaker-labeled transcript, and bring-your-own-keys — your Deepgram, Anthropic, or OpenAI key lives in your device Keychain, goes straight to that provider, and never touches my servers. That provider bills you directly. Free tier, Pro at $9.99/mo.
apps.apple.com/us/app/airtxt-voice-to-text-keyboard/id6785986350
What I actually want to ask this group:
What condition does your test suite structurally fail to create? Not "what bug did you ship" — what state can your tests never construct? Second user, second device, second tenant, an expired card, a timezone rollover, a customer with 10,000 rows instead of 10. I think the list is short, close to universal, and mostly unwritten.
And if you've handled multi-account-on-one-device in a mobile app without destroying data, I'd take that answer specifically.