The art of interviewing to HIRE
I have been in the industry for about 17 years now.. rest assured, I have conducted a significant number of interviews.
Plus I created my own Open Source project — The Graph Cache project. So I found this cartoon apt for this article because this is still the interview experience I get when I interview with some companies. So if it’s broken for me, how broken would it be for freshers and junior engineers who are trying to make their mark in the industry..
So what do I know about conducting interviews?
I know that it is as important for me to take it seriously and give it my best shot as much as it is for the interviewee sitting on the other side of the table. Thus, over the years, I have learnt a lot about applying myself as well while conducting interviews, trying to perfect the process to make sure I make a fair assessment. But it took around 4 years for me to perfect this..
At first, I must confess, I resorted to asking bookish questions 🤢, questions designed to test the rote learning skills of the candidate rather than their application and ability to actually solve problems or work in teams. But later I learnt that this is folly and not the best approach to hire somebody who might work with you or report to you.
So, asking bookish questions can be problematic because if a person can answer 8 out of 10 questions with absolute certainty but are by nature, inflexible and unmanageable then you have hired somebody for the organization that will make your life miserable for the next few years. And eventually of those that will report to them.
— Over time, I learn that interviewing people isn’t like conducting a viva —
You don’t ask 20 questions in the hopes that the candidate will answer about 12 to 15 or more and that will be it.. and then your job as an interviewer is done.
Nope, that’s not the way it works at all.
There are personality types in this world and you need each and every one of those personality types in your teams to make them into an efficient unit.
So first, let’s dive into the specifics of these personality types because understanding the kind of person you should be hiring is imperative to conducting an interview designed to hire the best fits for your teams.
🖖 — The Genius —
These are the kind of people that will have answers to most questions you can throw at them. They are witty and sure of themselves, and sometimes even overconfident. These are the kind of people that get bored with routine, mundane work and like to work in an environment where they are constantly challenged and appreciated.
👉They might not have great people skills but they get shit done in record time
👉Get bored easily with repetitive work
👉Always know what to do when given a task and are seldom confused or lack clarity
👉Hate being micromanaged
👉Hate being patronized
🤴 — The Leaders —
These are the kind of people who have excellent people skills and have the gift of the gab. They are sweet talkers, often appearing amicable; They choose their words carefully and know what it takes to get people to do what they ask them to do. They have great ideas on
👉Creating a conducive environment for teams to achieve a high level of productivity
👉Have high EQ and IQ levels
👉Are decisive and always have direction
👉Are politically correct in what they say
👉Know what to say and when to say it
👩🎨 — The Dreamers —
These are people who have great ideas and the capability to think outside the box. They always seek to explore and experiment to see if something they thought of can be validated and implemented. They might not have the skills to actually implement what they are thinking but they are a conveyor belt of fresh ideas and love initiating conversations about new things they have explored.
👉Always have good ideas but might not be great at execution
👉Are able to come up with unique solutions to problem statements
👉Love to explore things
👉Love to talk about and evangelize what they learn or discover
👷 — The Ants —
These are the hard working people who aren’t as smart as the other 3 categories and neither are they necessarily as ambitious. They might be and they are ready to do what’s necessary to get ahead but essentially they are more than willing to do what they are told. These are the type of people who don’t mind doing mundane repetitive jobs and they are pretty good at doing those jobs.
👉They are slow and steady so should be allocated independent tasks so as not to slow down others
👉Don’t mind putting in the extra hours to compensate
👉Prefer to be told what to do rather than take initiative
👉Might not necessarily be great at communication
👉Have the most patience
🙋♀ — ️The Organizers and Motivators —
These are the kind of people who are jack of all trades but master of none. But one thing they are good at is to keep the team’s morale high by creating a genuine and jovial atmosphere. They are happy go lucky, straightforward people who can call a spade a spade and are great at organizing team building events, sports activities, festive activities etc.
👉They have great ideas to bring cohesion in the team
👉Are always straightforward and forthcoming
👉Always have an open door policy for juniors, peers and seniors
👉Form the heart and soul of the team
👉Have a good mix of leadership and dreamer qualities
🤖 — The Serious Sams —
These are people who take their job very seriously, work from 9 to 5, don’t socialize much and switch off completely once their working hours are done. These kind of people like to work on very targeted tasks with clear instructions, hate bullshit and doing things that distract them from their tasks and are perfect to finish off tasks ahead of time because its always their prerogative to finish their work on time.
👉They might not waste time in lunch or tea breaks
👉Hate working past the allocated hours
👉Prefer attention to detail rather than experimenting or trying stuff
👉Hate attending meetings as they feel like its a waste of time — unless the meeting requires their presence or adds value for them
👉Have traits of the Genius and the Ant.
Now, this isn’t an exhaustive list and no single person has just one of these personality traits. They may display these traits in varying degrees and it is your responsibility to interview in a manner that will help you ascertain a right mix for the team/teams you are hiring for.
So given that you need to get the right mix of people, how do you go about assessing the right candidate for your company?
Here are some pointers..
You need to browse through the candidate’s resume first. That is always a good starting point. You need to check for the skills they have mentioned, what projects they have worked on and what roles and responsibilities have they held. This is a great starting point and at least 5 to 7 minutes of the interview should be spent on introductions only.
People don’t understand this but the introduction is probably one of the most important aspects of an interview because based on the candidate’s introduction you are able to judge
👉 How confident they are and whether you might have to make them comfortable as they might be nervous.
👉 If they can convey information in a clear and concise manner and do a good job of introducing themselves while keeping it short. Communication is a key tenet for working in the Industry apart from skills.
👉 What’s their range of skill sets and roles — gives you an idea about their career path or what they might be interested in or what excites them.
Pointless question -
If they know about your company and what it does, that’s great. But if they don’t you shouldn’t hold it against them as they are probably interviewing with several companies and its hard to keep track of which company is doing what. Expecting candidates to know about your company is a stretch and should by no means be a parameter for passing judgement on them even before you have interviewed them. Also questions like where do you see yourself in 5 years, what are your strengths and weaknesses, etc are inane and don’t add any value.
Then you must introduce yourself by stating your role and how you contribute towards your organization. This is your opportunity to say a few words on what your organization does and what people in roles similar to yours are expected to do on a day to day basis.
Once the introductions are done,
This is where their resume becomes relevant. Now it’s time to get to know your interviewee in a professional capacity. So you can ask them these questions, or variations of these questions —
☝ ️Which has been your most challenging project and why? And how would you solve these challenges if you were given the reigns?
This question is designed to ascertain if the candidate is a Genius, Dreamer, Leader/Motivator or Ant.
— If they feel that how the project was executed is fine and they were happy to not challenge the status quo, they are probably an Ant.
— If they say they would direct/motivate people to solve the challenges in a certain manner, they are a Leader/Motivator.
— If they mention an out of the box solution, they are a Dreamer or a Genius.
— If they lean towards saying they would rather have worked independently and propose a solution immediately, it means they have already figured out the problem and the solution and know how to solve it themselves whilst not trusting others in the team to be able to help — therefore they could be a Genius.
— The Serious Sams will cut to the chase, choosing to talk about their approach to solving the problem and solving it with the path of least resistance to make sure that things got delivered on time.
☝ What is the one project or achievement that you are most proud of?
Again, this question is designed to check how good the candidate is in acknowledging theirs, as well as their team’s contribution.
— The Leader might downplay their role in the project, instead mentioning how they felt pride in working with their team and achieving their goals and ambitions as a team.
— The Ant/Serious Sams might mention how they worked very hard on the project, often burning the midnight oil to deliver on the project — so their hard work paid off and therefore they are proud.
— The Dreamer might mention how they explore and came up with a strategy to deliver the project.
— The Motivator might talk about how they got the team organized and motivated to achieve their goal.
— The Genius will harp on about their own achievements and downplay the contribution of their teams.
☝ Out of all the companies mentioned in your CV, which one did you like the most?
This is the perfect question because it is designed to check what the candidate is looking for from their role and the company they would work for. It will also give you a fairly decent idea about whether the candidate will fit into the role you are interviewing them for.
What sort of culture a candidate prefers gives some great pointers of their personality type
👉Prefers a culture conducive to openness and flexibility — Genius, Leader or Dreamer
👉Prefers stability, process and routine — Ant or Serious Sam
👉Prefers travelling, interacting and a culture conducive to networking — Leader or Motivator
👉Prefers a 9 to 5 culture with no distractions — Ant or Serious Sam
☝ What does an ideal day look like for you at the office?
This question is designed to understand the candidate’s work ethic. How they go about their day is a clear indication about how organized they are, how good they are at prioritizing things, how much they value team interactions and so on.
👉Prefers to attend meetings and talk to people — Leader or Motivator
👉Prefers to put their head down and finish their tasks — Ant or Serious Sam
👉Prefers to conceptualize, explore and research — Genius or Dreamer
☝ What is the one skill that’s missing from your resume what you want to add in the next few months or so?
This question is designed to check if the candidate keeps track of the latest advancements in tech or if they are looking to change their career path. It will give you a good idea on how to groom the candidate and allow them to pursue other areas of growth in your organization.
Essentially, with these questions, you are trying to understand the candidate’s thought process in a subtle manner. It also allows the candidate to lose their nervousness as they open up about themselves.
The Tech interviews
On countless occasions, I have seen people skim through the introductions and then directly jump into rapid Q&A or coding problems.
This does not help your cause in the least bit.
Because the candidate gets zero sense of what they are interviewing for.. The impression that they get is X company asks Y questions and then rejects me. So they never get to know what they are potentially missing out on and was it worth their time and energy. An impersonal interview is the worst way to engage interviewees, simply because then they see it like a Viva that they failed but got a question list out of.
So before you get to the tech interview, TIP 1 and 2 become important.
TIP 4 — The Coding round
Coding in an online editor or notepad —This is what people think — “This is a great way for companies to judge the candidates’ approach to problem solving “— Nope, it isn’t.
The reason such coding rounds exists is to filter out people who are good at one job and one job only — coding on problem statements they have seen or similar problems they have seen before.
Everybody knows that there is an exhaustive list of questions across several websites and there is a pattern to solve these problems. That’s great and worth learning but in my honest opinion, understanding these patterns is a good to have skill because it shows me you are good at learning patterns.
But what if I present a unique problem statement to you.. what would you do then?
So I ask the candidate to share their screen and open an IDE of their choice. I ask them to use google as much as they want.
Then I give them a problem statement I come up with myself before the interview — For eg, I have asked people to design a simple accounting application that allows a user to login using hardcoded user ids and passwords, then have basic buttons and screens to check account balances, add money to accounts and withdraw as well as generate account statements.
With this assignment, I am judging the following
👉 What questions are they asking?
👉 How does the candidate approach the solution?
👉 What do they google?
👉 How good are they at debugging?
👉 Are they able to identify what was left unsaid and work based on assumptions?
👉 Can they independently come up with a design that’s appealing and solves the problem unambiguously?
👉 Do they get flustered or impatient?
👉 How assertive/adaptive they are if I put pressure on them or give negative feedback in between?
👉 Do they conscientiously indent properly and also add documentation?
With each click of a button and line of code, I am able to judge quite a few parameters that I would never be able to judge if I asked them to invert a binary tree.
So, instead of copy pasting a question from Leetcode, I ask myself — what was the toughest problem I solved in my job as a coder. And ask questions inspired from those use cases.. E.g.
👾 Write a program to generate a random binary tree structure with a range of numbers from 1 to 5000
👾Write a program to create a random number or random hash
👾Write a program to simulate a digital clock
👾Write a program to scan text files and remove lines containing specific words
👾Write a program to search a folder or file in a given non empty directory
I actually am not too worried about whether they are actually able to find the optimized solution. What matters is
— How they debug
— What questions do they ask?
— If I give a hint, are they able to put 2 and 2 together?
— If they have an idea and want to google the syntax, I allow them, for eg on Regex or Date — time conversion, etc
— Do they get stuck and completely give up?
— What design principles or patterns do they use if any?
— Code quality and maintanability
Again, my approach is to figure out how the candidate can think on their feet when they are presented a newish challenge.
I once interviewed a candidate for a front end position; they were fully prepared for DS Algo questions, but instead I asked them to design a calculator using google. they absolutely struggled with it and gave up within minutes.
So basically, for me the coding round isn’t about judging if somebody can solve for a pattern they have seen already, because that gives me zero idea of how they actually apply themselves.
I would much rather have an honest conversation and solve the problem statement with them as it gives me an opportunity to learn as well; After all each problem can have multiple solutions and our job is to find one that’s optimal and easy to decipher.
TIP 5 — The system design round
I’ll be damned if I ask somebody to design Twitter. No, the truest way for me to judge how good a candidate is with design is to
- Pick a recent project from their CV and ask them to design the system themselves from scratch. Its’ something they have already seen and worked on; It also gives me an excellent opportunity to understand how good they are at identifying areas of improvements in systems that they have already worked on.
- Then, put your own spin on it by adding a feature to that project and asking them to design it. This is a great way to judge how good candidates are at thinking about
👉What design patterns and principles to follow
👉Actors and Sequences
👉Assumptions and Non functional requirements
👉Calculating scale and infra requirements
Essentially, it means that while they have worked on the project, they have tried to look at the bigger picture and imagined themselves in the driver seat. And this is exactly what they would be doing when working on a project for your organization. Trying to look at the bigger picture and thinking about things or suggesting things that haven’t been considered already. If your company isn’t designing Twitter, then how relevant is a question asking a candidate to design Twitter? Not at all relevant. It’s just testing whether the candidate has read up on possible implementations or followed a YouTube Video or done a course on Grokking the system design interview. Its just testing rote learning skill and nothing else.
Now finally, we get to the endgame. The final act of the interview — Q&A
It is an egregious offence to not allocate time at the end for Q&A. You absolutely must give the candidate at least 5 minutes to ask questions about the role, about the company and even better — ask for feedback directly. And this is one thing interviewers should never shy away from — giving direct feedback.
How often have we heard the line — “I will let HR know your feedback and they will communicate it to you”
That’s a cop out to say the least. If you have taken the time to interview a person it should also be your prerogative to give them feedback and their areas of improvement. This helps them prepare better for subsequent interviews and gives them a sense of closure. Instead of feeling nasty about getting rejected in the interview, they feel a sense of closure and fulfillment from the process as they know what they need to work on to do better next time.
This step in the interviewing process should be made mandatory in my honest opinion — giving feedback at the end.
Asking bookish questions should generally be avoided but sometimes if you are specifically hiring for a specialized role such as front end developer or Data Scientist then it makes sense to ask the following questions
Asking bookish questions on advanced concepts of the language they would be working on makes zero sense unless you actually use that in your project and expect people to have intimate knowledge of those areas. For eg — I never really understood why people ask about the inner workings of a friggin ConcurrentHashMap in Java interviews because after I got hired, everybody was using HashMaps and I daresay that the people who actually asked me the questions weren’t really using ConcurrentHashMaps correctly either;
Why? Because they didn’t understand when to use it! How it works, sure but when and where to apply it — Nope, they didn’t have a clue.
Instead you should pick a use case from your own project and ask the candidate to think about implementing that in the language you are interviewing on. For eg — I had worked on a use case to do Multithreaded batch processing for a million records a day in Java. So I asked — How would you implement multithreaded batch processing for 10,000 records in an hour? I don’t care if they don’t know the syntax. If they can come up with a common sense approach to solve the problem, that’s good enough. After all everybody googles on the job, what’s the point of asking Syntax and Constructs when you have sophisticated IDEs and debugging tools that you will always be using.
My approach to interviewing people is to have a meaningful and fruitful interaction with them. I have seldom given up on candidates just because they couldn’t answer 3 out of 5 questions simply because I am always trying to judge if they have some other qualities that we could use at the organization.
I have to manage them after all so I have to understand where they are coming from and where they are going.
I always make it a point to give feedback if they ask for it and I get into detailed explanations about the solutions to problems I presented.
Sometimes, I get to learn a few things from my discussions and thus the interview experience becomes a 2 way street for me — I ask questions, I try to apply myself as well and I learn something new every time I interview someone.
As I have been following interview practices for some other companies, here are some that caught my fancy —
One company actually allows people to work on Bugs in their software and raise PRs for fixes. If the work is acceptable, they get an offer otherwise they get paid for the work they did. This is an amazing idea!
A few other companies give Figma links and ask the candidates to design the app using React or Angular to judge their front end design skills. They give small application use cases — Front end, backend or full stack and allow the candidate to take a few days to work on the app and present the code. Then they conduct the interview based on the candidate’s submission. This too is a good idea!
Another company has a fairly unique way to hire people. They allow the person to work with a team in their spare time, solving smallish use cases and bugs to judge how the team felt about interacting with them and the quality of their work. They even pay the candidates for the work they did regardless of whether they get hired or not.
So, to summarize, no matter what your interview process is, if its robotic, impersonal or single focused/antagonistic then that’s the front that people see. This might not be the case as your company might have a great culture and work environment after all. But if your interview process is designed to look like a GMAT/GRE exam, then you are just hiring practitioners, not human beings that are truly capable of displaying a broad spectrum of skills and traits.