I recently wrapped up 4 years at a Big Company. During that time, I switched teams once, I transitioned from an Individual Contributor (IC) to an Engineering Manager (EM), the company name changed from Square to Block, and the number of employees increased from something like 5,000 to 15,000. Those numbers may seem small potatoes compared to many other Big Companies. For me, having only worked (full-time) at $\le$ Series C startups prior to joining Square, this was a 1 or 2 order of magnitude increase in company size.
Back in pre-pandemic 2020, I was fairly nervous, across career, identity, and existential levels, about joining a Big Company. The whole experience was better than I expected; I stuck around longer than I have at any other company! As I get ready to join a smaller company again, I want to write down some thoughts about Big Company life while they’re still fresh in my mind. I’m not trodding new trails here. This is more for me than it is for you. Besides, I only have this single data point, so my thoughts will be heavily biased. Nevertheless, I’ll attempt to generalize them as much as possible.
The Big Easy
On first pass, working at a big company was just so easy compared to startups. I hadn’t realized how much I had to manually do or figure out en route while working at a startup. From onboarding to offboarding, many processes at a big company are a well-oiled machine. There are entire teams of people dedicated to making these processes smooth, and there is a goldmine of go/links, historical slack conversations, and wiki docs to help you along the way. In terms of my actual job, other people had already paved the path for all of the early Data pain points: non-technical stakeholders already appreciated the value of data; key metrics had already been established; a data warehouse existed; there were Looker dashboards aplenty.
On top of this, the work/life balance was very reasonable, the business was significantly less volatile than in startups, and I enjoyed a step change in my total compensation. On that last note, if you are trying to maximize the expected value of your future wealth, then there is no better option than a public Big Tech company. Having worked at two startups previously that saw zero appreciable exit, it was certainly nice to receive actual, public stock (as RSUs no less!) which I could immediately turn around and sell.
I had a bunch of preconceived notions prior to joining Square, and many of these were proven wrong. Externally, the company was fairly scandal-free, but I assumed that I’d uncover many layers of nasty, predatory capitalism. That wasn’t the case. The company could’ve been much more evil if they wanted to be. It really drove home how important having a good culture can be. Conversely, it’s so obvious to me now how much certain companies’ problems can be attributed to bad culture.
I assumed I’d be a tiny cog in a wheel, suffering under the unbearable weight of bureaucracy. Instead, I found that I was able to work on impactful things, and the road to higher impact was fairly clear (should one want to travel in that direction). Yes there was bureaucracy (like everywhere), but I found it to be generally reasonable. People wrote lots of docs, which I actually prefer. Writing helps me think, and there’s a reason I write this blog! For better or worse, Square is a very “bottoms-up” culture which meant that I had a decent amount of flexibility in technical choices.
One of the reasons that I chose to join a Big Company was that I was pretty burned out from freelancing and startupping. I wanted to chill the fuck out: do good IC work, keep my head down, and rest and vest.
I had also jumped around a lot since grad school (2 jobs, freelancing, and startupping over 5 years). My goal was to sit still for at least 4 years. I made it to 3 years and 49 weeks, so I’ll round up and declare success on that front. In terms of chilling the fuck out, though, I don’t think I succeeded.
I’m not trying to humble brag, but I found it hard to sit still and slack off for extended periods of time. A thing that I dream about is being able to put in a minimal amount of time at a full-time job while enjoying outsized compensation. Where this dream turns into a quandary is near the implicit premise that I don’t give a shit about the job. No matter what, if I’m putting in >50% each week, this is still a significant portion of my time, which is the most valuable thing I have. If I’m going to spend that time, then it needs to be on something intrinsically motivating. Alternatively, I should just go back to freelancing and at least work on my own terms.
I suspect growth is more motivating than maintenance. Youth is more exciting than middle age. A rewrite’s more fun than a refactor. A startup is training from scratch. A mature company is fine-tuning.
There are ways to explore all of this within big companies. I switched from an established team (Risk) to a young and growing team (Conversations) that was actually the outgrowth of an acquisition. The latter was actually a very nice fit – you get the excitement and risk-taking of a new venture while enjoying all the benefits of the big company safety net. This must be what it’s like to start a company in Europe.
A fun thing about working at a large tech company is that it’s like a telescope pointing at the future of startups. You get to see how a startup evolves and operates at scale. You get to look back in time and observe how early decisions have large (or small!) future impacts. You get to take notes about what works and doesn’t.
One thing that this scale brings is, well, scale. By definition, you will have larger absolute impact than working at a small startup since marginal improvements still get multiplied by a large $N$. This scale comes with complexity. More systems and more people necessarily increases coordination costs. The combination of scale and complexity makes the specialization of job roles economical. It makes sense to hire people to dedicate their time to narrow optimizations since their improvements can easily pay for their salary. The increased complexity means that it requires full-time work just to make these narrow optimizations.
For those who get existential satisfaction from their absolute impact, large companies can be a good fit. Similarly, they’re a good fit for those who like to go deep in a domain since specialization is rewarded. The counterweight is that breadth is necessarily reduced. You work on top of abstractions built by platform teams. No platform will ever do everything that you want it to, so you either must use “influence” to get things built or find ways to work around the platform.
If you’re willing to venture outside of your specialty at a big company and learn other domains, I’ve found that it helps immensely. You’ll be able to talk the talk with other teams, you’ll be able to argue your case better when pushing for changes, and you’ll receive better support when requesting help. The converse of this are the people who refuse to learn or do things because “that’s not their job”. I hate that attitude. At the very least, you should try everything once, and probably twice.
As a former experimental physicist, I enjoy being a jack of all trades, master of none. This is a poor fit for highly specialized roles. I had many internal conversations with people who similarly felt stunted in their narrow roles. While I could sympathize, there are ways to find interesting work. Due to scale and complexity, many problems turn into systems and processes problems rather than pure technical or product problems. Tackling these sorts of problems inevitably increases the technical breadth and can be a fun challenge. I did a lot of work on autoretraining, and it touched everything from terraform to t-tests.
Towards the end of my tenure, I was interviewing candidates for a role on my team. My team was somewhat unique in that we did not use any “platform” tools – we managed our own infrastructure for training and serving our own language models, and we were looking for people with a similar breadth and depth of skills. I saw so many incredible resumes from Machine Learning Engineers at very big, top name tech companies where the candidate talked about training and deploying fancy models to massive scale leading to unbelievable impact. Alas, during the interview, the work that they actually did would also be unbelievably narrow (e.g. modifying a YAML config, clicking
Train, and then uploading their model to some API). I don’t think that these types of roles are long-term good for anyone’s career, and I primarily blame internal platforms and MLOps vendor tools for trying to relegate MLEs to be
It’s the People, Stupid
As much as every tech nerd would like this to not be the case, the people end up being the most important part of any company. At Square, your team’s culture was often more important than the overall company culture. This culture can be impacted by team size. Thankfully, Square made internal transfers pretty easy. The last team I worked on was absolutely excellent.
Maintaining relationships with people outside of your team ends up being important for cross-functional initiatives, promotions, and generally building up your internal cachet. While it’s easy to lay low, it definitely pays to maintain connections outside of your team.
I decided not to stick around for a Big Tech Master’s, but who knows what will happen in the future. I’ve been known to change my mind!