Current State of Software Interviews

David Villarama
CodeX
Published in
6 min readMar 29, 2022

Interview Pattern, Rejections and Possible Fixes

Every so often as engineers, we have to run the interview gauntlet (over and over). It changes over years. I had to run it again recently and this is what I came up with…

Interview Pattern

  1. External Recruiter Interview — Optional. These guys work for/with you and can find them roaming the land of LinkedIn. They get paid a percentage of your initial salary when you get a job. Since they get paid only if you get a job from them, some will pressure you to accept offers or push you to interview with companies sooner than you like or companies that you are not interested in. However, they can be useful in sorting out the job market, getting more info on current salary ranges, or giving hints if they already have already dealt with a company. Some small companies without internal recruiter outsource to them (it gives more credence if they have a company email). Some will help pester the companies to get interview results and feedback. Time is money and it is in their self-interest that you accept a job with lower salary than miss out on getting money completely. They will also fire you as a client if they can’t place you within a certain time frame. Be professional and nice but be wary of their motivations.
  2. Internal Recruiter Interview — They are the initial filter for a job posting. If they let you through, then they are your best friends. In some way, their reputation is on the line if they keep on allowing candidates who do not get accepted. Once they allow you through, they are on your team and they want you to succeed. Ask them about the interview process or for some helpful hints on the next interviews. However once rejected, you sadly are no longer bffs. They will ghost you after the initial rejected message (at least it seems that you do get a rejected message these days and no longer simply ghosted).
  3. First Technical Interview — This is your first possible future peer. They are tasked with making sure you can write code. This is a hygiene test. You need to understand a problem and write code in 30–45 minutes. They say they just want to how you think and how well you work with the interviewer. In my experience, if you struggle with the question, you are out. Know your Leetcode. The interviewer also studied their Leetcode. They have experienced the pain of studying for this interview only skill, so at minimum you should have experienced the same pain as well.
  4. Homework — Some companies ask you do to homework. Homework is made up problem to showcase your skills. This is closer to real life coding with your own environment, tools and the internet. However, you need to find and spend 3–5 hours of your own valuable free time working on homework.
  5. Virtual On-Site Super Interview Day — Interview with 3–5 people. A mix of behavioral and more technical interviews. Behavioral is a skill on not saying stupid things. For example, when asked, “How did you deal with an obnoxious co-worker?”. Don’t necessarily say the entire truth, and answer “I told the person to stop being obnoxious or I will kick the snot out of you”. Instead say “I took them aside and had a conversation and we resolved our problems.” (I’m just joking future employers!). Then there are more technical interviews. Same or harder than the initial tech interview. Not sure what the reasoning for these but maybe they think it’s a fluke that you passed the first technical so they have to really make sure you can write code in 30 minutes or less. There is also a system interview. The system interview is another oddity because it’s mostly about scaling. Most companies don’t deal with google size issues and most candidates don’t have experience on scaling at that level. But we have to do system design interviews because the FAANG companies do system design interviews.
  6. Waiting period. The interviewers will gather to make a decision. If they are interviewing other candidates, you’ll get compared to those. You might need to wait for another candidate to finish their final interview before they get back to you. So just wait. It would be nice to get updates. Yes, that would be nice…
  7. If you get the job, then salary negotiations. If you get rejected, back to step 1 for another company.

On to Rejections

You come out of the 3-5 hour on-site interview feeling good. You think you nailed it. A day or two or a week later, you get the call or email saying how great you are but they have decided to move on without you. Some other developer is a better fit than you.

Replay Time. What happened? You go through your head and replay the entire interview interview process. Where did I make the mistake and how can I have done better? I got to admit there is a bit of anger that seeps out. I’ve been coding for 25 years and they tell me I can’t write code! And then a little self-doubt creeps in as well. Maybe I’m just not good enough…

STOP

Reality Check

  1. Most software engineers never got trained on to how interview. As a software engineer, you do not inherently know how to interview someone. You have your biases on what makes a good engineer (some call it a “gut” check). To pass an interview, you must somehow have the quality that the interviewer thinks makes up a good software engineer.
  2. A company is afraid of false positives. These are developers who are not up to snuff that gets hired. It costs a lot to train and then fire and rehire another person. Companies would rather skip out on great developers than hire a mediocre one. If you are FAANG company, you can afford to do this. If you have tons and tons of great developers knocking on your door, then keep on doing what you are doing. But if you don’t have this pipeline, maybe you need to rethink your process.
  3. Luck. The celestial objects must align correctly for you to pass an interview. If an interviewer is having a bad day or you are not in your ‘A’ game, then say goodbye to getting new employee swag from that company.

Possible Interview Fixes

  1. Train engineers to interview. We all have biases which means we tend to hire people who are similar to yourself. This leads to a lack of diversity, ageism and all other evils in our field. Some companies have been outsourcing this job to third party vendor. Initially, I was apprehensive because this is one less chance to get to know about the company from an inside developer. However, it does remove some hiring bias and you get interviewed with people that have some training. (I passed two outsourced interviews so it must be working!)
  2. How many technical interviews do you need. Two technical interviews is enough and candidates don’t have to pass both of them. As a smaller company, you also want to eliminate both false positives (people who can’t code) AND false negatives (people who can be great programmers but are bad at interviews). Find a way to hire that diamond in the rough. This is your advantage over big tech companies who can pay big $$$ but must follow a strict structure for hiring.
  3. Do you really need a system design? Just because this is what you experienced when interviewing for Google or Amazon, it does not mean this is the right interview process for every company. If you’re hiring an architect then system design makes sense, if not, why? Really why? Be honest, as a software developer, what did you do today and can that candidate do that job. If today, you had one hour to figure out how to implement a recommendation system for Spotify without any research then yeah you need a system design interview. In reality, you grabbed a story from the agile board, broke it down, worked with others and implemented that story. To me, grabbing an old story and pairing on it seems like a better way of doing technical interviews.
  4. You can set up another interview to re-evaluate a candidate on the cusp. Usually, when interviewers gather, and there is a disagreement on a candidate, one negative interview can kick a candidate out of a job. Wouldn’t it be better if you can reinterview just to settle the dispute? It’s cheaper than having to restart the process with another candidate. Nothing stops a company from going against the standard step process from above.
  5. Add an adult to the interview process. Someone who make sure the interviewers are evaluating a candidate fairly.
  6. Internal Recruiters should send updates on the evaluation process. Save the sanity of your possible future co-workers.

Fight On

In the meantime, keep on interviewing. I know a lot of great developers and we all have been rejected multiple times. Sadly it is a numbers game and luck goes to those who keep at it.

So keep your head up and good luck.

--

--

David Villarama
CodeX
Writer for

Software Doodler with 25+ years of Noodling Experience