--- roles: - id: bazel-configurability image: jobs/google/bazel.png name: Software Engineer # III team: Bazel Configurability company: Google startDate: 2016-07-15 # vague guess - this was around when I would have # started getting to work on reviewing configurability # changes and getting up to speed on this team endDate: 2019-10-04 # dead on, this was my last day at Google shortDescription: | Optimizations and flexibility for multiplatform builds for Bazel projects. description: | Primary expert and contact point for _configuration trimming_, a major overhaul of the internals of Bazel's multiplatform support which saves build time, build artifact disk space and build graph memory by collapsing redundant nodes together (e.g., deduplicating Java binaries which only differ by the Python version they're built for). achievements: - id: feature-flags description: | Designed and built a feature flag system for Bazel which allows Android developers to toggle build dependencies without needing to create parallel trees. Used by ~50 Android teams within Google, with more asking to have the feature enabled weekly. - id: whitelisting description: | Designed and built a mechanism for controlling rollouts of Bazel features based on build package for use with feature flags, which was quickly adopted by other subteams within Bazel. - id: attribute-refactor description: | Refactored Bazel's attribute support, prompting a code owner to describe the result as "so much better it hurts." - id: test-trimming description: | Sped up developer build/test switching, saving 2min+ reanalysis on each switch, adding up to an hour or more of wait time saved per engineer over a day's builds. - id: tagged-trimming description: | Implemented, built a fully automated migration tool for and consulted with users to roll out manual trimming to get Android developers reduced memory use immediately, saving multiple gigabytes of memory per build and preventing OOM conditions for larger builds. - id: auto-trimming description: | Researched options for automatic trimming, wrote over 60 pages of design documents proving the viability of trimming and the tradeoffs of different options, built a TypeScript/Angular2-based prototype to gather data on builds and eventually integrated a prototype into Bazel. - id: bazel-u description: | Ran multiple talks for the Bazel team about trimming and feature flags, consulted across Bazel and with other teams on the viability of trimming techniques for different use cases, and received a peer bonus for my expertise. - id: trimming-metaphors description: | Wrote a document explaining the complex concepts, techniques, and history of trimming in an easy-to-read manner and received a peer bonus describing it as "one of the best docs I've read at Google." - id: bazelcon description: | Solicited experts for office hours for BazelCon 2018 and managed rooms and experts day-of, allowing the show to go on despite last-minute loss of our planned venue and receiving a peer bonus from the head organizer. - id: personal-postmortem description: | Wrote, gave a talk on, and received a peer bonus for a document speaking frankly about emotional safety on the team. - id: team-culture description: | Proposed improvements to team culture, ran meetings on the subject, consulted with management and gathered feedback fro team members. - id: kotlin description: | Consulted with Kotlin team at Google about the possibility of using Kotlin within Bazel. - id: bazel-release image: jobs/google/bazel-old.png name: Software Engineer in Test # II team: Bazel Release Process company: Google startDate: 2013-09-15 # rough guess, since I was still working on Wallet in # Q3 2013, but had fully transitioned to Bazel by # Q3 2014 - but it hadn't gotten cold yet endDate: 2017-06-15 # did I truly ever stop working on the release process? # however, this is around when it stopped being my job description: "The long version is, I did so much freaking junk on this thing." shortDescription: "The short version is, a lot." achievements: - id: mentor description: | I taught Florian the secrets of releases. - id: teach description: | I taught everyone else how to be sheriff. # * Bazel release process fixing and documentation # * Bazel release process overhaul design # * PB: Sheriffing (x3) # * PB: Diagnosed & wrote tool to fix bug in test, reenabling releases # * Perf: Engineering conscientiousness (doing the right thing) # * Perf: Energetic and invested - id: bazel-android image: jobs/google/bazel-old.png name: Software Engineer # II team: Bazel Android Support company: Google startDate: 2013-09-15 # same as Bazel Release Process endDate: 2016-11-15 # vague guess - this is around when my focus shifted to # configurability full-time, since before that I was # doing configurability as a side job and Android as a # primary job description: null # * Bazel Android support: native code, Jack, resource-split APKs, aidl tooling fixes # * dynamic configs on aspects as part of Jack # * PB: Big release process documentation # * PB: Release process migration design help # * PB: Python and release process teaching # * PB: release process tools moved into binfs and hashbang # * PB: --legacy_android_support no-oping # * Spot: Consulted with Snapchat - id: google-tooling image: jobs/google/google.png name: Software Engineer in Test # II team: Internal Tooling company: Google startDate: 2013-02-15 # rough guess, since Jon mentioned my work on the tool # in Q3 2013 # which was after I started the UI work in Summer # which was after I'd been invited to start working on # the project around midway through Q1 endDate: 2017-12-18 # dead on, this is the day I got a peer bonus for # helping with turning this down description: null # * account making service # * PB: account creation tool (x3) + shutdown # * Spot: Gaiamaker - id: wallet-testing image: jobs/google/wallet.png name: Software Engineer in Test # II team: Wallet Web Frontend company: Google startDate: 2011-07-18 # dead on, this was my start date endDate: 2013-09-15 # same as with the Bazel Release Process start date, # since they're the same day description: null # * Web wallet testing # * Helped organize team fun events on Whisky # * PB: Guice wiring and integration testing support - id: agora-games image: jobs/agora.gif name: Software Intern company: Agora Games startDate: 2010-11-04 # or thereabouts, this is when I was interviewing endDate: 2010-12-04 # as recorded in a livejournal comment... # Agora Games: Ruby web testing - id: star-analytics image: jobs/staranalytics.png name: Software Intern team: Star Task Builder company: Star Analytics startDate: 2010-04-15 # very approximate, got my IP phone/laptop around then endDate: 2011-05-15 # ish, I stopped this around when I left school # Star Analytics C# frontend - id: misc image: jobs/blocks.svg name: Hobbyist team: Other (personal, school, side jobs etc.) Projects startDate: null endDate: null # ## Personal projects # * Personal blog website using Eleventy + Netlify # * Anki plugins for Japanese study # * Personal Docker server for mail and nextcloud # * Discord bots # * Assortment of handmade Minecraft plugins, self-run server # * PDF page-identification and splitting C# utility for helping at the church # * Python/GTK+ based rental property payment tracking # * Javascript based dice roller for MSN+ # ## RPI projects # * Python OpenGL-based game # * Rails based task management project: https://github.com/thoughtbeam/flagship_tasks # ## Regis projects # * C SDL-based game # * Python/GTK+ based assignment tracker # * Python based encrypted chat program # * Java based student chat program