← Back to blog
Engineering

How we measure "live" busyness.

James Williamson · May 26, 2026

There are two ways to tell a user how busy a bar is. You can guess, or you can measure. Google's "popular times" feature guesses — it averages aggregated location-history data from the last few weeks at the same hour, smooths it, and shows you a bar chart. It looks live. It isn't. It's a historical average pretending to be a real-time signal, and at 9 PM on a Tuesday during a holiday weekend or a Padres home game or a sudden cold snap, the average is wrong.

"Wrong" sounds harsh. It is. Every time a user shows up to a place that the popular-times chart said was busy and finds it empty — or skips a place that the chart said was empty and would have been a great room — they lose a little trust in the signal. Eventually they stop checking. That's how a feature gets abandoned. We've been watching it happen with popular times for five years.

Jellyfish picks the other path. We measure.

Three live signals, fused into one number.

For every venue on our map, three independent live data streams contribute to the displayed energy level:

① Pulse reports. People physically inside the venue tap a slider rating the room from cold to hot. This is the ground-truth signal — the most accurate, the most current, the most expensive to acquire (it requires a user to actually be there and bother to tap). Pulse reports decay over time; a report from 8 minutes ago weighs much more than one from 90 minutes ago.

② Anonymized presence. Privacy-preserving geofence pings from people physically inside the venue. We don't know who. We don't show their location to anyone. We count. Five pings inside a 30-meter radius around the venue at 9:30 PM tells us something different than 50. The number alone is meaningful; the rate of change is even more so.

③ Live forecasting. A Google-grade busyness model that learns each venue's rhythms over time. What does Friday at 10 PM look like at this place? What does Wednesday at 8 typically look like? When pulse + presence are sparse — early in the lifecycle, or for a venue with light foot traffic — the forecast fills the gap. As more pulse + presence data lands, the forecast's weight decreases.

Three signals → one 5-band scale.

The three signals get fused into a single per-venue energy level on a five-band scale:

Cold
Cool
Warm
Packed
Hot

The five bands are deliberately chosen to match how people actually describe a room. Cold = "nobody's here." Cool = "few people, kind of slow." Warm = "starting to fill up." Packed = "the room is full." Hot = "over capacity, line at the door, this is the place tonight." We added the "packed" tier in late April after running a four-band version for a few weeks and realizing it conflated "the room is happily full" with "the room is at fire-code limit and overflowing onto the sidewalk." Those are two different things, and users care about the difference.

The honest answer is "we don't know."

There's a category of venue, especially during the day, where none of those three signals have produced a reliable read. No active pulse reports. No geofence presence above the noise floor. The live-forecasting model has low confidence. The standard product instinct is to display something — a default, an average, an "estimated" value, a polite shrug.

We chose not to. If none of the three signals are live for a venue, the pin shows grey on the map. Not warm, not cool, not "average." Grey. The user sees a clear visual signal that we don't know yet, and reads it correctly — "the live data isn't there right now" — rather than acting on a guess we labeled as live.

Telling a user something invented is worse than telling them nothing.

This is a small product choice with a long-term effect. Every grey pin is a chance to build trust — because when we do show a color, users know we mean it. The signal is rare-by-design. The trust compounds.

What this gives us.

A 5-band, three-signal, transparent system means that a venue's energy level on Jellyfish is more accurate than the same venue's "popular times" chart in 95% of the comparison cases we've tested. And in the 5% where we genuinely don't know, we say so. Across an entire city of 450+ curated venues, that's a fundamentally different product surface than what Google or Yelp offers — one where the data quality matters more than the data quantity.

The dataset is the moat. The 5-band map is the front-end. Both depend on the same line we won't cross: we measure, we don't guess.

Sources + further reading.