"It was architecturally correct and completely unusable. Those are not opposites."
The Symptom
Early Firekeeper worked, and nobody wanted to use it. You'd hold the key, speak a sentence, release — and wait. Ten seconds. Sometimes forty. The competitor you were cloning turned the same sentence around in about one. A dictation tool that makes you wait is not a slow dictation tool; it's not a dictation tool at all, because the entire value proposition is that speaking is faster than typing.
The Diagnosis
The instinct is to blame the speech model. Wrong — STT was about a second. The cost was all in the cleanup lane. Every single dictation was routed to the full Pippa brain: the entire memory vault (~100KB+) loaded as a system prompt, an agent SDK subprocess spawned, and a deep reasoning pass run at high effort. All of that, to turn "um send the report" into "Send the report." Every filler word cost a full cathedral.
What the task needed: strip "um", add a period (mechanical)
What the task got: ~100KB vault system prompt
+ SDK subprocess spawn
+ high-effort reasoning pass
= 10-40s per utterance
Competitor, same task: ~0.7-1.8s
The Trap Was Reuse
Here's what makes this lesson worth a track: nothing about that design was lazy. It was reuse — the good instinct. Pippa's brain already existed, it already did text transformation beautifully, and routing cleanup through it meant one code path and Pippa's real voice on every dictation. Every step of that reasoning is defensible. The reasoning was still wrong, because it optimized for architectural elegance and ignored the one dimension the product lived or died on: latency. Reuse is a virtue right up until the thing you're reusing costs a hundred times what the task is worth.