How to Ship an App Rewrite Without Risking Your Entire Business

James Barr, Zeyu Li
14 min readintermediate
--
View Original

Overview

This article discusses Uber's approach to shipping a rewritten driver app, codenamed Carbon, without jeopardizing their business operations. It details the strategy of using a Dual Binary system to allow for a seamless rollout of the new app while maintaining the existing app for users.

What You'll Learn

1

How to implement a Dual Binary strategy for app rollouts

2

Why maintaining an existing app during a rewrite is critical for business continuity

3

When to use feature flags for controlled rollouts

Prerequisites & Requirements

  • Understanding of mobile app development and deployment strategies
  • Experience with Android development and Gradle build system(optional)

Key Questions Answered

How does Uber ensure a seamless rollout of their new driver app?
Uber employs a Dual Binary strategy, allowing both the old and new versions of the app to coexist. This enables them to gradually roll out the new app to selected users while ensuring that others can continue using the stable version, thus minimizing disruption.
What mechanisms did Uber implement for a controlled rollout of the new app?
Uber integrated several mechanisms including opt-in feature flags, client-side bucketing, and crash recovery systems. These features allow for fine-grained control over the rollout process, ensuring that any issues can be quickly addressed without affecting all users.
What lessons did Uber learn from the Dual Binary rollout approach?
Uber learned the importance of having server-driven fallback flags and the need for thorough testing of client-side bucketing. They found that this approach allowed them to quickly revert to the old app if issues arose, thus maintaining service reliability.

Technologies & Tools

Frontend
Android
Used for developing the Uber driver app and implementing the Dual Binary strategy.
Build System
Gradle
Utilized for managing the build process of the Dual Binary app.

Key Actionable Insights

1
Implement a Dual Binary strategy to mitigate risks during app rewrites.
This approach allows for gradual rollouts and provides a safety net by keeping the old app operational, ensuring users have access to a stable version while testing the new one.
2
Utilize feature flags to control the rollout of new features effectively.
Feature flags enable developers to test new functionalities with a subset of users, allowing for quick adjustments based on feedback without impacting the entire user base.
3
Conduct thorough A/B testing on new features before full deployment.
This ensures confidence in the new app's performance and functionality, reducing the risk of negative impacts on user experience.

Common Pitfalls

1
Failing to properly manage shared resources between the old and new apps can lead to unpredictable behavior.
This can occur if developers do not ensure that resource names are unique or if they neglect to merge AndroidManifest.xml declarations correctly.

Related Concepts

Mobile App Development
Feature Flagging
Gradle Build Management