Code Improvement Practices at Meta
Audris Mockus, Peter C Rigby, Rui Abreu, Anatoly Akkerman, Yogesh Bhootada, Payal Bhuptani, Gurnit Ghardhora, Lan Hoang Dao, Chris Hawley, Renzhi He, Sagar Krishnamoorthy, Sergei Krauze, Jianmin Li, Anton Lunov, Dragos Martac, Francois Morin, Neil Mitchell, Venus Montes, Maher Saba, Matt Steiner, Andrea Valori, Shanchao Wang, Nachiappan Nagappan
TL;DR
The paper investigates how Meta sustains code maintainability under rapid software delivery by cataloging diverse code-improvement practices, from organic, engineer-driven efforts to formal Better Engineering (BE) programs, and by analyzing rich change histories. It introduces about 20 prioritization criteria, including software-supply-chain centrality, to guide reengineering efforts and demonstrates substantial improvements in quality and lead time through targeted interventions. The study reports that over 14% of changes are explicitly for code improvement, with BE activities and reengineering reducing outages, shortening authoring times, and reducing code complexity, while centrality may increase in reengineered areas. Overall, the findings support continuous, tool-supported code-improvement as an effective strategy for maintaining high-quality software in fast-moving organizations, while also highlighting the need for broader replication across contexts.
Abstract
The focus on rapid software delivery inevitably results in the accumulation of technical debt, which, in turn, affects quality and slows future development. Yet, companies with a long history of rapid delivery exist. Our primary aim is to discover how such companies manage to keep their codebases maintainable. Method: we investigate Meta's practices by collaborating with engineers on code quality and by analyzing rich source code change history to reveal a range of practices used for continual improvement of the codebase. In addition, we replicate several aspects of previous industry cases studies investigating the impact of code reengineering. Results: Code improvements at Meta range from completely organic grass-roots done at the initiative of individual engineers, to regularly blocked time and engagement via gamification of Better Engineering (BE) work, to major explicit initiatives aimed at reengineering the complex parts of the codebase or deleting accumulations of dead code. Over 14% of changes are explicitly devoted to code improvement and the developers are given ``badges'' to acknowledge the type of work and the amount of effort. Our investigation to prioritize which parts of the codebase to improve lead to the development of metrics to guide this decision making. Our analysis of the impact of reengineering activities revealed substantial improvements in quality and speed as well as a reduction in code complexity. Overall, such continual improvement is an effective way to develop software with rapid releases, while maintaining high quality.
