Software Engineering Interview Checklist : Preparation

Reading Time : 10 minutes

Day 4/30.

Disclaimer : I am not claiming that what I write in this post is the absolute truth, that all interviews look the same or ask the same questions. This is a culmination of my experience through all the interviews I have given. Please take all of the notes below with a pinch of salt but I hope they help you like they helped me in the process. :)

Welcome to Part 2/5 (I think there will be 5, but we’ll see how that goes - we can only be sure once we are closer to the end 😉) If you missed the first one, I will link it here because that post will give you an overview of what my intention with this series is.

day4-2.jpg

The TLDR; version : Applying for jobs should not be your first step in the interview process. The only reason you will have a call-back from companies that you apply to is if you have a good resume! However, since the companies usually hire for a role on a rolling basis, the quicker you interview - the higher your chances of landing the offer letter in your inbox. ⏩ But there’s the catch - you need to be prepared for the technical interviews before you apply so that you can schedule the interviews one after the other, and ASAP. Last thing, preparing for the actual technical “meat” of interviews is something that students consider to be a solitary process. However, the final interview involves at least one more person (sometimes more), so for higher chances of success, you will be better off if you practice with more people!

A common trend that I see in how students approach interviews is that they think applying for the job is the first step. Well, I was one of those students too when I started. However, the advantage that I had was that I am enrolled in a Masters Degree which has 2 extra semesters (more on that in another post). That means I started school in Fall 2018 but was not expected to do any internships until Spring 2020 - i.e. Summer 2019 was a trial season for me. It is safe to say that I was lucky enough to experiment on myself and learn from my mistakes 🤦🏻‍♀️ but that is not the case for most students when they start their Masters degree in the United States. The norm is that school starts in August-September by which time the internship applications for the next summer are already in full swing. The only thing left to do is apply, and that’s how the cycle starts off wrong. I am hoping that this post will help a lot of students applying for full-time interviews, as well as any of you who will be starting school in Fall 2020 (it is time to start!). I was also lucky that I have friends and family around me who had been through this process before me and they helped me out, but having a post I could go back to would have been nice (just saying!).

1️⃣ Preparing for the technical interview

I cannot stress this enough : start preparing early! Software Engineering Interviews can get tedious and the only thing that can save you from the misery is being consistent and giving enough time to the learning process. The advantage of being in this field is that most companies have very similar interviewing pipelines, a certain permutation or combination of the following rounds 🔄:

  1. Coding

  2. Algorithm Knowledge

  3. Systems Design

  4. Any other rounds specific to the company / role at the company ( for eg. for one of the companies I applied to, I had to send in a video recording explaining a project that I worked on. Another was a Machine Learning algorithm design interview.)

It is safe to say that most internship interviews though will only focus on 1 & 2.

  1. Don’t use LeetCode to prepare for technical interviews

    I am starting this post with an unpopular opinion but hear me out - solving 500 questions on LeetCode is not the most effective way of preparing for these rounds. There is a time and place for LeetCode, and it is not in the starting stages of your preparation. If you start with LeetCode, you will be conditioned to start associating particular solutions with exact specific questions. However, if you spend some time understanding the algorithms that you can use to solve the questions, you can actually train yourself to recycle these algorithms to solve all 500 of those questions.

    If you go and filter all the questions on LeetCode by algorithm, and then go see their solutions, you’ll notice that all of them are solved in different ways. However, say you filtered by DFS and you know the pseudocode for DFS, you should be able to use a small variation of that pseudocode to solve all of those questions.

  2. Take a strong foundational course in Data Structures and Algorithms

    If not LeetCode, then what? The only way to know the pseudocode for that DFS problem I was talking about above is if you have a strong foundation of Data Structures and Algorithms. This is a core course in most universities for a reason - and lucky for us, this is also one of the only courses you need to clear a coding interview. You’re lucky if you have a great professor at school, and if not, I always go back to MIT OCW’s Intro to Algorithms course. There is also a graduate version, 6.042 J, which you can do if 6.006 is too easy for you.

  3. Research the role you are aiming for

    And this is for the 4th kind of interview rounds - you may have another design (object oriented or systems) round or a math round (I had to prepare both for Microsoft) , and I will repeat the same thing here - it is so important to go back to the basics. The courses that you take at school are not only for the GPA or requirements towards a diploma - they can really help you be ready for the next stage in your career if only you can plan in advance.

As you can now imagine - this is a lot of preparation. And that is why you need to start in advance. If you wait for that interview call, you will have less than 2 weeks in most cases to prepare yourself and I will leave that up to you to decide if that is enough for you.

2️⃣ Getting your resume ready

