logo
Navigate back to the homepage

Let's refactor our Interview Process

Kamlesh Chandnani
March 30th, 2020 · 10 min read

There’s a massive disconnect between the interview process and the work we do at work on day to day basis. Interview process is one of the major problem in our industry which is broken but less often discussed or being worked upon. It’s a problem for both the candidates and the companies.

  • For candidates if the interview process is dehydrating they will lose interest half way during the process and won’t join the company because interview process also reveal the cultural aspect and the tech focus of the company.
  • For companies they often miss on the good talent because of their legacy processes.

Jobs are a two way process give and take in which the candidates looking out for a job are not just looking for another company to work for just for the sake of money, they look for the mutual relationship with the company where in they can contribute with their skills and grow themselves as well as the organisation since they are planning to invest their valuable asset i.e Time.

I was talking to a friend the other day and he was mentioning that he wants to move out of his current job but because the interview process in our industry itself is so draining that he couldn’t spare time to prepare for something which is not even useful apart from getting a job!

Why are interviews a burden? Why do we need to put extra effort and time to actually prepare for interviews? It literally feels like we need to give some sort of an exam to get an admission the only difference here is that instead of a college/high school we are trying to get an admission in a company. Does this sounds fair? What about the work we have been doing in our past? That doesn’t holds value at all? On top of that companies mention that they want candidate with “X” number of years of experience but how does that even matter if the questions are same old school questions regardless of their past experience?

Let me ask you one thing, can all the fingers on our hand do the same task? No right! Then how can you expect all the people to solve the same question which is not even applicable in real life and doesn’t justify their talent/creativity as an individual? Even If you end up hiring people like this then you’re not hiring creative talents who can do the next big thing, you’re hiring people who can just do the job because you didn’t evaluate them based on their creativity so you won’t be able to carve out a work path for them where they can perform outstandingly. This also is bad for the candidate because soon they’ll be frustrated, start preparing for the interviews(because that’s the pattern), hunt for their next job and leave your organisation. This hampers the individuals mental health as well because they get into this loop unless they find the right job. Slowly the creativity is degraded, the definition of right job goes for a toss and in the end everyhting becomes montonous.

Nitish who’s a friend recently posted this on Twitter 👇

You can read the whole thread on twitter. Here’s the TL;DR version of it. So the point I was trying to make was that the judgement should be how curious a person is to solve problems, how creatively they approach the problem, as an interviewer are you able to learn something from that or not. It’s unfair to judge the candidate whether they remember a syntax. In the end you’re trying to hire a person that you’ll enjoy working with and not a book worm who mugs up syntax but don’t know what to do with them.

So this is how a typical frontend interview process looks like(atleast in India):

  • Round#1 - Coding assignment on Hackerrank(or any other platform). Some of the sample questions in this round are:


    Sample#1 - Write a program that, given a positive integer M and a list of integers L, outputs the list element M links away from the end of the list. For this program, we will use 1-indexing. That means mth_to_last(1) is the “1st-to-last” element, or simply the last element in the list.


    Sample#2 - You are working at the cash counter at a fun-fair, and you have different types of coins available to you in infinite quantities. The value of each coin is already given. Can you determine the number of ways of making change for a particular number of units using the given types of coins? For example, if you have 4 types of coins, and the value of each type is given as 8,3,1,2 respectively, you can make change for 3 units in three ways: {1,1,1}, {1,2}, and {3}.

  • Round#2 - Whiteboard round. Some of the sample questions that are mostly being asked in this round:


    Sample#1 - Implement the Array.map method


    Sample#2 - Implement Promise.all


    Sample#3 - Implement a polyfill for async await


    Sample#4 - Write a program to traverse a graph


    Sample#5 - Write a program to create an n-ary tree and parse it


  • Round#3 - Design Round. Some of the sample questions that are mostly being asked in this round:


    Sample#1 - Implement a LRU cache


    Sample#2 - What does setTimeout of 0 do?


    Sample#3 - How does event loop works?


    Sample#4 - Implement debounce


    Sample#5 - Implement throttling


    Sample#6 - Implement a clone of react


    Sample#7 - Implement trello board


  • Round#4 - If the candidate somehow reaches this round after struggling and crossing all the above hurdles the HR comes in and asks what is your current CTC. 🤦‍♂

