After ~12.5 years at Google and ~10 years working on Go (#golang), it's time for me to do something new. Tomorrow is my last day at Google.

Working at Google and on Go has been a highlight of my career. Go really made programming fun for me again, and I've had fun helping make it. I want to thank Rob Pike for letting me work on Go full time (instead of just as a distraction on painfully long gBus rides) as well as Russ Cox and Ian Lance Taylor and Robert Griesemer and others for all the patience while I learned my way around. I've loved hacking on various packages and systems with the team and members of the community, giving a bunch of talks, hanging out in Denver, Sydney, MTV, NYC, at FOSDEM and other meet-ups, etc. While I've learned a bunch while working on Go, more excitingly I discovered many things that I didn't know I didn't know, and it was a joy watching the whole team and community work their (to me) magic.

I'll still be around the Go community, but less, and differently. My @golang.org email will continue to work and please continue to mail me or copy me on GitHub ( @bradfitz ), especially for something broken that might be my fault.

Mini Google Resume

In somewhat chronological order, but not entirely:

Joined August 20, 2007.

Worked on the Social Graph API, continually extracting <link rel="me"> and FOAF and other such semantic social links between pages, indexing it all, and exporting it over a public API. It's since been shut down, but I learned a lot about Google indexing, production (Borg, BigTable, MapReduce), got up to speed on Google-used languages & style (C++, Java, Python, Sawzall).

and FOAF and other such semantic social links between pages, indexing it all, and exporting it over a public API. It's since been shut down, but I learned a lot about Google indexing, production (Borg, BigTable, MapReduce), got up to speed on Google-used languages & style (C++, Java, Python, Sawzall). Web-ified the Google open source CLA process; it previously involved faxing and stuff, which nobody wanted to do.

Worked on Gmail's backend for a bit, specifically its address book backend.

Integrated personal address book search into Google's main search. (So searching google.com for somebody in your contacts would show your address book entry for them.) It dark launched as an experiment, but never went live because at the time we didn't have enough SSDs in enough data centers to meet latency budgets. (I remember meetings with various teams drawing Gannt charts a few milliseconds wide, showing RPCs and latency budgets... blew my mind at the time.)

Rewrote memcached (which I wrote pre-Google) in Google C++ and using Google's RPC system and then added memcache support to App Engine. The Google memcache server continues to be used by many teams.

Fixed a bunch of performance bugs in Android when it first came out, got invited to join the team.

Worked on the Android framework team doing performance analysis and tooling and fixes. (some of the commits) Did a bunch of logs processing on nightly uploaded performance samples from Android team & Googler dogfood phones and identified problematic code & stack traces & RPCs causing UI jank.

Added android.os.StrictMode (blog post).

(blog post). Added an Android system-wide DNS proxy. Previously DNS caching was per-process (per-app).

Worked on a distributed build system for Android that let you do make -j9999 of arbitrary code out over a cluster of machine building in a custom FUSE filesystem that watched what got written and communicated back to the coordinator server. It was internal code, but its spirit lives on in hanwen/termite, a Go implementation written later.

of arbitrary code out over a cluster of machine building in a custom FUSE filesystem that watched what got written and communicated back to the coordinator server. It was internal code, but its spirit lives on in hanwen/termite, a Go implementation written later. Started writing in Go for various Android analysis tasks.

Started writing in Go for personal projects (Perkeep, then named Camlistore)

Started sending changes to Go to fix/add to the Go standard library. (starting May 5, 2010 with some os.Chtimes and http stuff)

and stuff) Invited to join the Go team.

Worked on most of the Go standard library. Primary author of net/http, database/sql, os/exec, Go's build/test CI system, etc.

20% project: co-author of PubSubHubBub, which became WebSub.

Rewrote the Google download server from C++ to Go. This was one of (or the?) first production Go service at Google, and involved plenty of dependency work to make it happen. It also showed various shortcomings in the Go runtime which are long since fixed.

Gave many Go talks at various conferences.

Wrote Go's HTTP/2 implementation, client and server, in Go 1.6.

Stats, memories

12 years, 5 months at Google

3 offices worked at (MTV, SFO, SEA)

25 desk locations

53+ offices visited

3 CEOs

1 stock split

1 company split

8 managers, IIRC. (not at once, fortunately; "Eight bosses?" "Eight." "Eight, Bob")

met Googler wife

5.5 hours of unused massage credits

many Google-internal CLs ("change lists" == commits == PRs)

3,064 Android CLs

10,787 Go CLs

15 Go releases (and several before Go 1)

For Googlers

See go/bradfitz for the internal version of this document. (It's approximately the same but with a bit more stuff I can't or don't want to share publicly.)

FAQ

Why are you leaving?

Little bored. Not learning as much as I used to. I've been doing the same thing too long and need a change. It'd be nice to primarily work in Go rather than work on Go.

When I first joined Google it was a chaotic first couple years while I learned Google's internal codebase, build system, a bunch of new languages, Borg, Bigtable, etc. Then I joined Android it was fun/learning chaos again. Go was the same when I joined and it was a new, fast-moving experiment. Now Go is very popular, stable and, while there's a lot to do, things--often necessarily--move pretty slowly. Moving slowly is fine, and hyper-specializing in small corners of Go makes sense at scale (few percent improvements add up!), but I want to build something new again.

I don't want to get stuck in a comfortable rut. (And Google certainly is comfortable, except for open floor plans.)

What next?

TBA. But building something new.

Update (2020-01-30): I'm joining Tailscale.

Discussion