The work that is required to make a good resume does not get as much limelight as it should, in my honest opinion. Truth be told, I have more iterations and versions of my resume than I would like to admit. But thinking back, I don’t believe there is any shame in that. The reason I got all of those interviews and then, the specific teams that I wanted to work in was because of that single sheet of resume that I uploaded on the first day. 🤯 That puts things so much more into perspective. Resume writing is a skill, and one that one needs to build. There are no certifications that can help you do that, only trial and error. But error in these competitive times is almost fatal so the next best thing is getting feedback.

Don’t be afraid of rejection from your peers. Send your resume out to as many people as you can in your network (one reason why having a network is so important - more coming up in a separate detailed post on reaching out). Everyone is different and will scan your resume differently. In this process, you will get lots of different kinds of feedback - and now you can use your intuition and judgement to pick and choose what you would like to change in your resume.

Most companies nowadays use automatic resume trackers / scanners because the number of applicants is so high. Rather than waiting for feedback from your applications (“I got a rejection, there must be something wrong with my resume” / “I haven’t got a call back yet, maybe I should change something before I apply to the next company”), you can reduce the number of iterations and failed attempts (and losing out on potential employers) by starting this feedback loop way in advance with people around you - professors, peers, classmates, friends, seniors.. the list goes on.

The end goal is to have one generic copy of your resume ready which has been prepared such that it demonstrates all of your skills, and other people can see that. You can now tweak this according to the company you are applying to and the qualifications that they are looking for.

3️⃣ Practice Practice Practice

  1. This is the time for LeetCode 🙄 I told you up there, I am not one of the people against that website. I love it myself - I just don’t think it is an effective source for the first stages of your preparation. The advantage of using LeetCode, whether you love it or hate it, is that it has formats of questions most often used by tech companies in coding rounds. So getting practice will only help you! The trick is to build a skill that can help you decode - given this problem, what are the algorithms in my “toolbox” that I can use to solve this problem. Once you have practiced it long enough (and trust me, it does not take 500 questions), technical interviews will not be so dreadful. If I had to give you my own example, I have not even touched 200 questions on LeetCode myself and I think I did pretty well in my interviews. The other source that people like to use is Cracking the Coding Interview. I have that book, I think it is great, I just have never been able to use it myself. I like the interactive interface that LeetCode offers - this is a personal choice. If you like that book, feel free to go ahead and use it :)

    The point that I am trying so hard to make here is that your preparation needs to be systematic : foundations first, practice of questions next. Imagine you didn’t know how the addition operation works and you kept trying to decipher why 3+2 = 5 and 54+23 = 77 and so on 500 times until you finally understand what is happening. Compare that to first learning the addition, and then practicing a few questions to only make your concepts stronger. Geddit?

    Free tip, take it or leave it (it is actually an opinion, yours might be different and I am okay with that): GeeksForGeeks has better solutions than LeetCode. So if you’re using the latter to practice and get stuck on a question, a simple google search can take you to the explanation of that exact same (or very similar) question on GFG, which might help you understand it more.

  2. The other thing to practice is interviewing with people! I have seen so many students taking studying for interviews as a solitary preparation. If you are someone who is more productive alone, then sure. Study for them alone. But actual interviews will have at least one more person, if not more and it is imperative that you have practiced giving the interview to one other person (and not just your monitor). Technical Interviews are not just about writing the perfect code and making sure it compiles, you will also have to explain your thought process and why you are doing what you are doing. In some interviews, the talking counts more than the doing. Sometimes if you are running out of time and can’t finish the code, but can explain what your intentions are, you might still get away and clear that round. I will go back to the same thing that I said is important for your resume : feedback. We are all scared of failure and letting someone else know what our flaws are, but better a friend/peer than than the interviewer. Right? Getting feedback on whether you are able to explain your thought process and how you’re doing as an interviewee is important in the preparation process. This is also the feedback that you will not get if you don’t clear the interview. You will never know why you didn’t clear it or what actually went wrong (most companies will avoid giving feedback because of legal ramifications).

    So grab a trustworthy friend and practice on the phone, in person or on a video call, whichever format your interview is actually going to be in (usually it is one of the three but given the times we are living in we might actually be moving towards all remote-interviews). There are also websites like interviewing.io if you don’t have anyone you can practice with (and if you are one of them, the next post in this series is for you.)

Next up : Networking and Reaching out! If you are one of the few people who has reached the end of this post, thank you! And good luck for those interviews! If you have specific questions about how I do leetcode, or give interviews, leave them below and I will prioritize them as I plan out the posts for the next few days 😄

Please leave a like & a comment if you like this post and let me know what you’d like to see on this website. It will help me make content better suited to the needs of the people visiting. If you have specific questions about any part of the process, drop them here as well!

Previous
Previous

6 Hacks to Ace Online Grad School

Next
Next

Sunday Service : It’s OK to not be OK