Practical Bazel

Practical Bazel

In 2020, I led the redesign and re-implementation of the object storage system behind RelativityOne.

As part of this project we reengineered the continuous delivery pipeline of the service to embrace the philosophy of a service-wide monorepo with a Bazel-based build system. We chose Bazel because we wanted a build system that could support many different languages (the service has code written in C, C#, Python, Go, Terraform, Packer, and other languages…) while remaining fast and correct.

During this project we wrote seven new Bazel rulesets and a huge amount of Bazel-based build code.

This post series is about the many tips and tricks that we learned along the way as we wrote hundreds of thousands of lines of code in multiple languages to support this storage service.

1 - General Tips and Tricks

2 - Best Practices

3 - Developer Experience

4 - Writing Custom Rules and Rulesets

5 - CI/CD