0 - Introduction
Authors: Stefano Ivancich
Academic books prepare you for fancy research, they will make you a better software engineer, but they’re not sufficient for interviews. You need to prepare with real interview questions and learn their patterns. It’s about developing a fresh algorithm, not memorizing existing problems. At most of the top tech companies (and many other companies), algorithm and coding problems form the largest component of the interview process. The interviewer is looking to evaluate your ability to solve algorithmic problems you haven’t seen before, to ask the right questions to clarify ambiguity and explain your thought process. If you are starting to feel comfortable with the interview problems, and think that you need just one or two more months, it may be a good time to start applying! Recruiters are also often pretty flexible, and once you get in contact with them (sometimes not an easy task!), they may even schedule your interviews in a month or two if you ask for some extra preparation time.
Month 1. Applying to all the companies you want, waiting for the responses, talking with the recruiters, and scheduling interviews.
Month 2. Passing phone interviews, waiting for the results, scheduling onsite interviews.
Month 3. Passing onsite interviews, waiting for the results, receiving offers, negotiating, signing the papers.
The selection process is generally a funnel composed as follows (be aware that some companies have fewer steps, some steps are easier for interns, some steps are in slightly different order, and some steps can be bypassed if you have an internal referral, or you use some “social networking” tricks):
- You search for a job position on the company website, or in an employment search engine (LinkedIn, Indeed, and so on) or you meet recruiters at Job Fairs or Recruiters contact you, and so on.
- If a recruiter contacts you don’t convince yourself that you are a strong candidate and put too much hope in that position, also if the recruiter is telling you so, because probably they are just spamming, trying to insert you in the funnel. Sometimes happens that you receive mails with errors, something that literally starts like “Hello %name%…”, because they are using a software to send thousands of emails, some of them will respond and get you inserted into the funnel.
- You fill the application in the company website with your CV and a Cover letter.
- Your application (CV) is parsed by an ATS (applicant tracking system) that converts your CV into a database record and checks if your profile matches the job description (keywords, years of experience, location, …) and gives you a score based on the parameters set by the recruiter into this software.
- This is done because nowadays it’s extremely easy to send CVs, it often happens that a candidate sends thousands of CVs, therefore a company for a single position receives 10k+ CVs and a human can’t read them all. Now companies manage the selection process with a software, they don’t physically print any CV, everything is automated as much as possible and done in front of a screen.
- To the top X profiles in the ranking is automatically sent an online assessment that can be behavioral and/or a coding test. This step may be optional, depending on the company.
- The behavioral assessment can be an IQ test, a game that understand your personality based on the decisions you’re taking, a multiple choice questionnaire, open questions (why you are a good fit for this company, tell me a time when …) or, more recently it requires you to record yourself answering those questions under 60s in websites like hirewue.com and those are later watched by a recruiter.
- The coding test usually lasts 60-90min where there are 1-3 algorithmic problems to solve in platform like hackerrank, codility or codesignal. Or they are technical questions on subjects related to the position (operative systems, databases, probability, math, …).
- Tip 1: Write down and save the code that you are writing in the online assessment because sometimes in the interview they ask to explain it in order to see if you have cheated*.
- Tip 2: Do it as soon as possible: If you postpone taking the test till the last day of the deadline, also if you ace it, probably after a couple of days you will receive an email saying that they are not considering you because they have found enough people for the final interview.This is due to the fact that the online assessment is usually on a rolling basis (i.e, once they have a required number of applicants passed the test, they are not going to consider any more candidates*)
- Finally, a human being will read your CV and (hopefully) the cover letter, but usually this is a non-technical recruiter so it’s important that you prepare a CV in a way that can easily convince this recruiter that you are a good fit for that position, if your CV is too technical you get discarded because that person do not have the background to understand it.
- Short behavioral interview (15 min) with a non-technical recruiter at the phone or zoom, where they ask you which positions you are interested in, your salary expectations, and some behavioral questions (tell me about yourself, …).
- Screening Interview: on the phone or via online video call (Skype or Zoom) consists of 1-2 coding problems that you have to solve in about 45 to 60 minutes in a shared online code editor like Coderpad, HackerRank, or even simply in the Google Docs. The bar can be just as high as it is for in-person interviews.
- This interview can also have a small part of behavioral questions or also can be completely behavioral.
- There can be 2-3 of them
- If you’re unsure whether or not the interview will be technical, ask your recruiting coordinator what position your interviewer holds (or what the interview might cover). An engineer will usually perform a technical interview.
- To make sure you study for the right stuff, ask your recruiter what to expect. Send an email on the line “Is this interview going to cover data structures and algorithms? Or will it be more focused around coding in X language.”
- After your interview, your interviewers will provide feedback in some form.
- Very few companies have a policy of not responding to candidates they reject. If you haven’t heard back from a company within 3 - 5 business days after your interview, check in (politely) with your recruiter. If your recruiter does not respond, this does not mean that you are rejected.
- Most companies get back after about a week with next steps (offer, rejection, further interviews, or just an update on the process).
- To re-apply you usually have to wait (6 months to a 1 year). Your first bad interview usually won’t affect you too much when you re-interview. Unless you behave badly, or drop out at middle or don’t show up, try to always be nice and gentle.
- To the top Y profiles that have completed successfully the online assessment is automatically sent a second one. This repeats up to 4 online assessments. Usually is just 1, some very large companies (like Amazon) give 3-4 OAs to reduce the pull of candidates.
- Take home assignment (project): this is usually done in smaller companies, NOT in big tech. And the result will be discussed in the interview with an engineer.
- It’s usually a project: CRUD API with a specific stack.
- On-site interviews: this is the final step, it consists of an entire day of 2-8 interviews behavioral, algorithmic and system design.
- In smaller companies they might ask you to pick a good project from GITHUB and run it for them during the final stage interviews.
- Interview performance + YoE = level. If you do a bad interview, you can be downleveled.
- Offer or Rejection
- Paperwork: signing, background check, criminal check, credit check, and so on.
- Team matching: sometimes even if you have the offer they don’t know where to assign you, so you have to do some extra interviews with some specific teams. This can also last 1 year (like in Google).
At the end of the interview the interviewer will make an assessment of your performance, and pass it to the HR manager. It usually based on the following:
- Analytical skills: Did you need much help solving the problem? How optimal was your solution? How long did it take you to arrive at a solution? If you had to design/ architect a new solution, did you structure the problem well and think through the tradeoffs of different decisions?
- Coding skills: Were you able to successfully translate your algorithm to reasonable code? Was it clean and well-organized? Did you think about potential errors? Did you use good style?
- Technical knowledge / Computer Science fundamentals: Do you have a strong foundation in computer science and the relevant technologies?
- Experience: Have you made good technical decisions in the past? Have you built interesting, challenging projects? Have you shown drive, initiative, and other important factors?
- Culture fit / Communication skills: Do your personality and values fit with the company and team? Did you communicate well with your interviewer?