Quoting the Bazel website:
Bazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outputs for multiple platforms. Bazel supports large codebases across multiple repositories, and large numbers of users.
I started working on this project in 2016 as part of a role change within Google and my primary focus was to make Bazel run well on the macOS platform, specifically to support the Google-internal iOS development community. The port already existed when I joined the team, but it was mostly a prototype that lacked stability and polish.
What did I contribute?
Taken stright from my resume:
- As the Tech Lead of a subteam of 4, I provided direction, mentorship, and established planning and execution procedures to ensure we all saw the big picture and avoided team burnout. I also redid our planning process after observing routine pain points and gathering feedback from the team and from external TLs.
 - Led a tactical response to the COVID-19 WFH situation to address pain points in builds on laptops with limited resources and on poor network connections.
 - Rewrote Bazel’s dynamic scheduling feature, which is critical for good build performance, to make it resilient to networking blips and variable latency. See talk.
 - Made Bazel on Mac able to reach Google-internal’s remote execution engine, which required porting the code to using gRPC, clearing roadblocks to establish a connection to production, and rolling out a new proxy service. This sped up clean builds by 50%.
 - Wrote many public blog posts on Bazel internals and presented at various conferences (including the public BazelCon) to spread awareness about our product and our work.
 - Sped up action sandboxing on macOS by 4x by designing and implementing a FUSE file system (sandboxfs) and integrating it into Bazel.
 - Acted as the point of contact during an engagement with the YouTube iOS developers to address their pain points in developer velocity, and succeeded at fixing them.
 - Added telemetry to our internal Bazel on Mac variant, creating a dashboard that has been used for years to understand the behavior of our user base.
 - Established team-wide (~50 people) practices, like a bug triage policy and a weekly knowledge-sharing event.
 
Related blog posts
- 2025-09-26:
You are holding BUILD files wrong
 - 2025-09-19:
Bazel and glibc versions
 - 2025-09-12:
Trusting builds with Bazel remote execution
 - 2025-09-05:
Understanding Bazel remote caching
 - 2025-07-21:
Bazel and action (non-) determinism
 - 2025-06-11:
Whatever happened to sandboxfs?
 - 2025-03-24:
The next generation of Bazel builds
 - 2025-03-14:
Bazel at Snowflake two years in
 - 2024-10-22:
BazelCon 2024 recap
 - 2023-12-21:
Bazel interview at Software Engineering Daily
 - 2023-12-03:
Strings, encodings, NULs and Bazel
 - 2023-11-04:
End-to-end tool testing with Bazel and shtk
 - 2023-10-30:
BazelCon 2023 et al. trip report
 - 2023-10-20:
Build farm visualizations
 - 2023-10-07:
Analyzing OOMs in IntelliJ with Bazel
 - 2023-03-16:
Addressing Bazel OOMs
 - 2021-03-12:
Defining build time SLIs and SLOs
 - 2021-02-26:
How does Google keep build times low?
 - 2020-12-31:
How does Google avoid clean builds?
 - 2020-10-09:
The final boss: Bazel's own JNI code
 - 2020-09-18:
Bazel output streaming, Ctrl+C, and test flakiness
 - 2020-09-01:
Bazel UI locking and file downloads
 - 2020-06-12:
Shipping Bazel's new dynamic scheduler
 - 2020-05-29:
Running codesign over SSH with a new key
 - 2020-01-24:
Ensuring system rewrites are truly necessary
 - 2020-01-17:
The OSXFUSE, hard links, and dladdr puzzle
 - 2019-12-31:
Tree artifacts and transient files
 - 2019-12-31:
Lifting the local lock for dynamic execution
 - 2019-12-30:
Artifact downloads and dynamic execution
 - 2019-12-27:
Output conflicts and dynamic execution
 - 2019-12-26:
Bazel's dynamic strategy
 - 2019-12-23:
How does Bazel track local resource usage?
 - 2019-12-20:
Introduction to Bazel's dynamic execution
 - 2019-12-14:
What are Bazel's strategies?
 - 2019-11-15:
Waiting for process groups, macOS edition
 - 2019-11-14:
Waiting for process groups, Linux edition
 - 2019-11-12:
Waiting for process groups, introduction
 - 2019-11-08:
Bazel's process-wrapper helper tool
 - 2019-11-01:
A quick glance at macOS' sandbox-exec
 - 2019-03-22:
Optimizing tree deletions in Bazel
 - 2019-03-06:
Darwin's QoS service classes and performance
 - 2019-02-22:
Using setenv equals setting global variables
 - 2019-02-07:
Encode your assumptions
 - 2019-02-05:
Hello, sandboxfs 0.1.0
 - 2019-01-29:
Open files limit, macOS, and the JVM
 - 2018-04-30:
A few extra system calls... and you lose 1% build time
 - 2018-04-13:
Preliminary sandboxfs support in Bazel
 - 2018-03-27:
Stick to your project's core language in your tests
 - 2018-03-19:
A case for writing Bazel's integration tests in Java, part 2
 - 2018-03-16:
A case for writing Bazel's integration tests in Java, part 1
 - 2017-08-25:
Introducing sandboxfs
 - 2016-01-19:
Joining the Blaze team
 - 2015-04-14:
On Bazel and Open Source