Lyft’s real-time pricing engine spent years calculating driver matches using a travel-time lookup table frozen in 2019—leading to bugs where the map surfaced pickup demand over open water in the San Francisco Bay. 👇
The legacy dataset systematically underestimated travel times, tricking pricing models into believing drivers were closer than they actually were. It also dropped valid neighborhood pairs entirely, making real drivers vanish from matching algorithms as if they couldn't reach the rider. Because the source data was flawed, every downstream engineering team had to maintain custom allowlists and denylists to patch up invalid locations in parallel.
Lyft overhauled the offline pipeline that generates these Neighborhood Reachability Signals, grounding the lookup matrix in actual road network data and giving downstream teams built-in filtering attributes.
The new Airflow pipeline starts by constructing a strictly drivable universe of geohash-6 cells (each roughly a few city blocks). Lyft pulls directional road-segment map data and interpolates points along bridges, region boundaries, and long roads. This set of drivable geohashes serves as a hard denylist that instantly purges water and non-navigable terrain.
Next, the pipeline forms origin-destination pairs using a relaxed pruning strategy. Established regions retain any geohash with at least one rider session in the past year. Newer markets skip session-based pruning entirely to avoid penalizing growing areas.
To calculate travel times across these pairs, the system uses a tiered approach. Heavy-traffic corridors calculate ETAs from historical trip data. Rarely traveled routes fall back to a traffic-aware simulation system, while routes with partial history use a weighted blend of the two.
Finally, the pipeline emits the travel-time matrix along with rich metadata, such as rider-session density within an eight-minute radius. Consumer engines like Dynamic Pricing use this metadata to filter what they read in real time, eliminating the need for hand-maintained patches.
When Pricing ran a two-week split test with the refreshed dataset, the structure of reachable supply shifted dramatically. Driver pairs previously mislabeled as under 5 minutes away migrated into realistic 5–15 minute buckets, while previously missing medium-range options filled in. Pricing fully adopted the new pipeline, moving Lyft to an automated six-month refresh cycle and paving the way for nine time-aware ETA matrices per region.
NayaRead shows a summary and links to the original article. The full article is hosted on eng.lyft.com.