Reflections on the Software Engineering interview process

Advice for anyone starting the software engineering job hunt

Alex Honnold practicing climbing El Capitan with a rope. Photograph: Jimmy Chin

From the time I started applying to software engineering positions to the time I accepted an offer, I experienced a month and a half of intense growth. Here are my lessons learned from this process, to hopefully make it easier for whoever is just embarking on the job hunt now.

1. The Long Haul

Probably the single most important piece of advice I received was that job hunting is a long and strenuous process, which requires mental fortitude. This is especially true about interviewing for software engineering (SWE) jobs because of the many rounds involved, and the mix of technical and behavioral types of rounds.

You’re going to get rejected from most places you apply to, over and over. You’ll get rejections from the computer algorithm that parses your resume for certain keywords. You’ll get rejections from just a single human glance at your resume or cover letter. You’ll get rejections after the initial call with a recruiter. You’ll get rejections after you’ve done a technical interview, a take-home project, or even–and this is the one that stings the most–after you’ve gotten to the final round.

These rejections have no bearing on either your aptitude for success in a SWE position, nor on your ability to ultimately land a SWE job. The story you tell yourself in response to these rejections is incredibly important.

What matters is that you take it all in stride, and you see yourself getting better and stronger each time, more prepared for each subsequent round of applications. And that’s not just wishful thinking. In my case, it was fundamentally true.

By the time I reached the last few companies I interviewed with, I had gotten much better at telling my narrative, at answering system design questions and behavioral questions, at asking the right questions, at building impressive take-home projects, and at solving problems during technical interviews.

Heck, I became a better software engineer as a result of the interview process.

This was partly because of my focus on learning from each process, but it also was a testament to the generally productive way companies had structured their interview process–which is apparently a lot better now than it used to be.

If you’re reading this and you’re from a company I interviewed with: thank you for that.

This actually leads us to the next point.

2. Think of each experience as a stepping stone

Several times, the experience I gained while working on the take-home project or more generally the interview process of a company that I ended up being rejected at became directly useful in the very next round of companies I interviewed with.

It felt like each experience was exactly what I needed to learn in order to do better on the next round.

For example, one company’s take-home project required me to build a command-line interface (CLI) that takes a user-given filename as a flag, reads data from that file, pings an API with data obtained from the file to retrieve more data, merges the two data sets, and outputs another CSV file containing a massaged version of the combined data. The kicker was that we also had to build a complete test suite with as much coverage as possible.

This experience gave me the opportunity to review testing, and to think about 1) what makes testing useful, 2) how to design good tests, and 3) the difference between designing good unit tests and good integration tests. Having had this experience fresh in my mind, I was better prepared when other subsequent companies asked me about my approach to testing.

Another company’s take-home project involved building a server that could send updates to the client in real-time, as it received asynchronous responses from a predefined set of API calls. This was a great opportunity to review server-sent events v.s. websockets, RESTful APIs, dealing with asynchronous code, and to get yet more practice building modular software that is clean, simple, organized, reusable, testable, and easy to follow. That experience proved useful when in later technical interviews I had to write object-oriented code with classes and/or talk about how I’d design a particular system.

3. Be your most friendly self

Another important piece of advice I received along the way was to not underestimate the importance of soft skills throughout this process. After all, you are dealing with people–and people like to be around people they like.

So your first and foremost duty during the entire process is to be likable. Yes, people tend to like folks who are competent–so by all means, review and practice the technical things you need to review and practice.

But competence is not the only thing that makes you likable. In fact, it’s actually relatively lower on the list. Think about your close circle of friends–why do you enjoy their company? To me, having a great sense of humor is high up on there. You’ve got to be able to laugh about awkward situations, about yourself, about life, and about mistakes–whether yours or others'–because the ability to find humor in the many frustrating parts of life is a critical skill.

We like people who have empathy and that we can trust. We want to be around folks who believe in teamwork, in building each other up, and in being reliable–folks who are on time, kind, grateful, flexible, and understanding. We want to be around people who are positive, humble, and curious.

There are days when you won’t feel like being all of the above, or perhaps even any of the above. Once the rejections start rolling in, it will be difficult to not have those days every now and then. But if you happen to feel that way on a day you’ve scheduled an interview, you’ve got to muster up as much positivity as you can.

I’ve found that visualization and/or meditation helps to calm my mind and regain that sense of peace and positivity. Exercise or just going for a walk around the block can also work wonders. Do whatever works for you.

The people on the other side of the interview table would rather meet someone who ends up getting the job than yet another wasted effort for them, too. So they would rather you succeed and do well. Remember that ultimately they’re on your side–even if they’re asking you hard questions. It’s just part of the due diligence they’ve got to do. After all, you’d want colleagues who’ve been properly vetted, too.

4. Support system

Another bit of important advice, which builds on all three points above, is to make sure you’ve got a healthy support system to get you through this process.

I don’t believe in the strong man approach to things, or the idea of the self-made millionaire or billionaire. Everyone, to a more significant degree than we’d perhaps like to admit, is a product of their environment–their upbringing, their family, and their social and professional network.

