Build better software to build software better
Nov 6, 2025

Summary
This post details the engineering work required to make Quip and Slack Canvas backend builds idempotent, hermetic, and granular, enabling effective caching and parallelization with Bazel. It explains how to apply principles of caching and parallelization, similar to application code optimization, to build systems. The post highlights the challenges of deeply intertwined backend and build code, large build execution units, and cycles in the dependency graph that previously prevented Bazel from delivering speed boosts. It also discusses the importance of defining inputs and outputs for build targets and the benefits of Bazel's automatic caching and distribution capabilities when these principles are applied.