My new office wardrobe

How to do Software Engineering Interviews: Notes to Interviewees

In a few days, I start my new job at Gusto as a shoe-less and title-less software engineer. I am beyond excited. Although the circumstances of my job hunt was slightly unusual (the startup that I worked for was getting acquired), the engineering interview processes were essentially the same.

In my 10+ year career as a software engineer, I have been an interviewee and interviewer more times than I can count. And to be clear, I have royally screwed up more interviews than I can count too. This time around however, I had four job offers from the five companies that I interviewed with. I did my first onsite interview on March 3rd and signed my job offer on March 24th.

After three weeks of twiddling my thumbs (aka The Post-Tiny-Startup-Recovery Process), I’ve taken some time to jot down reflections on my job hunt. The notes are divided into two mains sections: this is the first section, Notes to Interviewees. Go here for the second section, Notes to Interviewers (coming s00n).

Here are notes on my personal process to prepare for interviews. If you are preparing for interviews too, you will want to read both sections, so that you know what to expect and won’t be frazzled, as I was in some situations. If you are a person who conducts engineering interviews, you should read the Notes to Interviewers.


Don’t Panic

In my experience of talking to engineers about this process, I commonly hear things like “I NEED a new job now because my current job sucks”. To you I say: Don’t Panic. Most tech companies I know of are hiring — so try to decide what you want in a job before you start looking for one. And let’s be real, the software engineering interview process is stressful enough without you having to go through it for a company that you don’t really care about.

So ask yourself questions like: Where am I in my career? What are my five year goals for my career? What are the top three things I value in a place of work? How much money do I need/want to make? How big (or small) is my ideal company? Do I want to become a tech lead or do I want to manage people? What is a skill that I really want to learn at my next job? And more.

As a good friend advised me — come up with a framework for evaluating what you value in a job, and use that to decide where you should start the interview process.

Make a list

Yes, I make lists. Lots of lists. I love Asana so much that I have one for my personal relationship (#tmi). But seriously, make a list of companies you might like to work for, based on your answers to the above questions. I had a spreadsheet with these columns.

Next prioritize this list and pick the top five to focus on. Do this upfront research on the companies, so you can be genuinely excited about them. If possible, try to get introductions to engineers at the company. Most companies want to hire people who they think are good people, and referrals is an easy way to ensure this.

Try not to schedule your favorite company first, because there will be lots of learnings along the way. Lots of learnings.

Time

Realistically speaking, this process will take at least a month of committed effort even if you are an experienced software engineer. As you probably know, interviews are mostly based on CS fundamentals such as algorithms and data structures, and if you’ve been in industry for a while chances are good that you aren’t using binary trees or merge sort on a day-to-day basis. In that sense candidates just out of college have a head start on you because these topics are probably fresh on their brains.

See… no binary trees

At the beginning of January, I started spending an increasing amount of my spare time preparing for interviews, with March fully dedicated to the job hunt. In parallel, I had a full-time job and worked on a side project too — though my amazing business partner took on the brunt of the burden in the last month. (Side note: talk to me about time management hacks).

Study Materials

I ❤️ “The Algorithm Design Manual” by Steven Skiena, so much that when I thought I lost my first copy I bought another. I also ❤️ the website Interview Cake and happily paid for full access to the site.

At a high level there are two things you need to do: (Re)learn the fundamentals and Practice, practice, practice! The biggest problem with the Internet as it relates to this process is too-much-information. You don’t need to know about every variant of a given type of problem, but just the fundamentals. Find simple and clear resources to learn from.

Skiena does a great job on fundamentals, especially chapters 3 to 5. Interview Cake was great for practice questions. It has clear descriptions of problems, a friendly website (turns out 🍰 makes me happy!), answers to all problems in multiple languages, and code execution built into the website. Personally for me, the multiple languages feature was a major 🔑 because it reduced effort I spent translating answers to a language I was familiar with (I think in Java or JavaScript).

To me, interview-help websites with a lot of noise, especially user discussions are distracting. It is draining to sift through mostly poorly written user-generated-content to discern which ones are correct. I just want to learn stuff without having to decide if what I am learning is correct.

Study Strategy

Don’t cheat! If I’m being honest, at the beginning I’d turn right to the answers the minute I got stuck. But most of that content didn’t stick and it became more about committing to memory and less about actually understanding the problem. I found myself having to review these areas over and over again. The problems that I suffered through on my own were the ones that I truly understood. The problems get exponentially easier as you (re)learn the basics. Tip: In my experience, ~70% of questions asked by companies relate to 2D matrices and DFS using 2D matrices.

Before the interview

A few days before your interview, do a quick Google search to find out what types of questions the company likes to ask in their interviews, and make sure you review those.

Conclusion

The software engineering interview process is very much an anxiety-inducing and time-consuming process. Take steps to understand what is important to you, before you start down this process. Understand that the process will take time and focused effort. Find study materials and sources that are clear and work for you, such as they have explanations in a language that you are familiar with. Don’t cheat when you study — try to figure out the problem before you sneak at the answers. And lastly, do your research on the company a few days before the interview.

You will probably fail at some point during this process, but please don’t give up — it gets better! There is a lot more good information about how to prepare for software engineering interviews on the Interwebs.

In the end, I chose Gusto because they meet all my needs as per my personal evaluation framework. That includes a great vision, culture and opportunity for impact, not to mention that I really liked and felt inspired by the people I met there. They did a great job of explaining how my career could evolve at Gusto, and made me feel truly excited to join. Side note, they have the best “you got the job call” I have experienced.

Thanks for reading this far. Feel free to reach out if you have any thoughts, if I can help. Good luck!

Many thanks to Jayesh Sureshchandra, Alicia Liu, Dilan Dane, Brian Zotter and Derek D’Souza for thoughts and feedback on this post. And thanks to Ben Tauber for helping me shop for socks.