I made my first resume in tenth grade, when I applied to Staples because my Dad wouldn’t buy me the new Assassin’s Creed game. That was the worst recruiting experience of my life: my resume was a shitty template stolen from Microsoft Word, and I was so nervous during the interview that I couldn’t talk without stuttering. After that, I went home and swore that I’d do a PhD after college so I wouldn’t have to interview ever again (oh, how very naive I was).
Somewhere in the past six years that changed - maybe when I lost (some) of my social awkwardness - and I decided to enter a field where the only possible way to succeed is by acing interviews. And somehow, I haven’t done all that poorly. If you asked my parents in 2010 if they expected me to actually get this far, I’m sure they’d be as surprised as I am.
But this post isn’t about interviews, it’s about what comes after them, which is arguably more important. What do you do once you have offers? How do you make a decision? What should you look for in a company and an offer?
Specifically, this post is targeted towards soon-to-graduate college students with job prospects but without any idea of how to choose their futures. Your first job as a new-grad is incredibly important, and yet, there’s a dearth of good advice on how to pick a first job. There’s a ton of bad advice (“choose the most prestigious option,” “choose what pays the most,” “join a small startup or you won’t do any real work,” etc), most of it coming from people emotionally invested in your decision, or from someone sharing a personal anecdote, but there’s very little that actually attempts objectivity.
In this post, I’m going to try and give some good advice, based on my own experience, and the experiences of a lot of people I know that are in the same position. Note, however, that because a lot of my advice will come from my own experiences, this post will be a bit biased, firstly towards west coast technology companies, secondly to the tshirts-jeans-and-open-offices tech company culture, and thirdly towards the places CS graduates from Berkeley, Stanford, MIT, CMU, etc. want to work (because that’s where all my friends are - I live in a bubble).
(If you don’t want to read 3000 words, the more important section of this article is the second section: “Engineering Departments as Profit Centers”).
What Should You Optimize For?
Deciding where you want to work is a really difficult problem because there’s so much to consider. Money, location, the work you’re doing, the companies themselves, the culture, learning opportunities, advancement potential, etc. all matter a lot. So, instead, lets start by answering a simpler, more fundamental question: what do you want to optimize for? Or, put differently, of all the factors that come into play when deciding your future, what do you care about most?
There’s a bit more to this as well. Optimizing for one thing usually takes away from something else, and it’s impossible to have your exact preference in everything (if anyone finds a job that has this, let me know ASAP). And, because of this, you need to really reflect and understand what you care about, because there’s a opportunity cost in optimizing for different factors.
The most obvious thing people optimize for is money. Should you? Well, this depends entirely on your situation, but I don’t think so. Every decent technology company will pay you >= 100k salary (adjusted up or down for cost of living), along with some form of equity and a signing bonus, and despite what you hear on /r/cscareerquestions, that salary is more than enough for a single person live comfortably anywhere on the planet. As a ~22 year old, your expenses will be minimal beyond rent and food, so extra salary will just sit in an ETF somewhere (if it’s in a bank account, you’re doing it wrong).
So, what are you gaining by optimizing for more money? A nicer car, or more money when you’re 60 (of course, this is assuming you have the privilege of not supporting your family, or not having major medical bills, or any number of things. But that supports the point: this calculation is different for every person). If you want either of those, then go for it, but know what you’re giving up.
Another commonly parroted guideline is about prestige. This, in my opinion, is a great thing to optimize for in internships, but a terrible thing for your first job. Prestige usually comes at the cost of sacrificing of either learning opportunities, a high potential for advancement (these two usually go hand-in-hand), or money (Why? Think of what companies are prestigious [Big 4 and Unicorns mostly]; what are you sacrificing in each?). In internships this isn’t an issue, because you’re only there for three months, so you don’t have time to learn anything, you’re not supposed to advance, and you’re only there to get a better job in the future. But for your first real job, losing any of those three is major.
Passion for the Product
This has to be the most Silicon Valley reason there is, but it’s fairly common in my experience, so it’s worth exploring. A lot of people want to work for company who’s product they’re really passionate about.
One group I’ve heard this a lot from is gamers who want to work at a gaming company. Gaming companies are mostly known for three things (with a few exceptions, namely Blizzard, Valve, and Riot, all three of which have a massive player-base and games that are persistent sources of revenue, rather than the standard triple-A developers’ strategy of one-time payment for years of work): below-market salaries, stressful work environments, and below average job security. They’re able to get away this because people are passionate about making the next Uncharted.
If you want to optimize for passion, then again, know what you’re losing (Obviously, this isn’t true for all products: if you’re passionate about Facebook, then you’re in luck! But who’s passionate about Facebook?).
What Should You Optimize For?
Of course, this is a massive oversimplification. Companies can be both prestigious and pay well, or have a lot of potential growth and be prestigious but pay poorly, or any linear combination of the above factors or others that I haven’t mentioned. Also, note that I described everything in relative terms: it’s all an individual calculation that you have make yourself. The point is simply to be aware of the tradeoffs you’re making, and to make sure that you justify to yourself exactly why you’re making them.
The real question, then, is what should you optimize for. Again, there’s no universal answer, but in my case, I optimized for learning opportunities and advancement potential. I think that for your first job, you have to think long-term. For me, a larger current salary won’t matter nearly as much in ten years as the opportunity to do real work at a growing company. I wanted to learn a lot, very quickly, because I think that understanding persists, and it itself will bring me a lot more money in the future. I also enjoy engineering, and I want to work on difficult things because it’s fun and makes work exciting.
Engineering Departments as Profit Centers
Now, lets change course a bit, and move from understanding what you want in a job, to understanding companies and engineering departments, and how to identify the ones that you want to work on. The oft-repeated advice here is to make sure that engineering is a profit center, as opposed to cost center, in the company you work in. As in, engineering should be the central concern of the company, and improving engineering generally increases the company’s revenue and betters its future prospects. For example, imagine working at Google as opposed to an insurance company: better engineering directly translates to more revenue for Google, while the connection is much murkier, and probably uncorrelated, for an insurance company.
This rule is a necessary condition, but it’s not sufficient in finding good engineering organizations. There’s actually one (fairly commonsense) key insight I want to highlight that makes this rule much more applicable: the team you’re on is more important than the company you join, and this effect scales exponentially with the size of the company. You want to be on a team that either increases current revenue, creates a new source of revenue, or is the direction of a likely pivot for the company, to have the best opportunity for growth. Culture also comes mostly from your team (again, an effect that scales exponentially with company size), and how much you mesh with team and company culture has an outsized impact on your work performance and promotability.
Teams Matter More Than Companies
So, onwards to my first point. In any engineering organization larger than 100 people, the team you’re on is central in determining both your experience and your potential for learning and advancement in the company. Different teams are granted more resources, and in larger companies, they’re almost like different companies.
Lets explore this idea more with an example with a company I have personal experience with: Yelp (I worked at Yelp during summer 2016). Yelp’s main revenue stream is selling advertising to businesses, so they show up higher in the results for related searches in nearby locations. This is achieved primarily through an army of salespeople distributed across the US and Europe that pitch to local businesses to advertise on Yelp to drive more traffic to them.
Then, most of Yelp’s revenue is sales-based. Engineering isn’t central to this at all, and that’s pretty true for my experience at the company: most engineering work is maintainence based, and because performance, in terms of throughput or latency, isn’t a primary concern, a lot of interesting work is eliminated. There aren’t many resources expended on improving many of the existing systems, and half the company runs on code written in 2009.
There is, however, one engineering group that’s centrally important to Yelp. Yelp’s primary competitive advantage is the quality of its reviews. Google has tried competing with them, and while Google owns the search results page and and the search engine, people are still drawn to Yelp. Why? Because Google’s reviews are garbage and its ratings are bogus. To maintain rating quality, Yelp has the Data Mining and Spam Prevention teams, which perform arguably the most important engineering work at Yelp: keeping up the quality of Yelp’s reviews. That’s an example of a team you want to work for, and indeed, if I were to do Yelp again, I’d angle to get on that team.
And this goes back to my first point: the most important things you can do to vet an engineering department is to understand the company’s revenue. Understand where it comes from, what a company’s largest costs are, what future roadblocks will be, what direction it’s heading in, and from there, decide where in the company you want to go.
It doesn’t directly have to be about revenue either. In 2007, if I gave you an offer to Amazon, and asked your team preference, what would you say? The right answer is Amazon Web Services (AWS). Why? AWS certainly wasn’t the massive money-generator it is now, but the writing was on the wall. It already had 180k developers signed up, it was hiring very quickly, and there were a ton of websites moving over to it. If you were actually in this position in 2008, then by choosing AWS, you could’ve massively accelerated your career growth (and worked on some really cool stuff), just by understanding the company and its future (look up Matt Wood [who, incidentally, just gave a pretty cool talk at Structure last week]: his career path basically follows this path, though slightly delayed).
Teams Create Culture
And this leads to my second point: your team creates your culture, and this culture is the primary determinant of your experience at the company.
Companies like to maintain the myth of a unified engineering culture that’s dictated from the top-down, especially in founder-led startups, which in many ways behave like cults (ahem Airbnb ahem). But this, in my experience, isn’t true. Yes, some themes are shared company-wide, like, for example, Facebook’s “move fast and break things:” features are legitimately pushed faster there than most other companies of similar size, but mostly, teams dictate their own cultures.
The team you’re on determines who your manager is, the people you work with, the systems you build/maintain, the way your time is spent (what project is your manager prioritizing? when are you on-call? how do we deal with technical debt? etc.), and how your performance is judged. In most companies, managers and senior engineers have a lot of latitude in deciding every single one of these for their teams, and so, as a newly-graduated junior engineer, your entire life is determined by your team.
If your team stack-ranks, the team atmosphere will be of competition and fear, you’ll probably hate your life, and you’ll change jobs within a year. Meanwhile, if they evaluate you on the impact you had on the projects you work on, without a competitive aspect, your team will feel collaborative, friendly, and you’ll enjoy your work. Fun fact: both of these systems exists on teams at Amazon, again exemplifying on how different teams are in a company, and how much culture depends on your team.
Similarly, if you’re on a team that’s upwardly mobile in the company, it’ll show in the culture. People will have more chances to have an impact, so there’ll be more passion and enjoyment in the work. The culture will feel collaborative because friendliness is incentivized. People won’t fight over interesting work, and no one will be left on something shitty. The overarching culture and mission of the company won’t feel shallow and false, and people will be genuinely happy about work. A properly run team breeds a supportive culture that meshes with technical challenges, and creates good work environment.
So, after all that, what’s the answer? Where should you work? What should you look for?
Well, there’s three parts to this. First, you need to decide what you’re optimizing for. Do you want a high learning curve? High salary? Potential advancement? Laid-back? A very niche problem area? Based on this, you need to find companies that you believe align with what you’re optimizing for. This is done through searching Google, word of mouth, career fairs, recruiting events, hackathons, Angellist, etc.
Then, you interview, and eventually, you should receive a few offers. If you decided what you were optimizing for first, each offer should be from a company you’re reasonably familiar with, and you’d be alright working for.
Then, for every offer, go set up a phone call with a manager at that company (which is a reasonable request any recruiter would happily comply with), and learn as much as you can about team placement/selection, interesting projects both in that manager’s team and company-wide, and the teams currently in the company. Combine that with an in-depth look at the company’s revenue, potential roadblocks for their current product and business model, areas you think they should grow into, and, from what knowledge you gained from talking to that manager, create your own picture of what teams are growing and seem upwardly mobile. Find out, of these teams, which ones have work you’re interested in, talk to engineers on these teams to get some perspective on the culture, and push to be placed the team that has work interesting to you, a culture you’d do well in, and is upwardly mobile in the organization. Trade off between these factors at your discretion.
Then just choose the offer that has the largest overlap between what you’re optimizing for, the type of work you’re interested in, the work the team you’d be placed on does, how important that work is, and how much you like the team and its culture.
This sounds like a lot of work, and it is! The job selection process doesn’t stop with interviews; it continues until you finally accept, and every stage is equally as important. Your first job is one of the most important decisions of your career: it’s definitely worth making the most informed choice you can.
There are a few asides I want to go through here, because people talk about them a lot, and they’re important concerns.
Where Should I Apply?
This is a fantastic question, and it’s worth investigating. Choosing your applications is important first so you don’t waste effort on companies you’ll never take, and second, so you end up with offers you end up wanting. If you really study for your interviews, and practice a lot, you’ll never end up in the situation of having no offers (we’re very lucky this is true), so it’s not really worth considering this case. Then, you should only apply to companies that fit what you’re optimizing for.
I wanted a smaller-sized company that would offer a lot of opportunity for growth, so if you’re similar, this list from Wealthfront is a pretty good place to start. I disagree with some of their methodology: in particular, I don’t believe that exceeding 300 million in revenue disqualifies a company from being a great place to learn (Snapchat, Airbnb, and Pinterest all defy this restriction, and I think they’re all still fantastic places to be), but it’s a good list nonetheless.
Of the companies I applied to and interviewed for, these are the ones I liked the most:
(Someone’s going to say these are mostly well-known west coast companies, and they are. I did say I was biased in the beginning, and I’m still biased now, and I can’t very well write an article based on my own experiences and yet somehow transcend my biases. The point is, however, that the principles endure, even if my examples are biased and incorrect for you).
Does Size Matter?
(It’s funny: I’m usually asking this question in a very different situation.)
Well, yes and no. Larger companies let you focus on very niche specializations, and they allow you to work on products at a scale you won’t find at startups. For example, if you wnat to build large-scale distributed systems optimized for availability, go work at Amazon Web Services: you won’t find that at a smaller company. But at a smaller company you can invent processes yourself; you can build things entirely on your own, from the ground-up, and that’s rewarding in itself.
There’s no right or wrong answer; you can learn a lot at any size. This question is actually more about risk: earlier-stage companies are much riskier propositions, and have a real chance of failure. Google’s failure, meanwhile, probably means the heath-death of the universe. If you can stomach more risk, and are comfortable with the tradeoffs a smaller company offers (less hard cash, less mentorship, equity), then it’s worth a shot.
Equity and Early-Career Gambles
Another thing I personally thought about a lot was the value of private equity. My final decision was between a public company and a private company, and the private one offered a lot of private RSUs as part of its offer.
First, while private equity isn’t worthless, don’t take it at face value, and don’t consider every pre-IPO company as your fast-track to millionairehood. As this exceptional article says, startups usually don’t pay off financially. In a job market like this, so tilted in favor of engineers, choosing a startup is a legitimate financial risk, and it should be taken with care. Like everything else in this article, just make sure you understand the tradeoffs. This is the time in your life to take a risk, and depending on what you value, it might be worth it.