Coding at Google
I doubt this will be my only post on this topic - coding at Google. I perhaps summarized it best in one of my tweets:
Becoming a software engineer because you love coding is a lot like becoming a butcher because you love animals.
There’s a distinction between coding and software engineering that is super important to me. The former is about getting a particular task done. The second is about showboating and arguing with other people about arcana, usually which text editor is best to do coding.
I’m being a bit facetious, but I would define software engineering as the discipline of producing code to common standards, the way civil engineering is about producing bridges that don’t fall down. Since physical reality doesn’t serve as a test for what a common standard should be in software, we end up with discussions about what is the appropriate style, semantics and design pattern for every problem.
A medium where one can move as fast as their thoughts means we end up with lots of frameworks people thought up, but don’t necessarily solve the business problem. Large companies have avoided this framework proliferation problem by regularizing processes all across the board. Within one large company you have a shared reality about what good code looks like (Ha, I made myself laugh with this line because it’s obviously not true, but whatever). The larger a company, the more specialized each role has to be, and so we end up with teams of reliability engineers who can enforce policies on what can launch.
In order to get things to launch and pass reliability review as fast as possible, teams build frameworks which prevent the common mistakes identified in past outages. They also implement massive testing, which is Very Good.
It’s just not very fun.
Being a SWE at Google is challenging and interesting and I learned a lot, but I also completely lost my desire to tinker. I lost my love for sitting down and writing some code. It just made me ill to think about how this thing could scale up and cause massive outages on day one or be a nightmare that pages me every evening before I sleep. While learning the first few frameworks was fun, I wasn’t really enjoying anything else. I learned a bit more about product, hardware, UX, got really into i18n and l10n, and had the chance to play with a lot of different topics…but the coding itself? I didn’t enjoy the work.
My primary problem with all that is how deeply I used to identify with being a coder. It seems inaccessible to me now. Who was that guy? I can’t imagine putting myself through the frustration-release cycle that is finding that annoying P0 bug before release cutoff. But I do miss making things, and I hope to one day get back to making things. Writing has been a real boon to me in that way - helping me to see output and process the things I’ve taken in, into a more concrete form. There are skills and circuits from programming that are reused a lot.