Geolocation & Routing carries nineteen system requirements grouped into four sets: Driver Location Tracking (4), Proximity, ETA, and Routing (6), Surge Zones (5), and Geolocation — Non-Functional (4). Every requirement is an EARS sentence scoped to the GeolocationRouting bounded context. This is the smallest and most query-heavy context in RideNow — it has almost no lifecycle state of its own, just continuous ingestion of location updates and fast-read services that other contexts (primarily Ride Management) consume. The surge subsystem is its one piece of active domain logic: detect supply-demand imbalance in a zone, publish a multiplier with its contributing factor, and retire it when supply catches up — without ever applying retroactively to a fare already committed at confirmation.
requirements "Driver Location Tracking" scoped-to GeolocationRouting {
prd-source "ride-now.prd"
REQ-GEO-001 "Driver location update" : event-driven
source "Feature: Real-time driver positioning — Story: Position updates in the background — AC: Position updates at least every 5 seconds while online"
:: "Real-time positioning is the foundation of matching and ETA"
"When an online driver's device sends a location update, the
Geolocation system shall record the position with a timestamp
and make it available for proximity queries."
priority must
REQ-GEO-002 "Minimum update frequency" : state-driven
source "Feature: Real-time driver positioning — Story: Position updates in the background — AC: Position updates at least every 5 seconds while online"
:: "Balance accuracy against battery and bandwidth"
"While the driver is online, the Geolocation system shall accept
and persist location updates at a minimum frequency of one every
5 seconds."
priority must
REQ-GEO-003 "Stale position ineligibility" : unwanted
source "Feature: Real-time driver positioning — Story: Position updates in the background — AC: Stale positions older than 60 seconds mark the driver ineligible for matching"
:: "Old positions corrupt matching — exclude them from eligibility"
"If a driver's last location update is older than 60 seconds,
then the Geolocation system shall mark the driver ineligible
for proximity queries and notify the Driver Management system."
priority must
REQ-GEO-004 "Low-accuracy position filtering" : unwanted
source "Assumption: GPS accuracy is sufficient for matching and tracking"
:: "Low-accuracy GPS fixes produce wrong ETAs and matching"
"If a location update reports horizontal accuracy worse than 100
meters, then the Geolocation system shall discard the update."
priority should
}
requirements "Proximity, ETA, and Routing" scoped-to GeolocationRouting {
prd-source "ride-now.prd"
REQ-GEO-010 "Nearby driver query" : event-driven
source "Feature: Driver matching — Story: Driver confirmed within seconds — AC: Eligible drivers are queried from Geolocation on each ride request"
:: "Matching needs to find the closest drivers fast"
"When the Ride Management system queries for nearby available
drivers with a pickup location and a search radius, the Geolocation
system shall return the list of online, match-eligible drivers
within the radius, ordered by estimated time to pickup."
priority must
REQ-GEO-011 "Pickup ETA computation" : event-driven
source "Feature: ETA and routing — Story: ETA to destination stays accurate during the ride"
:: "Riders see ETA before and during ride — core UX"
"When an ETA is requested between a driver's current location and
a pickup point, the Geolocation system shall compute the estimated
travel time using current traffic conditions and return it."
priority must
REQ-GEO-012 "Route computation" : event-driven
source "Feature: ETA and routing — summary: ETA at ride start and refreshed ETAs as conditions change"
:: "Turn-by-turn navigation for drivers and route tracking for riders"
"When a route is requested between pickup and dropoff locations,
the Geolocation system shall compute the optimal route and return
a polyline with total distance and estimated duration."
priority must
REQ-GEO-013 "Destination ETA refresh cadence" : state-driven
source "Feature: ETA and routing — Story: ETA to destination stays accurate during the ride — AC: ETA to destination is refreshed at least every 30 seconds during the ride"
:: "ETAs drift quickly in urban traffic — refresh frequently"
"While a ride is in progress, the Geolocation system shall publish
a refreshed destination ETA to the Ride Management system at
least every 30 seconds."
priority must
REQ-GEO-014 "ETA variance alert" : complex
source "Feature: ETA and routing — Story: ETA to destination stays accurate during the ride — AC: ETA variance alert is raised if the remaining ETA grows more than 5 minutes from the prior value"
:: "Sudden ETA growth signals an unexpected delay — surface it"
"While a ride is in progress, if the refreshed destination ETA
grows more than 5 minutes from the previous published value,
then the Geolocation system shall raise an ETA variance alert
to the Ride Management system."
priority should
REQ-GEO-015 "Dynamic route recalculation" : complex
source "Feature: ETA and routing — summary: refreshed ETAs as conditions change"
:: "Traffic changes — keep the driver on the best path"
"While a ride is in progress, when traffic conditions change
significantly on the current route, the Geolocation system shall
recompute the route and notify the Ride Management system."
priority should
}
requirements "Surge Zones" scoped-to GeolocationRouting {
prd-source "ride-now.prd"
REQ-GEO-020 "Surge zone activation" : event-driven
source "Feature: Surge zone transparency — summary: dynamic pricing active in a zone"
:: "Supply-demand imbalance — incentivize drivers to move to high-demand areas"
"When the ratio of ride requests to available drivers in a
geographic zone exceeds the surge threshold, the Geolocation
system shall declare the zone as surging and publish a
SurgeActivated event with the surge multiplier and contributing
factor."
priority must
REQ-GEO-021 "Surge zone deactivation" : event-driven
source "Feature: Surge zone transparency — non-goal: Apply surge silently"
:: "Surge must end when supply catches up"
"When the supply-demand ratio in a surging zone returns below
the surge threshold for at least 5 minutes, the Geolocation
system shall deactivate the surge and publish a SurgeDeactivated
event."
priority must
REQ-GEO-022 "Surge multiplier cap" : ubiquitous
source "Risk: Regulator caps or bans surge pricing in a key market — mitigation: mitigate"
:: "Regulatory and PR risk — surge must not be predatory"
"The Geolocation system shall enforce a platform-wide maximum
surge multiplier of 5.0x, and a lower cap per market where
regulation requires it."
priority must
REQ-GEO-023 "Surge visible at fare estimate" : event-driven
source "Feature: Surge zone transparency — Story: See the surge multiplier before I confirm — AC: When surge is active, the multiplier and contributing factor are shown on the fare estimate screen"
:: "Riders must see surge before they commit — PRD non-goal to apply silently"
"When a rider requests a fare estimate in a surging zone, the
Geolocation system shall include the surge multiplier and
contributing factor in the response to the Ride Management
system for display on the fare estimate screen."
priority must
REQ-GEO-024 "Surge frozen at confirmation" : ubiquitous
source "Feature: Surge zone transparency — Story: See the surge multiplier before I confirm — AC: Fare committed at confirm is not increased by later surge"
:: "Upfront fare is the commitment — later surge must not retroactively apply"
"The Geolocation system shall not apply surge adjustments to a
ride after the fare has been committed at confirmation."
priority must
}
requirements "Geolocation — Non-Functional" scoped-to GeolocationRouting {
prd-source "ride-now.prd"
REQ-GEO-NFR-001 "Nearby driver query latency" : event-driven
source "Goal: Reduce rider wait time and abandonment — metric: p50 match < 30 seconds"
:: "Matching latency budget flows into Geolocation response time"
"When a nearby-driver query is received, the Geolocation system
shall return results within 500 milliseconds at p95."
priority must
REQ-GEO-NFR-002 "ETA computation latency" : event-driven
source "Feature: Request a ride — AC: Fare estimate is displayed within 3 seconds of confirming destination"
:: "ETA is on the fare-estimate critical path"
"When an ETA is requested, the Geolocation system shall return
the result within 500 milliseconds at p95."
priority must
REQ-GEO-NFR-003 "Location update ingestion throughput" : ubiquitous
source "Feature: Real-time driver positioning"
:: "At peak, every online driver pushes a position every 5s per BC"
"The Geolocation system shall sustain ingestion of at least 10,000
location updates per second per market without degrading query
latency beyond its stated budgets."
priority must
REQ-GEO-NFR-004 "Location data retention" : ubiquitous
source "Constraint: GDPR and equivalent privacy regimes"
depends-on REQ-NFR-022
:: "Granular location history is sensitive — retain minimum necessary"
"The Geolocation system shall retain per-driver granular location
history no longer than 90 days and shall aggregate older data
into non-personal summaries for operational analysis."
priority must
}
Summary
Pattern
Count
ubiquitous
4
state-driven
2
event-driven
9
unwanted
2
complex
2
Total
19 (16 must, 3 should)
Set
Total
Must
Should
Driver Location Tracking
4
3
1
Proximity, ETA, and Routing
6
4
2
Surge Zones
5
5
0
Geolocation — Non-Functional
4
4
0
Cross-Context Dependencies
Requirement
Depends on
Nature
REQ-GEO-003 (Stale position ineligibility)
Driver Management
Geo → Driver: notify when a driver becomes ineligible (DriverPositionStale)
REQ-GEO-013 (Destination ETA refresh)
Ride Management
Geo → Ride: publish refreshed ETA at least every 30s during a ride
REQ-GEO-014 (ETA variance alert)
Ride Management
Geo → Ride: raise variance alert when remaining ETA grows >5 min
REQ-GEO-015 (Dynamic route recalculation)
Ride Management
Geo → Ride: notify on route recompute mid-ride
REQ-GEO-023 (Surge visible at fare estimate)
Ride Management
Geo → Ride: surface surge multiplier before commit
REQ-GEO-024 (Surge frozen at confirmation)
Ride Management
Geo ↔ Ride: do not apply surge after the fare is committed
Note: REQ-GEO-010 (Nearby driver query), REQ-GEO-011 (Pickup ETA), and REQ-GEO-012 (Route) are services consumed by Ride Management — the dependency flows from Ride → Geo and is documented on the Ride Management requirements side. Cross-context obligations materialize in the Domain Model page as Open Host Service (proximity queries), Published Language (surge events), and Anti-Corruption Layer (stale-position notifications crossing into Driver Management).