Continuous Deployment of Mobile Software at Facebook

International Symposium on The Foundations of Software Engineering 2016 (FSE 2016)

Abstract

Continuous deployment is the practice of releasing software to production as soon as it is ready. It is receiving widespread adoption in industry and has numerous perceived advantages including (i) lower risk due to smaller, more incremental changes, (ii) more rapid feedback from end users, and (iii) better ability to respond to threats such as security vulnerabilities.

The frequency of updates of mobile software has traditionally lagged the state of practice for cloud-based services. For cloud-based services, changes can be released almost immediately upon completion, whereas mobile versions can only be released periodically (e.g., in the case of iOS, every two weeks). A further complication with mobile software is that users can choose when and if to upgrade, which means that several different releases coexist in production. There are also hundreds of Android hardware variants, which increases the risk of having errors in the software being deployed.

Facebook has made significant progress in increasing the frequency of its mobile deployments. In fact, over a period of 4 years, the Android release has gone from a deployment every 8 weeks to a deployment every week. In this paper, we describe in detail the mobile deployment process at Facebook. We present our findings from an extensive analysis of software engineering metrics based on data collected over a period of 7 years. A key finding is that the frequency of deployment does not directly affect developer productivity or software quality. We argue that this finding is due to the fact that increasing the frequency of continuous deployment forces improved release and deployment automation, which in turn reduces developer workload. Additionally, the data we present shows that dogfooding and obtaining feedback from alpha and beta customers is critical to maintaining release quality.

Featured Publications