Problem Statement: Monorepo Build Farm
How Problem Statement: Monorepo Build Farm (understanding) informs Build Farm architecture and interviewer depth.
Problem Statement: Monorepo Build Farm
Frame the interview: thousands of engineers, Bazel/Gradle graphs, remote cache, elastic agents. Contrast laptop builds vs farm throughput.
The scheduler is a constraint solver over a DAG, not a FIFO queue
The build farm's job is to expand a dependency graph into actions and schedule them to maximize cache reuse and minimize critical-path time, not to run repos in arrival order. Every component earns its place against a measurable outcome — queue wait seconds, cache hit ratio, critical-path minutes, or dollars per vCPU-hour. Interviewers from Google, Gradle, and CircleCI want to hear the failure modes (a poisoned cache, a hot tenant starving the fleet) before they hear product names.
Quant anchors (state aloud)
- Peak 400 concurrent builds; 12k engineers; 70% remote cache hit on default branch after warm week.
- Control-plane ~300 QPS; heavy bytes on CAS/object storage, not OLTP rows.
- Planner p95 <200ms; agent warm boot 12s with pooled images.
Operational drill
When the farm degrades, shed discretionary PR jobs first, protect default-branch queues, and surface a single timeline keyed by build_id so on-call reads one view instead of three. Never rebuild a production artifact under pressure — rebind to the last signed digest already in the content-addressable store.
Mechanism checklist
- Graph-aware planning — expand targets to actions with explicit deps.
- Content-addressed cache — key = hash(inputs + toolchain fingerprint).
- Ephemeral agents — one action per isolated pod; no shared /tmp.
- Signed outputs — cosign attestations before CI promotion.
How to open this one
The framing that signals depth on a monorepo build farm is content-addressed caching plus change-based targeting: a one-line edit must rebuild only the affected targets, not all 500, and identical build inputs must hit a shared remote cache instead of recompiling. Lead with the dependency-graph-aware scheduler and the failure story that matters: a poisoned cache entry serves a stale artifact, so cache keys must fold in every input that affects output — source, dependencies, and the toolchain fingerprint. That shows you understand the build farm lives or dies on cache correctness and incrementality.
Key Highlights
- •12k engineers, 3k repos, peak 400 concurrent builds
- •Wall-clock bounded by DAG critical path, not agent count
- •Google RBE, Gradle Enterprise, CircleCI executors as anchors
Section Rescue Kit
Buzzwords to use:
Safe statements:
- "I'll anchor Problem Statement: Monorepo Build Farm to critical-path minutes and cache hit ratio, not vendor logos."
- "If time is short, I'll sketch planner → scheduler → agent → CAS, then dive one hot path."