HaloApp: A Phone Call Is a Distributed System
WebRTC feels easy in a demo and falls apart on real mobile networks. Building a mobile-first business communications workspace taught us that a phone call is just a distributed system with feelings — here is what actually breaks.
Every WebRTC tutorial ends with a call between two laptops on the same Wi-Fi. Every production VoIP app begins with a call from a phone on Turkish mobile data to a desk phone in an office, routed through a NAT that hates you. HaloApp, a mobile-first business communications workspace for VoIP, SMS, WhatsApp, and team extensions, is a long list of lessons about that gap.
The call state machine is the real product
A call is not a checkbox — it is a state machine: registering, ringing, connected, held, reconnecting, ended-gracefully, ended-badly. Each transition has a failure mode, and each failure mode needs its own UI and its own recovery path. The feature users call reliability is really the completeness of this state machine. We spent more time on reconnect-after-network-loss than on the first successful call, by an order of magnitude.
NAT traversal is a people problem
ICE, STUN, TURN — the theory is tidy. In practice, some corporate firewalls eat STUN bindings for breakfast, and the only honest answer is a well-placed TURN relay with enough bandwidth. The engineering decision that mattered most was not clever code; it was accepting early that we would run our own relay infrastructure and budget for it.
One number, many channels
Business communication is no longer only voice. HaloApp puts VoIP, SMS, and WhatsApp business messaging behind a single identity, so a customer conversation can start as a call and continue as a message without losing context. The hard part is not the integrations — it is threading: keeping one conversation identity across channels that were never designed to know about each other.
The demo-to-production checklist we now use
Test on throttled mobile networks, not office Wi-Fi. Kill the app mid-call and resume. Put the phone in airplane mode for thirty seconds. If your state machine survives those three tests, you have a communications product. If not, you have a demo.
