John WilsonSessionwire

Call rebuild

If your connection drops in a Sessionwire call, you're put back in. I rebuilt how calls work in seven releases in July 2026. In 8,143 calls from 14 July to 5 October 2026, nobody was left waiting alone for 5 minutes or more.

I've led development at Sessionwire since 2017.

before

The server kept no record of a call. It only knew whether each connection was in one. If someone dropped while joining, nothing could rebuild the call or tell the other person. They sat there alone. Once it lasted 14 hours.

what changed

Rejoin
Automatic. If your connection drops, the app puts you back in, with up to 5 tries in 45 seconds. Before, you had to ask to join again, and that could fail three times at 30 seconds each.
Left alone
Nobody, in 8,143 calls from 14 July to 5 October 2026. Every stretch of 5 minutes or more with one person in a call was a host broadcasting to an audience. Between 13 and 30 April, 202 calls left someone alone that long.
Largest call
216 people joined, 169 of them at once, on 15 July 2026. That was the day after the new system went live.

the decision

I rebuilt it as small releases, so one bad step could be turned off or rolled back without touching the rest.

Every call failure in production so far had the same cause: two parts of the app disagreed about whether someone was still in the call. So now each question has one owner. Before someone's audio and video connect, a deadline decides whether they made it. After that, only Daily, our call provider, knows whether they are still there. The server keeps the record.

That meant deleting code, not adding it. I removed the timers in the browser that could end a live call. I ruled out Daily's event messages as the record, because they can arrive out of order or more than once.

The detail: each call and each person in it is a record in MongoDB, and the call link holds only the call's ID.

the releases

3.50.0
The server keeps a record of every call and everyone in it.
3.50.1
Before leaving a call, the app asks the server whether the call really ended.
3.50.2
A short drop in the connection to the server no longer removes someone who is still in the call.
3.51.0
Mostly logging. Every time the app leaves a call, it records why. It also no longer leaves a call when the server's answer is unclear.
3.52.0
The browser timers that could end a live call are gone. One check per call, on the server, decides who has left.
3.55.0
A dropped connection rejoins on its own.
3.56.0
Alerts when a call looks unhealthy, and one path for ending a call.

All seven went out in July 2026, and each one took these steps. The missing numbers, 3.53 and 3.54, were search releases that week.

  1. plan34 docs over five months, changed whenever the work did
  2. buildClaude, in small changes
  3. reviewCodex and Grok
  4. readme, line by line where it matters
  5. test966 unit tests by 21 July, plus browser tests
  6. releasewith a switch or a rollback ready

what went wrong

The first release dropped people from live calls on its first morning. When someone's connection to the server blinked, a 45-second timer started. If the reconnect lost the race, the timer removed them, even though their audio and video were fine.

The first fix, in the browser, could not help, because the server was the one removing people. 3.50.2 fixed the server that night, without a rollback.

Then two people on wired connections left the same call at the same moment, and nothing showed why. So 3.51.0 was mostly logging. Since then, every exit records its reason.

A test run caught two problems before release. The rejoin test looked for an address the app no longer used, so it could never pass. Once I fixed it, it showed that rejoining put the other person on screen twice. Five rounds of review had missed both.

limits

Most of the fall in calls that left someone alone came from fixes to joining in April, before the rebuild. By the first two weeks of July there were 2 such calls. July made the fix part of the design. In late July, about 3% of answered calls still ended with one side never connecting, and later releases worked on those. The cause of the two exits at the same moment was never confirmed. The check behind “nobody left waiting alone” is a query I run by hand, not an alert.

more

Sessionwire
The product, year by year.
Triage
How Triage finds why something broke, and how I tested it.
Search
How Search finds people and music from a description.
Remote control
How Remote control lets you run someone else's computer in a Sessionwire call.