So my question to you is what do you gain out of this interview process? How does this help you justify candidates knowledge? All the questions above can easily be found on google or stack overflow. What if the candidate has been asked the same question in previous interview where they didn’t clear that but they mugged up and came for an interview with you where they were able to answer/solve it correctly? Everything seems transactional with the above process. If you know this then you’re qualified else you’re not.

Solution?

We all follow the process which were set by people years ago. Why can’t we form a new process? Imagine that some parts of our codebase have become legacy and the code has become very hacky and patchy which is making it impossible to scale so what do we do in such scenario? Refactor!

Refactor is not always for codebase it can also be applied to processes. Since our interview process has become legacy where it’s not scalable anymore and all of us are kind of applying patches to make it work even though we are not comfortable with it. What if we take the same analogy and refactor our interview process?

How to refactor?

While there could be multiple ways we can fix this, I’ll just share some ideas that I have been playing around with about how we can fix this(and these are tested in production)! I call this technique as Candidate Driven Interview. Here’s how it works:

Some basic stuff:

  • Before walking into the room for the interview spend enough time to know the candidate beforehand. If you do this you often don’t have to start with a typical question “Tell me something about yourself”.
  • Interviews are a 2 way process, so ensure a good experience for both. Candidate remembers it and often prioritizes good relationships over money while switching companies.
  • Greet them well and make them comfortable. Offer water, coffee, snacks etc.

Round-1: Exploratory/Technical Discussion

  • Start this by asking the candidates to explain few(maybe last 2-3) projects they worked upon. This is different from “Tell me something about yourself”. Assuming you went through the candidate’s profile beforehand you can just ask them some specific projects that you saw on their profile.
  • Once done ask them to pick any one project that they are proud of and ask them to explain it to you. This boosts the candidates morale(as it releases dopamine in their heads) during the interview.
  • Next ask them if they were to fix/add something in their favorite project what would that be?
  • Next ask what are few things that they did in some of their projects which they think could have been implemented in a better way.

With this as an interviewer you now have sufficient information about the candidate like how much are they passionate about things they do, how much they are open for discussions, how do they respond on certain areas. This will even make the candidate confortable.

Round-2: Problem Solving and Discussion

  • This round is focussed on doing some real life problem solving discussion. This doesn’t involve DS/Algo at all. I repeat no DS/Algo.
  • Based on the previous discussions you know what projects the candidates have been worked upon if not you can have a problem at hand as well but it should be something meaningful and practical that they will be actually doing on their day job.
  • The goal here is to create an environment that a candidate will be working on a daily basis if they join your team.
  • So it works like this - the interviewer(you) become the product manager and the candidate becomes the developer and as a product manager you ask the candidate to implement a certain feature. Try to fit in the feature in one of candidates existing projects if not then you should have another problem at hand. Assuming that you managed to fit in the feature in candidates project start a discussion and ask them to walk you through their thoughts and approaches on how they’ll solve this.
  • Remember this is a discussion not the actual implementation.
  • Keep adding complexities slowly as a typical product manager would do and let the candidate help you understand their thought process

With the above method as an interviewer you now know the capabilities of a candidate, how they break the problem, how they do solutioning, how do they scope out the problem, whether they ask right set of questions, how do they communicate etc. As a candidate they get a glimpse of how their day job is gonna look like so it helps them make better decision.

Round-3: Hands-on Coding

There can be multiple variants of this round

  • Variant#1 - Basis your confidence on the previous round as an interviewer taking this one step forward you might ask the candidate to take this whole dump of discussion and implement the solution as a home assignment.

  • Variant#2 - Assume that you don’t want to keep home assignments as part of your process to reduce friction what you can do is take a small problem again a very practical for example:


    You have been given a list of images and need to show it to user. Leave it there. This opens up discussion and set of questions from candidates


    and ask them to implement it there itself. One thing to keep in mind here is that you should leave the room after giving the problem statement so the candidate feels comfortable and doesn't become conscious.
  • Variant#3 - You can take a problem that you’re working on at work narrow it down and do a pair programming. This works out great for remote interviews.

