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