The product: a ride exchange
- Explain why a ride-hailing product is best modeled as a two-sided real-time exchange.
- Enumerate the functional requirements we will implement, and the external systems we will buy rather than build.
Uber is an exchange: riders submit bids for transportation (demand orders), drivers stream availability (supply orders), and a matching engine continuously clears the market under latency constraints, with price (surge) as the balancing mechanism. Framing it as an exchange is more than a metaphor — it dictates the architecture. Like a financial exchange, the core loop (order in → match → execution) must be extremely fast and extremely available, while everything around it (settlement, reporting, analytics) can be slower and more forgiving. That asymmetry is the seed of Parts 2 and 3.
The system in context
flowchart LR
R["📱 Rider app"] --> X
D["🚗 Driver app"] --> X
OPS["🖥️ City ops and support staff"] --> X
subgraph X ["RideX — the ride exchange"]
CORE["Exchange core: presence, matching, trips, pricing"]
SUPPORTING["Supporting: identity, payments, comms, ratings"]
PLATFORM["Platform: infra, observability, data and BI"]
end
X --> MAPS["🗺️ Map and routing provider"]
X --> PSP["💳 Payment service provider"]
X --> KYCV["🪪 Identity and background-check vendor"]
X --> TEL["📞 Telephony, SMS and push vendors"]
X --> REG["🏛️ Regulators and tax authorities"]
Functional requirements
We will cover a deliberately broad slice of the real product. Grouped by who they serve:
| Group | Requirements | Built in |
|---|---|---|
| Identity | Rider signup/login; driver onboarding with document + background checks; profiles; devices | 1.2 |
| Supply | Driver goes online/offline; continuous location ingestion; nearby-driver queries; rider sees cars moving on the map | 1.4 |
| Demand | Fare quote with ETA before requesting; ride request; scheduled rides; ride tiers (economy / XL / premium) | 1.3, 1.5 |
| Matching | Dispatch: candidate selection, ranked offers to drivers, accept/decline/timeout, re-dispatch | 1.6 |
| Trips | Full lifecycle: assigned → arriving → in progress → completed / cancelled; live tracking; route recording; cancellation fees | 1.7 |
| Money | Card auth and capture; wallets and promo credits; tips; a double-entry ledger; weekly driver payouts; receipts and invoices | 1.8 |
| Comms | Push/SMS notifications; rider–driver in-app chat; phone-number-masked calls | 1.9 |
| Trust | Two-way ratings; trip history; support tickets; safety features (share trip, SOS); fraud detection | 1.10, 2.11 |
| Business | City-ops dashboards; driver earnings statements; financial and regulatory reporting; experimentation and BI | 1.13, 2.10 |
Pooled rides (UberPool-style shared trips), food delivery, and multi-modal transport reuse this exact architecture with a more complex matcher; we name where they would plug in but do not design them. This keeps the matching lessons at one level of complexity.