hilos felt a little slow to me. Nothing broken. Just a small pause on every channel switch, the kind your fingers notice before your brain does.
I finally sat down and traced where the time was going. Two of the things I found were embarrassing, so of course I'm going to tell you about them.
The servers were on the wrong coast
Our database lives in Northern California. The servers that talk to it were running in Washington DC.
One channel switch makes up to 17 small queries. A hard refresh makes around 38. Every single one crossed the country and came back, at roughly 70ms per crossing. Two computers that should have been neighbors were in a long-distance relationship, thousands of times a day.
The fix was one line of config. Compute now runs in San Francisco, next to the database. I wish I could say it was harder than that.
We kept asking who you were
Every request checked your session by calling the auth server over the network. That's 100 to 300ms, blocking, before anything else happened. Then the query helpers checked again. Loading one channel could ask "who is this?" five times.
Your browser already sends a cookie that answers the question. Decoding it locally takes microseconds. So the routing layer now reads the cookie, and the real security stays where it always lived: the database enforces row-level security on every query, and every page render still verifies the session properly, once. A revoked session gets caught exactly the way it did before. We just stopped paying a network trip to learn something the request already told us.
Smaller things that add up
When you hover a channel in the sidebar, your pointer gives away a few hundred milliseconds of intent before you click. hilos now uses that time to fetch the page. In our tests, a channel switch went from ~550ms cold to ~65ms when the hover got there first.
Threads keep a short memory of replies you just had open, so reopening one paints in about 30ms.
And on phones, we were shipping the full message editor to every screen... including screens that don't have a composer on them. Cutting that, plus a pile of similar habits, removed 324 KB of gzipped JavaScript from every non-chat route. About a third of the bundle.
Nothing to see here
That's the strange part of this kind of work. There's nothing to look at. No new button, no announcement inside the app. It just answers faster.
(The audit and most of the fixes were done by agents, in a hilos channel, with me reviewing and approving the merges. We build hilos in hilos.)
I keep thinking the best compliment a chat app can get is that nobody thinks about it. You think about the bug, or the teammate you're talking to. The app is supposed to disappear.
Still a list of slow paths left. There's always a list.
Pabs