06

Chapter six · Days 34–45 · Mar 28 – Apr 8, 2026

TestFlight

Twelve days in which my app stopped being mine. Twenty-eight potters did things I never predicted, on devices I didn’t own, with patience I didn’t deserve. Beta is where vibe coding meets reality.

Testers: 28 Feedback items: 142 Crashes fixed: 9 Builds shipped: 6 in 12 days

Recruiting strangers who care

The recruitment post took me longer to write than any screen in the app. I posted it to r/Pottery and two studio Facebook groups, and it worked because it asked for something specific instead of offering something free:

I’m building a firing & glaze journal for people who actually fire kilns, and I need twenty-five potters to be mean to it for two weeks. It logs recipes, schedules, and results - nothing social, nothing cloud-hungry, your data stays yours. If you’ve ever opened a kiln at 11pm and tried to remember which ramp you used for the shino, I made this for you. Requirements: an iPhone, opinions, and at least one firing a week. DM me your worst notebook page and I’ll send a TestFlight link.

r/Pottery · 28 Mar 2026 · 214 upvotes · 63 DMs · 28 testers selected

Three things did the work: a specific pain (“which ramp… shino”), a specific ask (“be mean to it”), and a delightfully weird gate (“DM your worst notebook page”) - which both filtered for real potters and gave me 63 photos of actual user data to design against. Sixty-three DMs for twenty-eight slots. Choose for device spread (old iPhones!), firing frequency, and studio vs. hobbyist mix.

142 pieces of feedback, one triage board

Feedback arrived as TestFlight notes, DMs, emails, and one spectacular voice memo recorded next to a firing kiln (you can hear the relays clicking). Everything went into a single table with four buckets, and - this is the discipline - every item got a verdict within 48 hours, including “no.” Testers who receive a reasoned “no” keep testing; testers who hear silence stop.

BucketCountRuleExample
Fix now31Crashes, data risk, lies (UI that promises what it doesn’t do)Crash when two firings share a date; “synced” shown before sync completes
Fix before launch24Friction in the core loop: log → link → reviewToo many taps to attach a glaze (4 → 2); defect tags buried in edit mode
v1.1 list58Good ideas that don’t block the promiseRecipe OCR, CSV export, glaze cost calculator
Kindly no29Against the spec’s promise or the nicheSocial feed of results (“like Instagram but glazes”) - no, kindly, forever

What beta actually taught me about vibe coding

  • Crash-free is a promptable property. Nine crashes, and eight shared a shape: force-unwrapped optionals in code paths my fixtures never hit. After the third one, I added a standing line to every build prompt: “no force unwraps, no implicitly unwrapped optionals, every failable path renders an honest empty state.” Crash count in the next three builds: one, then zero, then zero. You can literally prompt quality up.
  • Old devices are the best testers. The iPhone XR cohort (three testers) found every performance lie - a photo grid that hitched, a search that re-fetched on every keystroke. The AI’s code is written for the average of the internet’s devices; your users’ devices are specific. Test on the oldest hardware you can borrow.
  • Nobody reads onboarding; everybody reads empty states. The four-screen carousel I was proud of? Twenty-six of twenty-eight testers skipped it in under two seconds. The empty library screen - “Your first glaze is one photo away” - got mentioned lovingly in feedback five times. Where the user actually looks is where the writing should be.
You don’t know what you’ve built until a stranger uses it next to a 1,280-degree box at midnight. Everything before that is rehearsal.
Ledger note · 6 Apr 2026
Practice · steal this

The beta playbook: recruit with a specific pain + a specific ask + a delightfully weird gate; over-recruit 2× for device spread; four-bucket triage with a 48-hour verdict rule (including “kindly no”); add “no force unwraps, honest empty states” to every build prompt; and treat the oldest iPhone in the pool as your source of truth.