Reflecting on two years at Google
I had meant to write a “Reflecting on one year at Google” post earlier this year, but it kept getting put off until suddenly I realized that it would be better to just cut my losses and skip to the second year post.
Then, when I got into it, I realized that a lot of my experience with Google was from the outside: failing repeatedly trying to get in. So, after writing a bunch about that, I decided to create two posts: “Reflecting on interviewing at Google” and this post.
Now, with all that out the way, I’m finally read to really dig in and start some serious reflection and introspection.
Background note: I started at Google in late 2017. I moved from Colorado to California (San Francisco bay area) for the job, and moved back to Colorado in early 2018 (keeping the job, but working from Boulder, Colorado).
Small steps
Starting at Google was unlike any other job. Most jobs I’ve had, and heard about, followed a pattern of a 2-week break-in period followed by a few months contributing but still kind-of trying to get caught up, followed by proficiency, and at some point later you might lead a team.
Google was very much not like that. You start by attending at 2 week orientation with the other ~400-700 people in your “Noogler” class. Yes, hundreds of people - mostly engineers - start at Google every two weeks. On one campus. More on other campuses. Mind blown.
The first two weeks are spent in lectures and seminars repeatedly having your sense of scale and proportion obliterated, being exposed to various systems and teams within the company, being taught by senior engineers how to use some of these systems, and generally being taught how to teach yourself.
In your third week you’re ready to meet your team. Your team introduces you to a “starter project”: a small project in a well-understood area that you can use to feel good about yourself, and hopefully along the way learn how to actually start writing and releasing code. You’re given something like a month to finish this.
So, it takes 6 weeks after you start before you’re actually ready to look at real code. And, beyond that, most teams will only expect you to be a fully independent, contributing team member somewhere around month 6 to 9.
Inch by inch
My first actually-useful piece of code I submitted, if I recall correctly, was a code sample that showed developers how to use the Pub/Sub client library in a certain way.
All code at Google goes through a process called “code review”, where code changes (or additions, deletions) get “proposed” and reviewed by colleagues, who either Yea, Nay, or ask for changes. Code review is a fairly common practice in software engineering, though the implementation varies a lot by company. At most companies, code review usually something like 30 minutes to 2 days per code change. Code reviews at most companies are typically fairly high-level, and tend to concern themselves with broad design or nit-picky things like code style.
That first change I proposed took something like two weeks to get through code review. I learned more about Go and code design during that code review than I’d experienced the entire past year leading up to that point (which is not that high of a bar, if you know my prior experiences, but still). It was brutal. My code was picked apart; it was analyzed line-by-line, and then block-by-block, and then file-by-file. It wasn’t malicious, though: code review comments were statements of fact, or impartial queries, rather than jabs and one-ups. They were, “This can be more performant like so: |example|. And, here’s why: |reason|.”, not “This is terrible. Do it this way: |example|.”.
After years of stagnation in my career at that point it was so wonderful to be learning again, from people with a deep wealth of knowledge and experience. I was hooked.
The next year was a lot of this. I got better by inches: by treating each code review as a learning opportunity; by diving into problems I had no business being in; by pushing myself, over, and over, and over, to become better.
Looking back, I was getting better: the scope of problems continually increased; the code reviews went from weeks to hours or days, from everything-under-the-sun is wrong to fairly-subtle suggestions. I was slowly transitioning from a student that needed hand-holding, and didn’t provide much in return, to a colleague that accepted and gave equally (or, closer to equal).
Metre by unhealthy metre
My intense passion for interesting problems and self-improvement finally had an outlet, and that outlet was unbounded in scope. Worse: it rewarded the effort I put in: despite my increasing weariness, the scope of my work constantly increased (by my own volition); my personal reviews were stellar; and my projects were almost universally a success.
I didn’t realize until fairly late that I was slowly grinding myself down to the bone. I was working 10, 12, or 14 hour days, and often would work on weekends. I took my frustrations and problems home rather than leaving them at work; they were compounded with my increasing dislike of California.
I ended up getting most of the way through that first year before realizing some things were very bad. For the first time in my life, I recognized signs of depression. Some combination of a too-intense work schedule, longing for my old friends and outdoor-focused lifestyle in Colorado, and relationship problems were causing me to be deeply unhappy.
I won’t get into that part too much. The long story short is that I had a bit of a break down and decided I needed to move back to Colorado, Google or no Google. Thankfully, my department was and is fantastic and thoroughly supported me, and offered me my job at the Colorado campus with a standard cost-of-living pay reduction.
I moved back to Colorado in early 2018 with the same job.
On to the other side
The year taught me a lot about my limits to an extent that’s hard to put into words. I’ve learned how to spot signs of too much stress, healthy coping mechanisms, and how to set boundaries. I’ve learned a lot about what I value, and the type of life I want for myself. And, it’s helped me refine the kind of person I want to be: hard-working and respected in my career, yes, but also a kind friend with space in my life to help others; a well-rounded individual with lots of time spent outdoors; a good partner. It’s hard not to wish I had had these skills going into the job. It would have saved a lot of hardship for myself and my relationship at the time. I suppose the best you can do is try to learn from hardship, though, and try to become better for it.
In the last year I’ve committed myself to a healthy balance of passion for my job and all the rest that matter to me: loving relationships with friends and family; spending time in nature; sports and exercise; hobbies like reading and taking french lessons; and progressing my “adult” life with things like buying a house and building a local community.
My work hasn’t suffered hardly as much as I thought it would. Working 7 to 8 hours a day has made me be a lot more efficient with my time: I cancel or decline a lot more meetings; I don’t take hour-long lunches with colleagues; I don’t do a lot of after-work events; I delegate a lot more rather than “superhero” all the work myself. And, the reprecussions never came: my lessened throughput was celebrated by my manager and team as mental health successes, rather than the disappointment I was subconsiously bracing myself for.
The outcome is a much healthier, happier day-to-day, week-to-week. I once again find self-value in things outside of work; I have a robust and healthy support system of friends and family; I progress myself in sports and hobbies so that stalls or failures at work are diminished in impact by successes elsewhere.
Keeping perspective
I’ve had the privilege and honour of working with incredible minds, who have universally been kind and willing to teach. I’ve sat in rooms with people that have invented entire languages, network protocols, and algorithms for systems at scale. I’ve had my opinions heard and sincerely considered by these people, and had the opportunity to learn from them. I’ve had the opportunity to lead; to design; to mentor; and to teach. I’ve accomplished and learned more (in my own eyes) in these two years than my entire career before this.
I’ve also had the honour of having incredible managers and directors. I have felt since day one that I was a valued member of a team; that my opinions held weight; that I was supported in whatever I decided was best for myself, even if that meant leaving the company or my team.
I work on things that I find really, really cool: building a performance benchmarking pipelines and improving client library performance; defining the client-side retry strategy for all of Google Cloud; improving Google Cloud reliability with throttling and load shedding; building important and complex features into libraries; working on the HTTP/2 transport in gRPC; and loads more. Moreover, I’ve been given a lot of freedom in choosing the kinds of things I work on, and being encouraged to go find new problems that we’re not aware of yet.
I’ve had opportunities to travel around the world, meeting developers, working with amazing engineers, and giving talks on technical topics. And at home, we are given a tremendous amount of benefits, too: classes, food, classes about making food (seriously), gyms, fun events, clubs, and more.
It’s a good place to work. It’s an intense place to work, and you have to be very careful not to let it burn you up, but it is a good place to work. I don’t see myself working anywhere else for the foreseeable future.