Engineering the Architecture Behind Uber’s New Rider App

Vivian Tran, Yixin Zhu
17 min readadvanced
--
View Original

Overview

The article discusses the architectural overhaul of Uber's rider app, focusing on the introduction of a new architecture pattern called Riblets. This redesign aims to improve reliability, facilitate experimentation, and support the app's growth across both iOS and Android platforms.

What You'll Learn

1

How to implement the Riblets architecture in mobile applications

2

Why separating core and optional code enhances app reliability

3

When to apply business logic versus view logic in app design

Prerequisites & Requirements

  • Understanding of MVC and VIPER architectural patterns
  • Familiarity with mobile app development principles(optional)

Key Questions Answered

What motivated Uber to redesign its rider app architecture?
Uber's motivation to redesign the rider app architecture stemmed from the need to improve reliability and accommodate new features without the constraints of their legacy codebase. The previous architecture had accumulated technical debt, making it difficult to implement changes and maintain high-quality user experiences.
How does the Riblets architecture improve app reliability?
The Riblets architecture enhances app reliability by separating core functionalities from optional features, allowing for stringent review processes for critical code. This structure enables easier testing and rollback of features, ensuring that core functionalities remain stable even when optional features are being tested or modified.
What are the key components of Riblets in Uber's architecture?
Riblets consist of several components including Routers, Interactors, Builders, and Presenters. Each component has a specific role, such as managing business logic, handling data flow, and updating the user interface, which collectively contribute to a modular and maintainable architecture.
How does communication between Riblets work?
Communication between Riblets occurs through defined interfaces, allowing Interactors to notify other Riblets of events or state changes. This structured communication ensures that data flows correctly through the application without tightly coupling the components, thus maintaining modularity.

Key Statistics & Figures

Core rider experience availability
99.99%
This availability target means Uber aims to have just one cumulative hour of downtime a year, ensuring a reliable experience for users.

Technologies & Tools

Architecture
Riblets
Used to structure the new mobile application into modular components.

Key Actionable Insights

1
Implementing the Riblets architecture can significantly enhance the modularity of your mobile applications.
By breaking down functionalities into smaller, independently testable units, developers can improve code maintainability and facilitate easier updates and feature additions.
2
Establishing clear separation between core and optional code can help in managing technical debt effectively.
This separation allows teams to focus on refining core functionalities while experimenting with new features without risking the stability of the main application.
3
Utilizing a platform-agnostic architecture can streamline collaboration between iOS and Android development teams.
When both teams follow the same architectural patterns, they can share insights and solutions more effectively, reducing redundancy and improving overall development efficiency.

Common Pitfalls

1
Relying too heavily on a single architectural pattern can lead to scalability issues.
As seen with the MVC pattern, it became unmanageable as the app grew, leading to complex and fragile code. Transitioning to a more modular approach like Riblets helps avoid these pitfalls.

Related Concepts

Mvc Architecture
Viper Architecture
Modular Programming
Mobile App Development Best Practices