Advice on looking for a new software engineering job

about | archive

[ 2021-January-18 13:43 ]

I've been working professionally as a software engineer since 2006, which means I've been doing this long enough that people now ask me for advice. I've only changed jobs 3 times in my career, so I'm not sure I'm an expert. However, I decided I should write down my advice, to clarify my thinking and to efficiently share it with others. This turned out much longer than I expected, so I guess I have lots of opinions!

Know what you want

My job search often starts with a nagging feeling that something isn't quite right. My first task is to figure out more precisely what I want. You might already know, but making time to think about it helps me understand what I'm looking for. You need some criteria to decide which opportunities to pursue, and which are not for you. You need to be honest with yourself. It is totally fine if your list of desired job attributes includes things like "any job", "more money", "working fewer hours," or "a prestigious employer." The most important part is to end up with something that will make you happy, not something that impresses your friends or family.

I've never explicitly written a list down, but every time I've been looking for a job, I've had some goals. At the very beginning of my career, it was "any software job in New York." At another point, I wanted to work at a small company that was growing rapidly. It has taken time to figure out what motivates me at work, and my answers continue to change. One thing I have found useful is to cast a wide net at the beginning of the process, and talk to many friends and acquaintances about what they are working on. Having these conversations helps me understand what things I find exciting, and what things I don't.

Get help from your friends

After you have some ideas about what you are looking for, you should reach out to anyone who might be able to refer you to any company. You never know what companies your acquaintances might have connections to, unless you ask. It helps everyone to get referred to jobs. It helps the job seeker because they are more likely to get an initial interview. It helps the referrer because their peers will be inclined to return the favour in the future. It helps the company because it makes the recruiting process more efficient. Prioritize people who can give you strong referrals. The ideal is someone who has worked closely with you, and will speak highly of you.

Get at least 2-3 offers, so apply to approximately 10 places

You need more than one offer to negotiate effectively. It also makes me feel more confident about my decision to know I had other choices, and I picked the best available option. Like any other sales process, you should work backwards from your goal to figure out how many places you need to apply to. Someone I know who shared their process with me had an impressive 66% success rate at every step. This means to get 2 offers, they needed 3 interviews, and needed to apply to 5 companies. Everyone's success rate is going to differ, but this math means you need to apply to a lot of places. I think most people should expect to apply to approximately 10 places to make the numbers work, although this will vary wildly depending on the stage of your career.

Improve your resume

The point of a resume is to get the interview. The more experienced you are, the less your resume matters, since experienced candidates have less trouble getting interviews. However, it is still worth spending a few hours making your resume good, since everyone will ask for one. My resume advice:

This is basically the same way you need to describe your accomplishments to get promoted. For inspiration, I suggest reading your employer's engineering career ladder, Julia Evans on brag documents, and Will Larson on Staff Engineer Promotion Packets.

Order your interviews from least to most desirable

You should interview with the companies you are the least interested in first, so you can practice on ones that matter less. Like all skills, you will get better at interviews as you do them. You also want all your offers within a few weeks of each other, so you can evaluate and negotiate them together. This means you need to control your interview schedule. Tell the recruiters when you want your offers, and work with them to schedule interviews at an appropriate time. The best recruiters understand how the game works and will accommodate you.

Prepare for your interviews

I learned that preparing for interviews is important when we were interviewing for the acquisition of my failed startup. It had been about 8 years since I had interviewed anywhere. We were cocky. None of us prepared at all. Let's just say that first interview did not go as well as we had hoped. Afterward, we got a friend to do practice interviews. We had one 4 hour session where we were each interviewed, then we critiqued our performance. That was a great learning experience, since it is very rare that you get specific feedback about how you can improve. I also read Cracking the Coding Interview. It has good advice about the general process, but I mostly skipped the coding practice questions.

It is hard work, but the hours you spend preparing will pay off over multiple years, by allowing you to get a job you want, and to be compensated better. It is probably one of the highest leverage activities for accelerating your career. Remember that interviews are more than coding questions! Don't forget to practice behavioural questions, system design, and be prepared to answer questions about your resume. Get a friend you trust to interview you, or try one of the online services that run practice interviews. Getting specific feedback about where you can improve allows you to improve much faster than trying to figure it out on your own (which can also work). I've included some more specific interview advice at the end of this article.

Negotiate your offer

Nearly every offer can be improved, so you need to negotiate it. If you want more advice, multiple people have recommended the book Getting More, but I have not read it yet.

Specific Interview Advice: Coding

Specific Interview Advice: Design