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
- 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