Last updated January 2020
Googler since 2008, passionate about developer productivity via toolchain ergonomics, refined developer experience, and expert tooling.
World-class Expert in Bazel build system, https://bazel.build
Professional programmer for 23 years.
Open-source advocate and public speaker.
Created Error Prone, a static analysis plugin for the Java compiler that detects many classes of programming mistakes. While working with Findbugs author, I realized we could host the analysis in the compiler itself. Rolled out stricter compiler across Google monorepo by creating a MapReduce framework that runs the compiler in “fix mode” across all compilations in parallel. This effort became a staffed team, has over 600 checks and has prevented thousands of bugs including some severe ones.
Migrated the Angular project to TypeScript, made TypeScript an official Google language and wired Angular development into Google’s toolchain.
Led Google-scale infrastructure to run continuous integration for nearly all Google projects and GUI to show all build and test results.
Google, 11 years
|Time period||Perf rating|
|2016 Q3 – 2017 Q1||Exceeds Expectations|
|2017 Q3 – 2018 Q3||Strongly Exceeds|
|2019 Q1 – Q3||Superb|
Bazel is a general-purpose build tool used for all nearly software at Google.
According to Google’s metrics, rules_nodejs is the most popular Bazel plugin, with over 20k daily downloads. A summary of my work is on rules_nodejs contributors
Tech Lead for Angular CLI and Tooling (1.5M users).
Led DevInfra work such as syncing code changes between GitHub and Google-internal repo.
Converted Angular itself to TypeScript.
Migrated Angular to Build&Test with Bazel, along with its ecosystem (Material components, ngrx, Angular Universal). 87% reduction in Angular’s CI latency.
Founding member of team that implemented TypeScript as a supported language in Google. Wrote Bazel integrations, tooling for making TypeScript edits across the entire monorepo. Implemented tslint across Google’s code, built into code review tool.
Wrote third-party strictness checker to build into the TypeScript compiler, https://tsetse.info. This is modelled on my very successful project Error Prone which does the same for Java.
Google-wide continuous integration (TAP)
This is Google’s CI, based on running Bazel and Remote Build Execution on a massive cluster. Led the migration of project definitions to a Maven-like format, improved team processes and testing practices.
Tech Lead for two years.
Bazel Results UI (Sponge)
This service automatically injests event data from all Bazel executions and presents results in a GUI. Allows more intuitive comprehension of build and test failures, troubleshooting slow builds, sharing permalink when requesting help.
Tech Lead for one year.
Opower, 1 year
As employee #2 I got to build the UI for the company’s flagship “Home energy reports” product. This was rendered onto paper and served by the US Postal Service! The company was later acquired by Oracle for $50M
See my LinkedIn profile for employment history 1997-2007.
- Harvard: B.A. in Computer Science, Magna cum Laude (2001)
- Boy Scouts of America: Eagle Scout
Talks and Publications
- Communications of the ACM: Lessons from Building Static Analysis Tools at Google (April 2018)
- Testing on the Toilet: Change-Detector Tests Considered Harmful (January 2015; Won “flushy” award for top 4 articles of the year.)
- BazelCon 2019: Bazel Migration Patterns 🎬
- BazelCon 2019: Lightning talk “Why not to have Bazel Dependencies 🎬
- ng-conf 2019: The Bazel opt-in preview is here 🎬
- BazelCon 2018: Building Large Angular Apps with Bazel 🎬
- ng-conf 2018: Full Stack development with Nx and Bazel 📚 🎬 (April 2018)
- Google Cloud Next: Building Apps Like Google with Angular, Bazel, and GCP 🎬 (April 2019)
- AngularMIX: Develop Angular like Google Does 📚 (October 2018)