Launch was in early June. By Thursday morning of that week I woke up to an email from a paying customer. He'd bought the lifetime license. And his microphone didn't work.
That was the moment I decided my morning routine could wait.
The first emails about this issue had actually come in earlier, from free-tier users right after launch. I engage with free users too. Why not? They often give the most useful early signal anyway. But when the paying customer wrote in, there was a different kind of pressure. Someone trusted me enough to commit to a lifetime license. I needed to make that good.
When the first free-tier email came in, my honest first reaction was, oh no, this is a nightmare. That instant shock of did I just release something that wasn't ready. But I took a step back. I'd tested this thing across ten other Macs before launch. So I told myself, okay, hop back in the driver's seat and start diagnosing.
I've done this work before. I used to be a customer support agent, all of it over the phone. This time it's email, but the empathy and the acknowledging, that part is muscle memory. I could do it in my sleep. The funny thing is it feels better doing it for my own product. When I was getting paid to support someone else's thing, sure, I had some loyalty to it because I worked there. But it wasn't mine. And I think a lot of founders and engineers and designers get so far removed from the front line that they forget who they're actually building for. Sitting on the front line again was humbling. You get much faster signal on what's broken. You become the pattern detection.
What Tom did
I'll call him Tom. Tom was using the free version, so he didn't really owe me any debugging time. The first thing he did that I'm thankful for is he reached out at all instead of just bouncing, which is already more than most people do. Then I gave him some troubleshooting steps, and he actually did them. Some of those steps meant punching commands into the terminal, collecting logs, and sending the output back to me.
Here's the part that made me laugh. Tom opened up his own Claude Code to look at the logs, and his Claude pointed at a theory. So we had this back and forth where he's telling me, my Claude says it's this, and from the logs it wasn't definitive. Then my Claude agent took a look. What confirmed it was an actual bug was a second email, same issue. Then a third.
Even though Tom eventually found a workaround for his own machine, those initial logs gave me enough signal to go looking. And I found a real bug. The Direct-distribution build had shipped without a microphone entitlement. The Mac App Store version got the microphone entitlement automatically through the sandbox settings, but the Direct version disables the sandbox so it can do auto-paste, and I'd forgotten to manually add the entitlements file as a replacement. Without that entitlement, the app technically had no permission to access the microphone. Most people worked fine because macOS was lenient about checking. A few hit stricter enforcement and the app just failed silently. Tom helped me, not just himself.
The thing I was actually scared of
Watching it fail in front of the biggest one-day audience I've ever had was terrifying. But the fear was specific. I'm putting a product out there and I'm putting a price on it. I don't want to be embarrassed. I don't want to ship something pre-baked and burn goodwill by rushing to market. I've seen that happen a lot, and as a UX researcher it's a pattern I criticize constantly: teams ship features without testing and the users pay for it with a bad experience. I did not want to be that guy. I really don't like making users your guinea pigs unless they actually volunteered, with consent and compensation, not by downloading something they thought was finished.
To be fair, there were close to 200 direct downloads by that point, plus whatever came through the Mac App Store, and only three people hit this. It's rare. And they were chill about it. Nobody wants to create a bad experience for somebody else, but the people who ran into it gave me a way out.
Shipping the fix
The fix itself wasn't stressful. From the time I sat down to the time it was out the door was about an hour and twenty.
If this had happened to me back when I built websites by hand, it would have been a different night. Stuff like this did happen when I freelanced, and I'd be up at 1am on a customer's downed site, working for two hours, hunting for the right line of code, trying to calm myself down while something is actively broken. The hardest part was always just finding the file to touch. With Claude Code I find it fast, make the change, and ship. Honestly I spent more time writing emails to customers than I spent in the codebase.
And it wasn't stressful because I already knew what was wrong. The back and forth with Tom had handed me that. With the logs, I can track a bug down and squash it. Without them it's just "my mic didn't work, figure it out, it's on you."
To the people who wrote in: you gave my product a chance, and even when there was some turbulence, you reached out to help me fix it. Thank you.
This post was dictated using WhisperPad. The cadence is the way I actually talk.