After leaving Meta recently, I decided it was finally time to start looking for a job again. It's been quite an experience doing it amid a recession and layoffs (I have thankfully been quite lucky). I thought I'd share how I approached the job hunt as a few people had asked for advice.
When I told people about leaving a job without anything lined up.
Note: As always, this is just one person's experience. I'm sharing this in the hopes that this proves helpful for someone else in a similar situation. I've tried to keep the advice generally applicable, but it's most suited towards senior-ish software engineers with industry experience and a pre-existing network and less likely to apply to new grads. I was also not in a huge rush and had the luxury to be picky in the search (and was very lucky due to many other factors). If you need a job urgently, this might not be the best advice.
How it went down
I started looking in mid/late September and wrapped things up by mid-December. Here's a rough timeline:
- September: Thinking about applying (and letting my network know I'm looking), coming up with a plan, some initial exploratory calls, and interview prep
- October: More exploratory calls, some phone screens/initial rounds, interview prep, and a break for a vacation before the actual interviews
- November: Interviews all day erryday (for the first 3 weeks), then a break + follow-up calls/receiving offers
- December: Receiving offers, follow up-calls, negotiating, and deciding.
My goal through the process was to find a place I'd be happy learning and growing for at least 4-5 years, and discover what type of work I wanted to do next (e.g. nonprofit, big company, small company, different industries, management vs engineering, etc). So, throughout this process, I applied to a lot more places than I would have done. But, hey, as a candidate, we get to interview companies just as much as they interview us, so I decided to use this opportunity accordingly. In terms of companies. A rough count of the numbers below:
- There were ~35 companies I tracked on my list, of which I applied to 27:
- I applied online to 14 places, of those I only heard back from 6.
- I used referrals to get help applying at 9 companies. I heard back from all of these. Referrals really mattered in terms of getting a response!
- I generally get a lot of recruiter spam - but I started paying attention now. I accepted 4 of the reach outs, 2 of which went pretty far.
- I dropped out of the process at 4 companies during the exploratory stage, 3 had no roles open/fille their openings early on in the process, and I dropped out of the process at 3 places after deciding it wasn't a good fit after a few interviews.
- I completed full interview loops at 13 companies and received 11 offers. I'm glad I got the rejections I did - it was clear there wasn't a mutual match.
In the future, I likely won't apply as much. Depending on your needs you might have to apply to a similar amount of companies but I don't recommend going through interview loops at this many companies unless you're actively exploring. At the same time, since nerves really get to me, calming myself down by lowering the stakes (if I messed up with one company, it's ok, I am applying to a lot of others) really helps since you feel less stressed in each interview.
Before starting a job hunt, think about what you want to get out of the process. All desires are valid - it's just that optimizing for "I want to find the best job and I'm willing to wait" is very different from "I need a job ASAP to pay the bills, anything that pays more than $X works". So think about that and be honest with yourself so that you get what you're looking for.
I didn't know what I wanted from my next job (just that I wanted to stay there a while and grow myself), so I explicitly set a goal to explore and learn. And set aside a bunch of time to think through my criteria and what I wanted. This also meant more aggressive searching and sourcing of companies to apply to (via my network, and online), rather than applying to every possible opening.
I also felt quite underprepared so I budgeted a bunch of time to practice and make sure I was interview ready - this included planning out which weeks I'd do what, so I could book interviews accordingly - and in particular, schedule my highest priority / riskiest interviews roughly in the middle so I'd go in with some practice but not be super worn out.
These are deeply personal - there's no one right answer to "is this the right opportunity for me?". But it's important to have your criteria known beforehand (feel free to refine them during the process) so that you can evaluate each opportunity fairly. Think about what you want in your life and your career.
For me, the criteria were a mix of the following (importance factors left out for brevity):
- Company/role: what the company does (and what is its growth trajectory), what the org does, the role I'm interviewing for, and how my work ties to the mission, etc
- Team/Culture/People: how the company culture is, how my (future) co-workers are, diversity, etc
- Personal: growth opportunities for me, work-life balance/PTO, remote vs hybrid, compensation, how excited I am for the role, etc
Once I had these written down, I kept a spreadsheet for each company I applied to so that I could make sure to get enough data for each of my questions/criteria throughout the process.
Finding companies to apply to
This isn't easy when starting out in the industry, unfortunately. But if you've been working for a few years, you likely have a network you can lean on. Ask your coworkers/friends what they like about their current roles and which places they'd recommend. I was lucky to have worked with some excellent people in my past role so companies with people I knew and liked working with immediately shot to the top of the list.
Since that suffers from selection bias, though, I did scour LinkedIn and Twitter (if you're working in security, infosec twitter - now migrated to Mastodon mostly - has a lot of great leads) for open roles. Hacker News does great whoishiring threads every month (like this one from this week) that I scoured to get an idea of what's out there.
Like it or not, preparing your resume is an important part of the process. There are a few main things here:
- Getting past the initial filters - you need to ensure there's enough info for the hiring team to know you're worth having an initial conversation with
- Showcasing your strengths - if you want to get a better role than your current one, you have to play up your strengths and highlight your best work.
This is an art, not a science. In particular, it helps to customize your resume for each role you're applying to, depending on what the job posting is looking for. Some general tips (from mistakes I've seen and made):
- Focus less on what you did. Lots of resumes are full of "I built X using Y technology". Instead, focus on the impact of your work: how much revenue did it bring in? how did it help the company/org achieve its goals? You want to show that you can bring value to the place you're applying to and operate at a higher level
- Talk about your role: Lots of people can write code to build a feature. Can you go above and beyond and lead a project? Mentor others? Drive collaborations? Make that clear in your resume, and highlight what you did.
- Sell yourself: Highlight the projects you're most proud of. Focus on the highest scope projects (largest impact, most engineers/users affected, etc). I generally hate bragging but if there is one time to brag, it's during an interview.
Applying itself is thankfully fairly standardized in a lot of places. You'll apply online, submitting your resume and filling out some standard fields - or you'll ask for a referral, where someone puts in a (hopefully good) word for you, and then you get a link to the form. Then a recruiter will set up a call to ask more about you, determine if there's a mutual fit, and then schedule a screening interview. If that goes well, you'll likely have a full panel interview (4-6 interviews), potentially across multiple days.
There were only a few companies that had a different process in my experience (some had takehomes, or a highly async process, etc) - and they stood out positively in my experience.
Treating prep seriously, like a job, really helped. I would get down and carve out a few hours a day for prep instead of playing them totally adhoc. There are a few types of interviews worth preparing for - most places will have some combination of these (and the initial screen will likely cover a bit of each).
Ah, the dreaded coding interview. Unfortunately, these will happen for most places you interview at, especially for FAANG roles. There's no way around these except for practice. I spent a good amount of time on LeetCode just going over a lot of questions, trying my hand at solving them, and then reading through the other solutions. All in all, I'd say I did about ~60 or so questions (on the lower side).
Here are a few tips I found helpful when practicing leetcode:
- Don't worry about doing all the questions (there are way too many) - do go over questions from companies you're planning to interview at, though
- Focus on topics - e.g. do a few tree questions, a few greedy algorithm questions, etc. You'll most likely face an unfamiliar problem in the interview and the most useful thing you can do is to be ready to quickly slot it into "ah, I can use a tree here" and then apply familiar techniques.
- Take it seriously. When I started, I'd just do the question leisurely and try to learn, look things up, etc. That didn't help much when it came to a real interview setting. So, try to time yourself, and approach it like you would a real interview, including testing.
- For the interview itself: think out loud (the interviewer can't read your mind), talk through what you are thinking, and get buy-in on the approach before coding. Watch for hints! And, lastly, remember to test your code thoroughly - look at what you wrote, not what you think you wrote.
System design interviews
These seem quite intimidating, especially if you've never done them before (I never had!). The way they are structured is both a plus and a minus. A friend told me "you can't really prepare for these" and it's quite true honestly. If you don't have exposure to how large-scale systems are designed, you will struggle as a lot of the concepts are different.
Even if you're familiar with them, though, designing stuff in an interview setting is a different beast. I found it quite helpful to go over examples (Alex Xu's system design book came in really handy) to get an idea of the types of things that come up in an interview. And there are guides you can find on leetcode that go over the basic structure of these interviews (watching some videos on Youtube really helps!) so you can follow the pattern and make sure you cover everything.
- Write down a timesheet and list of things to cover and reference that as you interview. I followed this one.
- Your interviewer is your friend: ask them if you're on the right track or if you should focus on something else, etc
- Focus on breadth and painting the high-level picture first, go into details where asked
- Write down important numbers, draw out a picture, etc - so you don't forget where you are in the conversation
- ASK QUESTIONS. Make sure you understand who's using the system, what the requirements are, etc. Don't jump into solving things upfront.
Behavioral interview prep
Depending on where you interview, this might be called a behavioral interview, a culture fit interview, a career interview, etc. Naming aside, they have one thing in common: you'll be expected to talk about your past experiences in some depth, with the interviewer leading the discussion. These are hard to prep for (you don't know what will be asked!) but knowing what to expect really helps. Here's how I approached it:
- Pick examples to help you shine: Focus on "the biggest" conflict, "the most impactful" project, etc. These interviews often determine what level you're hired at, and you want to show you can handle complex issues. Go over your proudest career moments, recall them, and write down some quick notes so you don't forget the details
- Keep it short. For every question, spend at most 45-60 seconds answering it. The interviewer will have a lot of material to cover, so just answer the question to the point, don't add too much extra detail, and offer to elaborate if needed. If you elaborate too much on every answer, you won't be able to convey your best impression.
- Focus on the STAR method. For each thing, explain the Situation, what the Task at hand was, what Action you took, and what the Result was. Make your role in whatever happened clear.
Depending on where you apply, there might be other types of interviews thrown in. It's totally fine (and expected!) that you might need help and would ask for a rubric or an explanation of what the interview process is like. Just take them as you get them.
For example, I got a few security interviews (code review/bug finding/web application security) that I was totally unprepared for - they turned out ok, because I was able to ask for help and get close enough with answers. Hopefully, that strategy works out - and if it doesn't, you might be able to see if the job is a good fit or not (it might not be if they're focusing on something you don't have experience in!).
When in interview mode
Alright, you've prepared, you've set up interviews, and now it's the dreaded interview day. Here's how you can make it go better for you.
- Focus on your physical self: make sure you've gotten enough sleep, have food ready to go for lunch, and have breaks between the interviews if possible. If the interviewer asks if you need a minute at the start, and you do - please take it. At a higher level, if you're interviewing across multiple companies, try to have a half day/day between sets of interviews.
- Don't stress out. Nerves can make or break an interview. Failing an interview is not a negative judgment of who you are - it's just a performance in a highly artificial setting. If you lower the stakes for yourself, you'll find yourself performing better.
- Feel free to ask for help or a hint if you're stuck. It's okay! I did that a bunch rather than waste time and have the interviewer write me off.
- Learn from yourself. I kept detailed notes of every question I was asked and the responses I gave so that I could debrief myself at the end of the day and do better the next day. This is easy to do when you're remote (and hard to do in person) so take advantage of it while you can!
- Ask for clear expectations at the start of the interview, if not provided - e.g. for a coding interview, ask about how much they expect you to cover, whether you need to write working code or pseudocode, etc.
Fact finding & decision making
Throughout the process, you're interviewing companies too, to find the right fit. Refer back to your criteria list to make sure you've gotten enough information for each company. I found it quite helpful to ask each interviewer a few questions from my list at the end of each interview to make sure I had everything covered. If you haven't, feel free to reach out to the recruiter or hiring manager for a follow-up - they'd be quite happy to meet to sell you on the role even further.
In my case, after the first few interviews, I realized I needed to update my criteria so I went back and redid everything - and then had a bunch of follow-ups to ask places.
If you're not sure about which questions to ask, this one is a great list.
Note that you will likely be under pressure to decide early on (companies will push for this). So make sure your criteria are ready and you have the info you need. Or be willing to push back hard to get more time to decide.
Experiences across companies
Since I was exploring, I got to talk to a wide set of people across a variety of companies doing wildly different things. Though a lot of processes were quite standard (phone screen, coding+behavioral+design+manager interview), each place had its quirks, good, and bad. Here's some stuff that I did not expect/really liked/learned through the process:
- Recruiters matter a lot. A great recruiter makes a world of a difference as a candidate - there were a few that went above and beyond, helping me with extra prep calls, answering all of my questions, and being flexible whenever I needed a change. On the flip side, a bad recruiter can be very off-putting, especially when it comes to things like ignoring communication preferences or ghosting you (I had a particularly bad experience there).
- Relatedly, candidate experience matters a lot. A few companies sent doordash/ubereats gift cards instead of the lunch they'd normally provide in an in-person interview setting, and it helped save mental energy for the interviews
- Unique interview experiences stand out! There were a bunch, but the most memorable ones include:
- fly.io had an asynchronous process. The take-home was a great way to learn about the company culture, and I really loved that they delivered feedback and gave me a chance to improve my take-home before submitting it.
- Akita had an interesting 90-minute coding challenge where I had to work on a real-world problem and build a useful feature - beyond just coding, I got to learn about the domain and exercise problem-solving skills.
- Felt had a work-day exercise where (for an EM role) I got to have two 1:1s with members of the team (like I would on the job) and then debrief afterward with the interviewers to give suggestions. It was very refreshingly different and interesting.
- The interview setup and experience tell you a lot about the company and what they value. Pay attention to the questions they ask and the people you meet. As an example, interviewing at CZI was really positive for me: I got to see exactly how passionate everyone was about the mission and how they got people from all backgrounds to work there (it was the most diverse interview panel I had).
Hindsight bias & lessons learned
With hindsight bias, I definitely learned a lot and would do things differently next time. Hopefully, you can learn from these:
- There are a lot of good jobs out there, and not enough of "me". It's still a candidate's market for now, so use that to your advantage. Companies are looking to hire, and despite hiring freezes a lot of great companies are still growing.
- Core skills matter a lot - you have to be good at what you do. In the same vein, at the senior levels, it's less about pure technical depth (unless you're going for a very specialized position) and more about "soft" skills: how you lead a team, how you work with people, etc. This is good and bad: but helps for interviews as you can apply for a broad set of roles.
- In hindsight I wouldn't have applied to as many roles as I did - but hey, I wanted to explore. Interviewing for 6-7 hours 4-5 days/week for 3 weeks straight got a bit much, and my calendar was so full that rescheduling things became a nightmare. I had a couple of days with 6 interviews with 5 different companies and I do not recommend that experience.
- Don't overdo the leetcode: I felt like I prepared all the "hard" questions while I mostly got asked "easy" or "medium" ones. That would definitely have cut down on prep time.
- Learn about stock compensation/all the various forms of equity. I had to scramble to learn these while making my decision and in hindsight, I should have learnt about this stuff earlier.
- References: A surprising number of companies asked for references. I'd probably have prepared better for this rather than bother busy people at the last minute as I did. Make sure you're prepared for this.
Job hunting can be stressful and take a long time. But there are a lot of resources and prep material and you'll eventually land a good role.
As always, please let me know if you have any feedback/comments or if there's any way I can help!