Choosing where to work
Making the right decision about where to work can have a profound effect on one’s life. A company needs to want you to join, but you also need to want to join. I’ve had a few people ask for advice on taking a new job recently, so I thought it might be useful to others to write down my thoughts.
(This is drawn from personal experience. It isn’t gospel. Critical thinking is encouraged.)
Think of a job’s score as a weighted average of its various dimensions. The higher the score, the better the fit for the candidate. 
There are many dimensions of a job. A job’s salary and benefits, its title, what you’ll learn from the job, the people you work with, the company you work for, how your job contributes to society, the location of the job, hour flexibility, company size, work/life balance, the prospects of the company and its market, and so on. You should think about which dimensions are most important to you, and weight those dimensions the highest. Go after jobs that appear to have the best blend.
Measuring the values of the dimensions for a given job is a bit tricky. Most of this is subjective, but you can still get a qualitative feel for things. Internships help. Other approaches include talking to people at the company, hackathons, Twitter, reading news about the company, Glassdoor, LinkedIn, and VC resources (slide decks, Crunchbase, etc).
Over time, the weights on each of the dimensions will change. Someone who’s starting out in their career is likely to prioritize different dimensions than someone that has 10–15 years of experience.
Prioritize people and learning
The two dimensions that have served me well, especially early in my career, are prioritizing people and learning. People, in particular, were especially important to me early on because I came from a school with a weaker network than schools like MIT, Harvard, Waterloo, CMU, and the like. Investing early in people helped me catch up to alums from those schools, and made it easier to get my second and third jobs. Optimizing for people doesn’t just mean finding nice people to work with. It means finding people that align with your goals. Who can you learn from? Who is doing what you want to be doing? Who is going to help you five years from now?
Learning for engineers
The learning dimension is tricky for engineers. Learning can be sliced in several ways. One is what I think of as “vertical” learning. Another is “horizontal” learning. And the third is technology. Vertical learning is learning about the vertical that you’re working in: advertising, payments, security, social networking, aerospace, etc. Horizontal learning is the tier that you work in: frontend, backend, midtier, operations, embedded systems, mobile, etc. Lastly, technology learning is really about a specific stack, framework, or language: Java, Python, Docker, Hadoop, Dropwizard, Spring, Go, Flask, etc.
Most engineers only focus on one of these slices. It’s important to think about all three. It frustrates me to see people taking jobs just so they can work with Haskell, for example. This is a fine pursuit, but it’s pretty one dimensional. Think not just about the technology, but the vertical, and horizontal components of what you want to learn. Is backend payments on a Java stack what interests you, or would you rather do mobile social networking on Swift? Thinking in this way also lets you make compromises. You may have no interest in security, but it has a lot of interesting infrastructure problems, so it might be a great place to be if infrastructure interests you.
Another thing that comes up is company size. I used to have a strong opinion on this: go with the smaller company. You can grow with the company, you move faster, you’ll learn more, etc. After going from 300 people to 8000+ people at LinkedIn, and working at an 80 person startup (Intacct) and a 10,000+ person company (eBay), I am less convinced that company size matters. What matters is the company itself. What are its values and culture? How successful is it? What does its tech stack look like? Who are the people that work there?
Some large companies offer a ton of learning programs. LinkedIn, for example, offered a lot of great training, a mentorship program, weekly tech talks, InDays with talks from brilliant and interesting people, etc. If you were motivated, it was a phenomenal place to learn. Google is the same.
Big companies do tend to come with some other characteristics, though. Consider whether you are happier as a builder or a maintainer. This is a common dichotomy in the engineering world. As companies grow, they usually attract more maintainers, and fewer builders.
Bigger companies also tend to need specialists. Being a generalist or full stack engineer can be hard to do at a large company. Dabbling in other areas can be difficult, since everyone usually has a role and area that they’re responsible for. That said, these are just general observations. Some large companies are quite dynamic, and allow for some of this stuff.
Responsibility and impact
The major thing that you’re not going to get at a large company is responsibility. You’re never going to be put in a position where you could seriously jeopardize the business. With startups, you will get a lot more responsibility. Some people can learn without responsibility. They read, observe, and discuss. Others need responsibility as a way to motivate them, put pressure on them, and force them to learn.
On the subject of impact, it’s important to differentiate between the size of the work you do, and the size of its impact. An odd characteristic of larger companies is that it’s actually quite possible to have a large impact on a lot of people simply because the customer base is so large. Tweaking an A/B test and getting a 3% boost can impact a ton of people when you’re dealing with a billion human beings. The size of the tweak could be relatively small, though. Psychologically, it can be difficult to work on small or seemingly trivial work, even though it might be having a very large impact in absolute terms. You might be much happier working on a large project, even if there are fewer people using it.
A good guiding principle to help determine how to weight each dimension is to project 5 years out. What do you want to be doing? Do you want to be starting a company? Investing in real estate? Consulting? Volunteering? Going back to school? Optimize for dimensions now that will help you get to where you want to be in five years. Five years seems like a long time out, but it’s (roughly) a standard tour of duty, and not so far off as to be unreasonable.
One thing to be very careful of when plotting the future is the pursuit of too much optionality. In The Trouble with Optionality, Mihir A. Desai says:
The shortest distance between two points is reliably a straight line. If your dreams are apparent to you, pursue them. Creating optionality and buying lottery tickets are not way stations on the road to pursuing your dreamy outcomes. They are dangerous diversions that will change you.
This emphasis on creating optionality can backfire in surprising ways. Instead of enabling young people to take on risks and make choices, acquiring options becomes habitual. You can never create enough option value - and the longer you spend acquiring options, the harder it is to stop.
I highly suggest reading the whole transcript of Desai’s speech. Think very carefully about what it is that you want and why.
That’s all for now
Again, these are my thoughts on the matter. Your mileage will certainly vary.
The SparkNotes version:
- Define the most important dimensions for the job you want.
- Research companies and jobs to find those that map to your highest priority dimensions.
- Prioritizing people and learning has worked well for me.
- Consider what you want to learn.
- Think about company size in relation to your needs.
- Think five years out. Prioritize your dimensions accordingly.
 Props to Monica Rogati for the analogy.