Scaling Mobile App Development Using a Decentralized Model

In order to scale mobile app development to support a growing product development organization, we are migrating to a decentralized development model, with multiple feature (vertical) teams supported by a cross-functional platform (horizontal) team.

In planning this new model we researched as much as possible the best practices learned from organizations that have adopted a similar approach to their mobile app development.

Companies we looked at included Facebook, Google, Uber, Spotify, and Soundcloud. Some of the best practices they share include:

  • Cross-functional teams have end-to-end responsibility for individual features.
  • Maintain a regular, frequent release cycle using ‘release trains’.
  • Extensive use of feature flags and feature targeting to control feature releases.
  • Improve understanding of the full delivery process through close integration between product & release teams.
  • Extensive use of employee testing or ‘dogfooding’ (e.g., Facebook ‘shake to report’ feature).
  • Automation at every step of the delivery process including automated UI and unit testing; automated bug reporting and assignment.
  • Automated risk-management features such as automatically detecting regressions and disabling the associated feature, restarting the app in a form of ‘safe mode’ following a crash.
  • Detailed performance measurement of new features during the release phase.

I found the following videos to be especially useful in learning how to make this decentralized development model successful.

Spotify Engineering Culture (1 of 2)

Spotify Engineering Culture (2 of 2)

Facebook: Shipping mobile apps smart and fast at scale

Scaling iOS @ Google

Blazing fast: Scaling iOS at Uber

6 lessons learned scaling mobile at SoundCloud

How Spotify Transitioned to a Consistent, Thin & ‘Dumb’ iOS App

Lastly, this article from Xing is a very useful read: Scaling Mobile at XING: Platform, Framework and Domain Teams.

Leave a Reply

Your email address will not be published. Required fields are marked *