← All updates

A Heat Map for Wait Times, and a Better Home for It

The walk-off effect and the odds of a breakdown were both one-off queries I ran by hand against the wait-time table that’s been filling up in BigQuery since June. This is the third thing to come out of that same pipeline, and the first one that actually lives in the app instead of a blog post: a map of every ride at Disneyland and California Adventure, color-coded by how long the line typically is.

Pick a day, pick an hour

Green means short, red means long, with twelve shades in between so “a little busy” and “actually bad” don’t get lumped into the same yellow dot. You can filter by weekday, weekend, or any single day of the week — Space Mountain runs a few minutes longer on Mondays and Tuesdays than the rest of the week, and I don’t have a theory for that one yet. There’s also an hourly slider with a play button that scrubs through the day automatically, so you can watch the whole map shift from green to red and back to green again as a normal day unfolds.

Ninety days, four ways

Under the hood it’s one BigQuery query that computes the median wait per ride four different ways in a single pass — weekday/weekend, each individual day, an hourly breakdown for weekday/weekend, and an hourly breakdown per individual day — over a rolling 90-day window. That last one is what makes the slider work no matter which day you’ve picked, not just the weekday/weekend average. It’s also the first Cloud Function in this codebase that’s ever run a BigQuery SELECT instead of just writing rows to one, which is probably why this took a bit longer to ship than it should have.

It was in the wrong place

This shipped on the Publish page first, which made sense on paper — that’s where the other trip analytics live — and made no sense in practice, since Publish is where you look back at a trip that’s already over. A map of when lines are usually short is a planning tool, not a recap. It lives on Preview now instead, behind a small “🌡️ Wait Times” link next to the day’s stats, right where you’re already deciding what time to schedule everything else. There’s also a line on the page itself making clear this is historical, resort-wide data, not a live forecast for your specific trip dates — wanted to head off anyone assuming it knew something about next Tuesday in particular.

What’s next

The full wishlist for this includes dot size for variance (some rides are reliably 20 minutes, some are anywhere from 10 to 60), actual land-level shading instead of just dots, and a mode that shows Lightning Lane demand instead of standby. None of that has a date on it. Halloween season just started, though, and that’s the first real stretch of “special event” data this pipeline has ever seen — curious whether it shows up in the existing day-of-week view before I build a dedicated filter for it.