Development/Deployment Model @ Facebook

As part of a recent reorg my team on Microsoft Bing moved under the Engineering Fundamentals team to play a role in the effort to streamline the Bing engineering process. While planning for our next major release I’ve been doing a bit of research on how other companies in the online service world handle common challenges around things like branch management and integration, deployment tasks, and mitigating live site incidents. I stumbled upon this gem from the engineers who do deployment at Facebook and found a lot of the content fairly interesting… for starters the fact that 3 engineers handle deployment for the entire company. 🙂

A few other points that struck me as interesting:

1. Developers checkin to a single trunk branch
2. Code goes to prod daily, the entire branch goes weekly
3. New features are deployed to prod and then dialed up via a gatekeeper
4. Karma is tracked for developers based on history
5. Modified BitTorrent helps speed up prod deployment
6. Features have to be 100% backwards compatible

Many of these jive with the way we do development at Bing, but one big departure is the single branch model (versus the 100+ branches that our 1k+ developers check in to today). I’m slowly but surely being won over by the idea of a “trunk only” model to save the overhead involved with branch integrates and coordinating getting things from one branch to another.