Authors: Yijun Liu & Mrina Natarajan, Uber Engineering Team

Uber is developing a new payment platform for India that helps operations teams more seamlessly collect and distribute cash and digital wallet payments to drivers.

Uber built a cash payment system in 2015 to make our services more accessible to these markets. Enabling cash payments presents new challenges, from ensuring that riders have cash on hand to processing and collecting driver commissions.

Digital wallets are a second payment option for riders in India. Last November, currency demonetization caused digital wallet usage to skyrocket, but many providers have yet to mature and stabilize in their local markets. At the same time, identification verification technologies like two-step authentication and one-time passwords complicate the payments experience even further for riders accustomed to using cash transactions. While digital wallets are efficient and performant, there is still room for improvement from a rider experience perspective.

Peek Into Uber’s Incumbent Payment System

Conceptually, Uber’s payment system operates like a data pipeline that transforms trip payments (cash) into digital currency before being collected by a disbursement system that pays drivers either via direct deposit or digital wallet.

The payment system data pipeline starts with basic event information (like trip duration and distance) that converts into money order details, then to settlement strategies, and finally to the actual collection or disbursement by the payment service provider, completing the transaction. When cash is factored into the equation as a payment option, the pipeline becomes lot more complex, and third-party digital banking services must be incorporated in a way that does not disrupt the system’s flow.

When we first launched our cash collection system in India, we collected payments from riders and paid driver-partners through our driver payout systems. Recently, however, Uber’s global growth and new business requirements called for a revised collection pipeline for cash trip commissions.

To build this pipeline, we had to concatenate the cash collection pipeline with the driver payout pipeline and link several steps between the two. But our old payments system was unable to process cash commissions due to data inconsistencies and asynchronous actions on the systems end and the vast diversity in the cash payment scenarios across the country from the business perspective.

Building a next-gen payment system

To solve these problems and deploy a more advanced payment system, we needed to rebuild our system flow with an updated architecture and engineer greater flexibility into how we calculated rider payments.

Our architectural solution to the first problem was to reverse the calling flow with queueing. In our new architecture, a sudden traffic spike only temporarily congests the queue, but never loses any data or fails to perform important actions.

To address India’s diversity of cash collection preferences, we needed to understand the ways in which these strategies differ between regions, including desired collection amount and frequency per driver and the order in which operations teams trigger side effects.

If we directly write business logic that customizes collection conditions into the backend code, we have to develop different flows for each region, which is both time and cost ineffective.

To address these conditions, we deployed a configuration layer to represent all business logic and implement each side effect and state transition as unit modules. This segregates business logic at the very top config layer from the backend module code, thereby making both of them easy to reuse as components in a movable type system.

Uber India Engineering’s redesign of cash payment and collection systems has far-reaching effects beyond our own users; our innovation in payment technologies is at the forefront of digitizing India’s payments world. In addition to building out our payment systems, our Bangalore-based team also focuses on driver growth, rider experience, vehicle technology, and maps projects, all challenging—but rewarding—fields with huge implications for India’s massive and emerging market.

Yijun Liu is a software engineer on Uber’s Payments Efficiency team and Mrina Natarajan is a technical program manager on Uber’s Developer Experience team