  Google has a monolithic codebase with tens of millions build targets. Each
build target specifies the information that is needed to build a software
artifact or run tests. It is common to execute a subset of build targets at
each revision and make sure that the change does not break the codebase.
Google's build service system uses Bazel to build targets. Bazel takes as input
a build that specifies the execution context, flags and build targets to run.
The outputs are the build libraries, binaries or test results. To be able to
support developer's daily activities, the build service system runs millions of
builds per day. It is a known issue that a build with many targets could run
out of the allocated memory or exceed its execution deadline. This is
problematic because it reduces the developer's productivity, e.g. code
submissions or binary releases. In this paper, we propose a technique that
predicts the memory usage and executor occupancy of a build. The technique
batches a set of targets such that the build created with those targets does
not run out of memory or exceed its deadline. This approach significantly
reduces the number of builds that run out of memory or exceed the deadlines,
hence improving developer's productivity.
