Overview
The article discusses Uber's decision to rewrite its driver app, codenamed Carbon, highlighting the challenges and motivations behind this significant engineering endeavor. It emphasizes the importance of addressing technical debt, scaling product features, and aligning engineering efforts with business needs.
What You'll Learn
1
How to assess the need for a complete app rewrite versus incremental migrations
2
Why addressing technical debt is crucial for long-term product stability
3
When to involve cross-organizational teams in major engineering decisions
Prerequisites & Requirements
- Understanding of software architecture principles and technical debt
- Experience with mobile app development and architecture(optional)
Key Questions Answered
What were the main reasons for rewriting Uber's driver app?
The main reasons included addressing significant technical debt, scaling the app to accommodate new business use cases, and aligning engineering efforts with a cohesive architecture strategy. The rewrite aimed to improve app stability and user experience while enabling better feature development.
How did Uber approach the decision-making process for the app rewrite?
Uber's decision-making process involved a thorough three-month research phase with extensive documentation and cross-organizational buy-in. The team evaluated the risks of migration versus a complete rewrite, ultimately determining that a rewrite would provide a cleaner architecture and better align with their long-term product vision.
What challenges did Uber face with the previous version of the driver app?
The previous version of the driver app faced challenges related to technical debt, including ongoing outages and maintenance costs that hindered developer productivity. Additionally, the app struggled to scale with new business use cases, leading to a need for a comprehensive redesign.
What is the RIBs architecture and why was it important for the rewrite?
RIBs is a new mobile architecture introduced by Uber that provides a structured approach to building scalable applications. It was crucial for the rewrite as it allowed for a cleaner separation of business logic from presentation logic, facilitating better maintenance and feature development.
Key Statistics & Figures
Number of engineers involved in the rewrite
Hundreds
This reflects the collaborative effort required to address the complexities of the app and ensure a successful rollout.
Time taken to implement and roll out the rewrite
One and a half years
This timeframe highlights the significant investment of time and resources necessary for a major app overhaul.
Uptime requirement for the driver app
99.99 percent
This standard underscores the critical nature of the app for drivers relying on it for their livelihood.
Technologies & Tools
Architecture
Ribs
Used as the new mobile architecture for the driver app to improve scalability and maintainability.
Key Actionable Insights
1Evaluate the potential impact of technical debt on your projects before considering a rewrite.Understanding the extent of technical debt can help inform whether a rewrite is necessary or if incremental improvements can suffice. This assessment can save resources and time in the long run.
2Involve cross-functional teams early in the decision-making process for major engineering changes.Engaging diverse perspectives can lead to a more comprehensive understanding of the implications of a rewrite, ensuring that all business and technical considerations are addressed.
3Consider the long-term scalability of your app's architecture when planning new features.A well-structured architecture can accommodate future growth and changes in business requirements, reducing the need for extensive rewrites down the line.
Common Pitfalls
1
Underestimating the risks associated with incomplete migrations.
Incomplete migrations can lead to increased technical debt and instability in the application. It's crucial to fully commit to a migration strategy or opt for a complete rewrite to avoid these pitfalls.
Related Concepts
Technical Debt Management
Mobile App Architecture
Cross-functional Team Collaboration
Scalability In Software Design