By Dmitry Chornyi
From ridesharing, food delivery, and new modalities to freight, healthcare, and business travel, our technology helps create billions of moments of human connection around the world. Building a reliable, scalable, and flexible payment processing system is critical to making these moments possible.
Last year, we launched our next-generation payments platform with the goal of creating a solid foundation that can support the speed and scale of our company’s growth. To meet this need, our primary design goals were high reliability through an active-active architecture, exactly-once payment processing by the means of idempotency and strong consistency, auditability via double-entry bookkeeping, and the ability to scale our platform to new business lines, payment types, and geographies.
In September 2018, our Payments Platform Engineering team met in San Francisco to offer insight into how we approached building and scaling our payments platform, tackling engineering challenges efficiently while ensuring a seamless payment experience for the millions of people who rely on our platform daily.
Engineering Uber’s Next-Gen Payment Platform
For the keynote of our September 2018 Payments Platform meetup, engineering manager Mathieu Chauvin introduces our Payments Platform team and discusses its foundational role in the growth of our business.
The Evolution of Payments at Uber
Uber’s payments architecture is composed of two main parts: collections and disbursements. In this presentation, software engineers Nimish Sheth and Steven Karis offer a closer look at our high-level payments stack, core data models, and cash money movements. During their presentation, they explain how entities, accounts, and money movements are modeled in the system. They also discuss how we implemented double-entry bookkeeping to to balance credits and debits and built a scalable loosely-coupled system based on asynchronous stream processing of immutable orders. These capabilities and features, among others, enabled us to reduce launch time for new lines of business across new markets from months to days.
Payments Integration at Uber: A Case Study
Uber supports over ten ways to accept payments via different payment processor integrations from credit cards and Venmo to regional payment methods like Paytm in India or iDEAL in the Netherlands. During this talk, engineering manager Gergely Orosz discusses the engineering process of building and rolling out a new payment method for Uber. His presentation dives into the details of how we work with the Google Pay SDK to implement several of our core payment operations, touches on the intricacies of weaving the support for a new payment method through the complexity of Uber’s microservice architecture, and explains the various types of testing we leverage to ensure that the payments experience is seamless and easy-to-navigate.
To the Nines: Building Uber’s Payments Processing System
During this talk, software engineer Paul Sorensen discusses how we engineer our collection and disbursement instruments on the back end of our payments platform. Paul uses his presentation to offer insights into the types of challenges his team faces when integrating new payments service providers and banks onto our platform. Paul discusses some patterns they use to overcome potential hiccups in the implementation process, including storing request metadata for idempotent multiplexing and retries, efficient generation of external IDs with limited namespaces, and using deterministic batching with reliable scheduling for idempotent batch processing.
Interested in learning more? Check out the Uber Engineering YouTube Channel for a full list of tech talks, and Uber Events to sign up for other events near you. If any of the topics outlined above interests you, consider applying for a role on our team.
Subscribe to our newsletter to keep up with the latest innovations from Uber Engineering.