Taking Control of Your Engineering Tools

Traditionally software development tools, such as compilers, linkers and build engines, were designed for use by individual engineers on dedicated desktop machines. As these tools evolved, they scaled-up by exploiting more powerful development machines. The same tools were adapted for team development to run on small, project-specific clusters by dedicating a server to process a single job at a time. While this paradigm has served us well in the past, it fails to take advantage of the positive network effects of cloud-based computing. During the past year, our team constructed a cloud based build system that enables fast and efficient builds through techniques that leverage parallel, cached, incremental, distributed, and multitenant builds. Leveraging the cloud's compute elasticity and storage capacity enabled us to reduce builds latency dramatically, building today in seconds and minutes instead of hours. But migrating existing tools to the cloud is daunting. This paper summarizes our findings in the form of six principles, on how we need to evolve engineering tools, starting with those that participate in the build automation, to simplify, take control, and move these tools to the cloud.