Skip to main content
Mobile

Engineering Scalable, Isolated Mobile Features with Plugins at Uber

August 2, 2017 / Global
Featured image for Engineering Scalable, Isolated Mobile Features with Plugins at Uber
Figure 1: In a simplified version of the rider app’s RIB tree (above), a user transitions through common states. RIBs attach and detach from the tree as the user performs these actions.
The design of the rider app’s confirmation screen, location refinement screen, and airport door refinement screen benefit from the feature isolation afforded by RIBs.
Image
Figure 2: The hierarchy between the Refinement Steps RIB and its child RIBs incorporate a single layer of isolation.
Image
Figure 3: Enforced separation between plugin and non-plugin code ensures that the Refinement Steps RIB can no longer reference Airport Door Selection directly and is now forced to handle each child RIB according to an interface returned from the plugin point.
AndroidiOS
Image
Figure 4: Basic tooling prevents inter-plugin build target dependencies, which provides isolation benefits and compilation time improvements.
Image
Figure 5: A theoretical screen in the Uber app where features were integrated wherever was most convenient. This is not too far from what used to be our reality.
Figure 6: A RIB tree is composed of a combination of feature RIBs (beige) and glue code (blue).
Image
Figure 7: Our Location Search screen and corresponding plugin point interfaces showcase how we use plugins to create defined in-app features.
Image
Figure 8: The LoggedInScopedWorkPluginPoint enables developers to integrate plugins easily.
Figure 9: We can disable plugins to test new features, a highly useful but unglamorous functionality of this type of tooling.
Brian Attwell

Brian Attwell

Brian Attwell worked as a staff software engineer at Uber.

Posted by Brian Attwell

Category: