Visit the post for more.
Overview
The article discusses Facebook's evolution in software delivery practices, highlighting their shift from a traditional branch/cherry-pick model to a quasi-continuous delivery system. This transition allowed for faster, more efficient code deployment while maintaining quality and minimizing disruptions.
What You'll Learn
1
How to implement a quasi-continuous delivery system for web applications
2
Why automated testing is critical for rapid deployment
3
How to utilize tools like Gatekeeper for feature rollout management
Prerequisites & Requirements
- Understanding of continuous integration and deployment concepts
- Familiarity with automated testing tools and frameworks(optional)
Key Questions Answered
How did Facebook scale its code delivery process?
Facebook scaled its code delivery process by transitioning from a traditional branch/cherry-pick model to a quasi-continuous delivery system. This allowed them to push changes directly from the master branch, increasing the frequency of deployments and reducing the manual effort required for releases.
What are the advantages of Facebook's quasi-continuous delivery system?
The quasi-continuous delivery system eliminates the need for hotfixes, supports a global engineering team, and improves user experience by allowing faster feedback on code changes. It also drives the development of better tools and processes necessary for scaling.
What tools does Facebook use for mobile development?
Facebook has developed and open-sourced various tools for mobile development, including Nuclide, Buck, Phabricator, React Native, and Infer. These tools facilitate rapid mobile development and ensure quality code is ready for deployment.
How does Facebook ensure code quality during rapid deployments?
Facebook ensures code quality during rapid deployments by employing a robust continuous integration stack that includes builds, static analysis with Infer, and extensive automated testing. This process helps catch issues early and maintains high code quality despite increased deployment frequency.
Key Statistics & Figures
Cherry-picks per day
500 to 700
During the traditional branch/cherry-pick model phase, Facebook processed this many cherry-picks daily.
Diffs ingested daily
more than 1,000
By 2016, Facebook was ingesting over 1,000 diffs daily into the master branch.
Diffs in weekly push
up to 10,000
The weekly push sometimes included as many as 10,000 diffs, indicating the scale of changes being managed.
Builds per day on Android
50,000 to 60,000
Facebook runs this many builds daily for Android to ensure quality across multiple products.
Technologies & Tools
Some links below are affiliate links. We may earn a commission if you make a purchase.
Development Tool
Nuclide
Used for rapid mobile development.
Build System
Buck
Facilitates efficient builds for mobile applications.
Code Review Tool
Phabricator
Supports code review and project management.
Framework
React Native
Used for building mobile applications.
Static Analysis Tool
Infer
Helps catch code quality issues during development.
Key Actionable Insights
1Implement a quasi-continuous delivery system to enhance deployment frequency and efficiency.This approach allows teams to push changes more frequently, reducing the time between code completion and user feedback, which is crucial for agile development.
2Utilize automated testing tools to maintain code quality during rapid deployments.Automated testing can catch regressions and issues early, ensuring that even with increased deployment frequency, the user experience remains stable.
3Adopt a feature rollout management system like Gatekeeper to minimize risks associated with new releases.This system allows for independent deployment of code and features, enabling quick rollbacks if issues arise without reverting entire releases.
Common Pitfalls
1
Relying too heavily on manual processes for code deployment can lead to bottlenecks.
As teams grow, manual processes become unsustainable, leading to delays and increased risk of errors. Automating deployment processes can alleviate these issues.
2
Failing to implement adequate testing can result in regressions during rapid deployments.
Without robust automated testing, the likelihood of introducing bugs increases, particularly when deploying frequently. Establishing a strong testing framework is essential.
Related Concepts
Continuous Integration
Continuous Delivery
Devops
Agile Development