Writing
Notes & essays
Things I've learned building real-time systems — voice AI, telephony, small language models, and the occasional war story.
-
A prompt is an interface, not an essay
What I learned cutting a small model's prompt nearly in half while making it more accurate — by treating the prompt like an API instead of a wish.
-
The faster model was the wrong call
A denoiser that was 2.5× faster looked like an easy win — until I measured the thing that actually mattered. A short note on benchmarking what you care about.
-
The bug wasn't in your code, it was in the scheduler
A mid-call audio dropout that had nothing to do with audio — and what it taught me about debugging real-time systems on shared infrastructure.
-
The deploy that quietly dropped database queries
A rolling deploy was killing in-flight queries during the drain window. The fix was one line of YAML — but only once I understood how the pieces shut down.
-
We replaced a cloud queue with Redis, and mostly gained
Swapping a managed cloud message queue for a self-hosted one inside the cluster cut latency and cost — but it handed us back a few things the cloud was quietly doing for us.
-
A self-extending type registry in Go
Call records come in a dozen flavours, each with different fields and lifecycle. A registry pattern keeps the decoder open to new types — and turns the one ugly exception into a documented invariant instead of a special case.
-
An order of magnitude more calls per machine
A real-time voice pipeline written in Python hits a ceiling at moderate concurrency. Rewriting it in Go bought roughly 10× the throughput per machine — but the real work was the benchmark that told the truth.