HR Round

For HRs:

  • Never ask the current CTC of the candidate. If the candidate has cleard all the rounds which means they have put in a lot of efforts and the team also want to have them on their team.
  • Ask the expectations from the candidate and then decide whether they fit in your range. If yes then perfect there’s no harm offering them what they ask and what they deserve. If no just politely ask them “X” is the highest number that we could offer as per our budget and leave it there. You’re not buying vegetables, so there’s no point of bargaining. The candidate fits the bar of your team, they bring in value, your team members like them what else do you want?
  • Embrace your own words “We don’t have salary constraints. We’re willing to pay for the right candidate”.

As an HR person If you follow the above steps believe me your offer:joining ratio will go up because this gives the glimpse of culture to the candidate before even they join the company and they would want to join your company.

For Candidates:

  • Refrain from revealing your current CTC. In U.S it’s illegal to ask such that information.
  • You deserve the best because you have put in a lot of efforts to clear the interview process, you hold the right set of skills that are commendable, you’re bringing in a lot of value for the company. So in the end your current CTC shouldn’t decide your next salary and ofcourse you shouldn’t reveal that information because it’s confidential.
  • I know it’s hard but there are multiple ways to do that. I came across this beautiful post on LinkedIn that might help and give you some tips on how to do that.

Here are some other thoughts that Sid shared on the Nitish’s post regarding the interview process 👇

So these are few solutions that could help us make the interview process better but the question is how and where to start?

Let me ask this to you, what if you want to convince someone in your company to introduce something new which is going to be impactful? For example you want to build your own Design System, you want to introduce GraphQL in your tech stack, you want to start writing your components with hooks. What do you do? You just jump into it and do your best to convince people with facts, figures and actions right? Apply the same analogy to the interview process and restructure it and let it be your next imapctful project which will help you make your hiring process better and make people to join your company without any second thoughts.

Closing Notes 📝

So I mentioned the problems that our industry is facing and few solutions that could work out but I can’t fix this for all the companies so which means all of us need to come together and fix this 🙏

What are we doing to protect ourselves and our country to fight against COVID-19? We all are co-operating and doing our part by staying at home, staying safe, taking good care of ourselves etc. which in turn is taking care of the whole country right? Similarly, we all can come together and fix the interview process in our respective companies which in turn will fix the interview process across the country. This will also help us protect each others mental health and we all can build great things together 💪

Last but not the least when I was looking out for my job later last year I was going through all this and I thought of doing an exercise. So I started giving few interviews just for the sake of understanding different companies interview process. There were few companies who crafted their interview process so well that I started working on a side project to list these companies and their interview process publicly. There were two reasons behind starting this project:

  1. Create a list of companies who can be seen as a benchmark when it comes to interview process and might become an inspiration for companies who still follow the logacy interview process.
  2. People who are looking out for their next job can utilise this and then make a wise choice what companies to work for.

You can check it out here awesomeinterviewprocess.tech

If you think your company have a great interview process and it deserves to be on the above list then please go ahead and raise a PR here. And if you think that your company wants to get listed but doesn’t qualify at the moment then don’t worry just refactor the interview process so that it makes to the list above 🙂

If you have some thoughts on the interview process and want to discuss then you can write it to me or you can DM me on Twitter

P.S. If you like this, make sure to subscribe, follow me on twitter, and share this with your friends 😀

Join the Newsletter

Subscribe to get the latest write-ups about my learnings from JavaScript, React, Design Systems and Life

No spam, pinky promise!

More articles from Kamlesh Chandnani

On Finding Jobs

Finding your next job

March 21st, 2020 · 6 min read

Improving User Experience with AMP

While browsing on mobile have you ever seen the ⚡(lightning bolt) next to a google search result? Hurrah! You’ve discovered AMP

March 16th, 2019 · 5 min read
Link to https://github.com/kamleshchandnaniLink to https://twitter.com/@_kamlesh_Link to https://www.youtube.com/playlist?list=PLpATFO7gaFGgwZRziAoScNoAUyyR_irFMLink to https://linkedin.com/in/kamleshchandnani