We lost our largest client. This is what happened, what we got wrong, and what we are changing.
They were a fast-growing wholesale operator on M4. At peak they ran about 30 million calls per day. One of their originators alone burst near 2,000 CPS. M4 is built for up to about 1,000 CPS. Elasticsearch lagged. The GUI stopped responding. Reports and day-to-day admin became hard or impossible at the worst moments. That originator was only one of their clients.
They did not fail. They grew into a traffic shape our product could not sustain. We hit a hard ceiling we had not put clearly enough into the sales conversation.
What broke in production
Wholesale and call-center traffic often looks fine on concurrent calls while attempt rate climbs. Many attempts never answer, so concurrent calls stay “reasonable” while CPS and database write load climb. The platform spends energy on failed attempts that barely move the concurrent-call counter. From the outside it looks like “we still have channel headroom.” Inside the switch, the CPS wall is already there.
The operator’s own customers then see 503 and related failures. Telling those customers “our switch is full” is a bad commercial day. Live ops needs the Calls List and similar reports while the fire is burning. If the GUI is slow or stuck, you cannot prove what failed, fix a route, or calm a client who already has another vendor on speed dial.
Our support team answered tickets. That was never the main failure. The product limit was. So was the way we scoped the deal.
If you need the basics of calls per second vs concurrent calls, or why dialers get 503s while channels still look free, those posts cover it. This one is the vendor side of the same problem.
Where we went wrong
Peak CPS never came up in sales. We talked capacity mainly in concurrent calls. Nobody locked an expected peak from their largest originator. The ~2,000 CPS bursts showed up in production after traffic ramped. That is on us. We did not accept a 2,000 CPS design and hope. We under-asked, then met the number in live traffic.
After the pain started, they asked for more concurrent-call licence headroom. We spent too long explaining why more CC does not raise the CPS ceiling. A licence bump does not fix a CPS wall. We already published the operator playbook for that mistake; we still burned calendar time repeating it while their GUI was struggling.
Two numbers belong in every go-live conversation:
- Licensed concurrent calls.
- Peak CPS from the largest originator.
If number two is blank, both sides are guessing. Ask it before the first production week, not after the GUI dies at peak.
Voice traffic is not “dead” in wholesale
Some people say voice traffic is falling. We still see part of our client base hit new highs on their own accounts and keep expanding, especially in wholesale and call-center direction. Losing our largest client at the 1,000 CPS wall was a scale problem, not proof that the market is finished.
That growth is why the ceiling matters. It is also why “reduce your CPS so the switch stays stable” is a common vendor answer, and a frustrating one if your business is built on attempt-heavy traffic. We have given that kind of advice when the platform was already at the limit. We do not want that to be the end of the product story for operators who need to grow.
Scaling wholesale voice beyond 1,000 CPS
When your largest client grows that fast, they write the next product chapter whether you planned it or not. We are grateful for the pressure. It showed the limit clearly.
We can see a path to raise CPS capacity several times above today’s ~1,000 CPS ceiling, and we are working on it. We are not publishing a ship date here. We are naming the direction: M4 and our stack need to serve wholesale operators who already live near or past that wall.
For how operators contain a single hot originator on their side today, see which dialer customer burned your CPS route. That series is the playbook. This post is us applying the same honesty to ourselves.
What we will do differently in sales
State the CPS ceiling early. Ask for peak CPS from the largest originators before go-live. Do not treat a concurrent-call upgrade as a CPS cure. Prefer an honest “this traffic shape is above what we sustain today” over a licence change that leaves the GUI dark at peak.
We will also make sure both sides share the same meaning of CPS before anyone signs or goes live. Concurrent calls and calls per second sound related; they are not interchangeable. If the buying conversation stays only in concurrent calls, the CPS question never gets a real answer. Our job is to walk that difference until the client can state their peak attempt rate in CPS and match it to what the platform sustains. That is part of sales and onboarding, not a support ticket after the GUI fails.
We would rather lose a deal than pretend there is no ceiling. We would rather build past that ceiling than tell growing wholesale operators that the only path to stability is to shrink.
If you are already near the wall
If you need more than about 1,000 CPS, or you are close and stability is already the daily fight, and other vendors mainly tell you to cut CPS, contact us. Tell us your concurrent-call licence and the peak CPS from your largest originator. We will be straight about what we can carry today and what we are building toward.
Thanks to that client for the pressure test. We got sharper. We are still here for operators who need to scale wholesale voice beyond 1,000 CPS.
Need more than about 1,000 CPS?
If vendors only tell you to cut CPS for stability, contact us with your concurrent-call licence and peak CPS from your largest originator.