How I got my job: as a software engineerFeatured
Two years ago I applied for software engineering jobs at eleven different companies and got offers from nine of them. Despite receiving offers from several big-name companies including Google and Facebook, I decided to accept an offer from a database software startup called Cockroach Labs, which is where I still work today (with no regrets!). Prior to joining Cockroach Labs, I worked for four years and went to grad school for five. I was finishing the last year of my PhD in computer science at MIT when I started applying for jobs. This post describes ten factors that I think made my job search successful, and hopefully will help you have similar success. Much of this advice is specific to software engineers, but some of it may be useful for anyone applying to jobs at tech companies.1. Go to grad schoolAlthough I ultimately got offers because I did well in the interviews, having an advanced degree in computer science from a top school like MIT made a huge difference in getting the interviews in the first place. I expected that graduate school would teach me valuable skills and help me grow as a person, but one thing I didn’t anticipate was how attractive the degree made me to tech companies. Perhaps this point is a bit controversial. You might be thinking, why do I need a fancy degree for companies to notice me? Well, you don’t. If you’re already a solid programmer and have good work experience, grad school is probably not necessary. But if you find that your resume is constantly being passed over by recruiters, I can attest that a PhD from a place like MIT will certainly get more companies to notice you. But getting noticed also shouldn’t be the only reason to go to grad school. Masters degrees can often be expensive and may not actually differentiate your application very much from the rest of the field. A PhD will make you a more distinctive candidate and won’t leave you in debt, but it also takes more time and carries an opportunity cost in terms of what you could have been earning in industry during that time.You should go to grad school if you want to gain a deeper knowledge of the foundations of computer science or if you like the idea of conducting original research. But you’ll also gain skills that are invaluable in any career you choose. Grad school taught me how to be a better speaker and writer, how to attack ill-specified problems, and how to accept criticism. It also helped me build a network of highly intelligent and well-respected people who could make introductions and vouch for me when I needed a reference.2. Use your connectionsSpeaking of building your network, it’s much easier to get a job at a company when you know someone who works there, or you know someone who knows someone who works there. Companies are much more willing to take a risk on hiring someone if they have a reference from someone they trust. Unless you have an unusually outstanding resume, applying without such a connection is like sending your resume into a black hole. Numerous studies have shown that recruiters spend less than 10 seconds looking at most resumes, and often are biased by factors that have nothing to do with a candidate’s ability to to the job, such as their name or gender .3. Learn to say noIf you’re lucky, you’ll have the same (good) problem I had, which is that I had many companies asking me to apply for a job. But at a certain point it’s no longer productive to keep sending in applications. If a company has explicitly invited you to apply, they will almost certainly give you an interview. Interviews are exhausting and take a lot of time and energy. If you already have enough options on your plate, don’t add more unless you think the company has something different to offer than your other interviews. 4. Have an open mindIt’s important to learn to say no, but at the same time, be sure to go into the job market with an open mind. If you would have asked me at the beginning of my job application process where I expected to end up, I would not have said Cockroach Labs. But I decided to apply anyway, and as I learned more about Cockroach Labs through the interview process, I realized that it was actually a great fit. If I had declined to interview because I thought I was more likely to end up at a place like Google, I would have missed out on a great opportunity.5. Make your requirements clearBefore agreeing to interview at a company, make sure the company understands any special requirements you have. I needed to stay in Boston while my fiancé finished his postdoc, but I applied to several companies that were based in other states. I made it very clear from the beginning that I’d be working from Boston, so there were no surprises. Some companies were not willing to consider remote work, but to my surprise, it was not a deal-breaker for most of them. It was better that I was up-front with my need to work remotely than spring it on companies after I had an offer in hand. 6. Practice programming interviewsSo now you have your interviews lined up; congrats! This is the point where your resume and connections will no longer help you. Nearly all tech companies require that you pass several coding interviews to get a software engineering role, and the only way to do well on these interviews is to study and practice. Whatever day-do-day programming you’re doing at your current job or school is probably very different from what you’ll be expected to know during coding interviews.There are several excellent books and websites to help you prepare. I personally can recommend Cracking the Coding Interview by Gayle Laakmann McDowell and Elements of Programming interviews by Adnan Aziz. I like these books because they cover a good variety of data structures and algorithms that often come up in interviews, and they have many good practice problems with solutions. 7. Talk to lots of peopleNow that you’ve finished the interviews, the offers are starting to roll in! Now the roles are reversed, and you are the one that gets to interview the companies to figure out where you’ll fit best. Every company that gave you an offer really wants you to join; they’ve put in a lot of effort interviewing you, and possibly paid for you to travel to interview on-site. Take advantage of your position of power and use it to get as much information as you can. Ask to talk to the people you’ll be working with and anyone else who can give you insight into what it will be like to work for the company. At Cockroach Labs, for example, I had phone conversations with one of the engineers who interviewed me, the CEO, and one of the board members who was also an investor in the company. Hearing what inspired each of them to join or invest in the company helped increase my confidence in my decision to join.8. NegotiateYou should also use your position of power to negotiate the terms of your offers so that you feel good about accepting an offer from whichever company you like best. I don’t recommend trying to get the highest offer possible by playing companies off one another; that’s a recipe for burning bridges. However, if a company you would like to consider gave a much lower offer than other companies, you should let them know. It’s likely they just didn’t realize what an appropriate amount would be, and will increase it once they know what other companies have offered. This turned out to be the case with one of the larger companies I interviewed with.I only negotiated with Cockroach Labs once I felt fairly certain I was going to accept their offer. Since the starting salary and stock options were based on level and start date, I asked detailed questions about the different levels to confirm that I had been placed in the correct one. As it turned out, I was on the edge between two levels, and was assigned to the lower one due to an oversight. By pointing out that I had sufficient experience for the higher level, I was able to easily negotiate a bump to that level, with a corresponding bump in salary and stock options.9. Make a list of pros and consNow you need to make the final decision about which offer to accept. Maybe you already know which company you like best, but if you’re like me, then you are having a hard time deciding. I was lucky to have many great options, so it was not immediately clear to me which option was best. I found it helpful to make a spreadsheet with rows for all the offers I was considering, and columns for various pros and cons at each company. The process of thinking through my priorities and writing down how each company scored helped me feel confident in my decision to choose Cockroach Labs. In the end I think it was still a gut feeling, but identifying as many objective measures as I could to support the decision made it an easier choice.10. Don’t burn bridgesAfter deciding to accept the offer from Cockroach Labs, I spent several hours composing emails to explain my decision to everyone who had been a key contact at each of the companies where I had offers. I emphasized that it was a tough decision, and I hoped to keep the door open at their company in case things changed in the future. Almost everyone sent a gracious reply, saying they were disappointed I wasn’t joining them, but wished me all the best. Although writing the emails was a difficult and time-consuming process, it was worth it to know that I hadn’t burned any bridges. https://www.theladders.com/career-advice/you-only-get-6-seconds-of-fame-make-it-count NBER Working Paper No. 9873 https://zety.com/work-life/resume-biasI hope the ideas in this post are useful to those of you who are currently on the job market or are considering your next move. Please feel free to leave comments if you have any questions or want to share your own experience related to any of these points. Otherwise, best of luck with your job search!Rebecca Taft is a software engineer at Cockroach Labs and a member of the SQL Query Optimizer team. Prior to joining Cockroach Labs, she was a graduate student at MIT, where she worked with Professor Michael Stonebraker researching distributed database elasticity and muti-tenancy. Before graduate school, she worked for two years as an IT consultant at Exeter Group and for two years as a software engineer at Bloomberg LP. Rebecca holds a B.S. in Physics from Yale University and an M.S. and Ph.D. in Computer Science from MIT. In her free time, she enjoys rowing on Boston's Charles River and enjoying the great outdoors.