← Writing
July 22, 2026·3 min read

The Mic Was Never the Problem

A defective smart speaker, three hours of debugging, and the two-minute test that should've come first.

Tonight I set up a Home Assistant Voice Preview Edition — a $67 open-source smart speaker that's supposed to be a plug-and-play Alexa alternative you actually own. It wouldn't talk back. What followed was a genuinely useful lesson in how easy it is to debug the wrong layer of a stack, confidently, for a long time.

The first symptom was the obvious one: say the wake word, nothing happens. Classic voice-assistant failure, so I went where everyone goes first — speech-to-text. Swapped the STT model, tuned the beam search, restarted the add-on, restarted the device. Each fix produced a slightly different failure, which felt like progress. It wasn't. I was tuning a component that was never broken.

The actual break was one layer downstream, and it was almost comically specific: the device could play a locally-stored chime just fine, but any streamed audio — text-to-speech, a raw MP3 URL, anything fetched over the network — played nothing, on every output path, including headphones plugged directly into the audio jack. A factory reset didn't touch it. That's not a settings problem. That's a manufacturing defect in the streaming audio path, sitting one component away from a completely healthy microphone.

The test that would have found this in two minutes: play a plain audio file through the device before touching any AI-adjacent config. Bypass the wake word, bypass the model, bypass the pipeline — just ask "can this thing make noise from the internet at all." I didn't run that test until I'd already cycled through STT models, cloud vs. local pipelines, and a full device reset.

The pattern generalizes past this one device. When something in a pipeline fails, the instinct is to start debugging at the layer you understand best or find most interesting — for me, that's usually the AI/software layer, because it's the part I can iterate on fastest. But the fastest layer to iterate on isn't always the most likely place the fault actually is. The right first move is the cheapest test that cuts the problem space in half, not the fix you're most equipped to try.

Ordered a refund. The mic was fine the entire time.