Yes, only you can ultimately provide and muster the perseverance you’ll need to keep at it during tough days. But having a healthy network that you can rely on makes it a lot easier to do that.

This support network can be just the difference you need to get you back on your feet and feeling hopeful again instead of mellowing and spiraling down into a negative state.

If we think of the job application process as climbing El Capitan, think of your support network as a rope that’s there to catch you if and when you slip.

Yes, I know there’s a documentary about a dude that did this without any supportive gear. But this guy had been training for years on this exact mountain–with ropes. That’s literally all he did for years. If you’re a newbie at this, please don’t go free solo.

What does having a support system mean in practice? For me, it meant several things.

First, I was part of a cohort of Capstone participants who were all going through this interview process at the same time, and checking in together once a week. This meant that we were all in it together, and we could share horror stories, experiences, and successes, and have good laughs together, knowing we were not the only ones facing rejections, and knowing that others were rooting for us too.

Another aspect of this is doing the things you love to do, with the people you love. Throughout the interview process, I kept playing board games and computer games with my wife and our friends, and I did non-interview-related things that gave me joy, like writing blog posts where I translated Persian music and poetry.

This helped me remember that no matter how poorly things were going on the interview side, there are still other aspects of our life that are pleasant, treasurable, and that fall under my control.

This support network can be helpful to not only get you through the rejections, but to also better prepare you for each interview process. For example, I reached out to everyone I knew in the SWE field, asking them for advice. I asked experienced engineers what questions they like to ask during interviews. I asked engineering managers for stories of candidates who impressed them and why, and other stories of things candidates did that left a bad impression. I asked for feedback on my resume.

There’s value in both the content that you learn in this process, but also in getting you to be more familiar with the context around the SWE interview process itself. The more you understand that you are just one of hundreds of thousands of people who’ve gone through this process, the more you can feel that you can do it too. Part of the trick is convincing your own brain that you know what you’re doing–and learning as much about the context is one way to do that.

Finally, I was incredibly fortunate in that I could focus on the interview process for 100% of my time. I did not need to have another fulltime job, because my wife could handle our bills.

If you are going through this process while also working fulltime, or while caring for family members–or both–I bow down and send you my deep respect. I don’t know how you do it.

Several in my cohort are parents with younger children, and they’ve been successful at it (so I know it can be done), but I would not be able to offer personal advice on how. I have only read that atomic habits might help (i.e. consistently working on stuff every day, even if for just an hour).

5. Catchy resume, cover letter, and website

Lastly–and this one is probably the most self-evident–all your static and online media need to stand out and tell a cohesive story about you.

First, your resume needs to be catchy–both in the presentation of information, and the information itself.

For the presentation, there are many resources you can use to build sharp resumes. I started with a free template from FlowCV, but then I used to build my own (also a free tool).

Everyone knows this general resume content advice: keep a clean look, use action verbs, share what you actually did & what stack you used, show quantifiable results when possible, etc.

In terms of the information itself, the more challenging the projects you worked on, the better. For me, the Fjord Framework was front and center. During interviews, I actually tried to redirect conversation as much as possible to my experience building Fjord, because of the technical depth and richness there.

My cover letters were all tailored to the company I was applying to. Because I actually applied to relatively fewer companies, I could afford to spend more time on each one. Just make sure to review the cover letters again and again before submitting. Despite doing this, I still made mistakes a couple times, where a link was broken or incorrect, or something was misspelled.

I was lucky in that I already had an ongoing website when I began applying to jobs. If you don’t, make one. If possible, blog about technical things. Build your online presence. Establish your credibility by showcasing what you know.

Parting words

These were the few bits of advice I gained and learned from this month and a half of interviewing. The experience is a roller coaster of emotions. Sometimes you feel like you’re on top of the world. Other times you’re questioning whether you’ll ever land a job.

It’s important to manage your emotions well–and that’s why remembering all these points is key:

  1. It’s going to be a long process with many rejections
  2. Think of each interview experience as a learning opportunity
  3. Remember to be positive and friendly
  4. Build and reach out to your support network
  5. Have a catchy print & online presence

When it was all said and done, I had applied to about 30 companies, participated in the interview process of 11 companies (reaching various stages at each), and received 3 job offers.

When compared to more typical experiences though, this funnel seems very fortunate.

The general advice I’ve heard is to apply to 100 companies per month. Because I was getting a high response rate on each application I sent, however, I felt that I did not need to send as many–and I focused instead more on preparation. Your mileage may vary–adjust accordingly.

I hope this has been helpful. If you have other good advice, feedback, or questions, please don’t hesitate to comment below.

Vahid Dejwakh
Vahid Dejwakh
Software Engineer at Microsoft;
Co-Creator of the Fjord Framework

Vahid writes about interesting ideas at the intersection of software, system design, data, philosophy, psychology, policy, and business. He enjoys coffee and has a palate for spicy and diverse foods.

comments powered by Disqus