About code interviews
Introduction
This is just an opinion, just a thought I had reading other people getting really pissed off on reddit about this. This is not a rant and this is not a complaint about current industry standards.
I’ll mention FAANG a lot but is not only: Facebook, Amazon, Apple, Netflix and Google. It’s a representation of all the companies that are considerable big to apply this process and just plain reject their candidates because of it
Interviewing is a complex thing. In my past, I dreaded this process based on the idea that someone would evaluate you and your ideas in less than an hour. As time passes my opinions about the process become more complex than a simple “it doesn’t work”.
But, as Harry Caul said on The Conversation
I’m not afraid of death…I am afraid of murder.
What I meant is that a lot of people get interviewed all the time and that represents that a lot of people don’t get a job after the process. It’s simple math.
I spent much of my professional time interviewing for PwC Labs trying to hire the best and, in the process, build an interviewing framework to make this repeatable. It ended up being a much more difficult process than I thought it would be.
Now, I understand the interview process as a system similar to three bodies, where with given and particularly normal input conditions, it is impossible to understand the influence and conclusion of the result. Trying to understand the outcome of an interview is not worthwhile, even for feedback (there are exceptional cases, of course).
It’s extremely hard to come to a common solution that applies to everyone out there. For someone out there this could be easy, for others could be extremely hard. Doing an interview framework to solve this could be solving our current educational system
On the nature of interviews
Interviews has different POV and interpretations, even from outsiders (your friends). You jump into one, you talk, you resolve the issues they present to you, you even enjoy the moment of talking and sharing experiences but after an hour you have a new email, an important one, saying basically “sorry but you are not good enough” (or at least it’s your interpretation)
Problem with that way of thinking it’s that interviews are quite random, quoting Nassim Taleb here, on Fooled by Randomness
No matter how sophisticated our choices, how good we are at dominating the odds, randomness will have the last word.
It makes absolutely no sense to spend any amount of mental energy trying to figure out what just happened. You can be the best in your area of expertise and not get the job or even be someone trying to apply for something you are not qualified for and get the job anyway. It works both ways.
We only think about this too much IF we don’t get the job or something bad happens in between, but if you get the job you won’t stop for a minute to understand why. So we only focus on the bad things, that’s the human mind (called negativity bias).
Outside your world
People like Carmack saying things like this in public and no one, especially within FAANG companies (because they put them on as standard), stops for a moment and says “hey, we may be doing something wrong in the process of interviewing our future employers”
source: https://twitter.com/ID_AA_Carmack/status/1494076571434590215
A very common response from code interview lovers is that code interviews are the most “known” practice to understand if a candidate is suitable or not. They claim “It just works”, but really?
source: https://www.reddit.com/r/ExperiencedDevs/comments/t60tq7/coding_interviews_are_the_worst/
I strongly disagree with this because survival bias. People who entered the FAANG world through the “ace the code” interview are the most comfortable because “it’s easy to grind and practice”. The reality behind this is that most people have a full-time job, which consumes most of their lives and even generates experiences of burnout.
One thing I always wonder is: Why in the world would someone with a full-time job and potentially a family (and social life) behind them go do coding exercises in their spare time just to have the opportunity to be interviewed by a really big company??
This is not about learning and being a self-taught developer which in their free time learn Zig. This is about having time to do it. Sitting down in a chair and spend hours of your family weekend grinding leetcode exercises.
Problems and potential alternatives
One of the most common problems is that code interviews don’t have access to your company’s domain and situation.
There are many alternatives for evaluating someone in your daily work routine that could be a good fit depending on your candidate:
- Real-time parallel programming
- Open source code review
- Explanation of the code
- Homework (be careful with this, it could be a shot in the dark)
- Simulations of real-life situations
- …
Interviews can’t be rock solid because software industry is not. Code interviews might work for now, but I believe it’s a toxic practice that does not awards those who knows the most but those who had the time to practice and grind all of those well-known algorithms.
A real world
There is an industry that benefits from the unfair conditions they place on each candidate and the FAANGs, for the most part, are fine with it.
Business behind this charge you to “train” mock interviews in order to get a job. Nefarious people like “The Tech Lead” (I won’t link any information) exist only because conditions and mystique. There are even books.
I’m not totally against this but I believe that software industry start to ramp up into a plateau of innovation and we are spending all of our capacity solving this silly problems. I can’t imagine Id Software, Apple, Paypal, etc, on their early days doing things like this rejecting candidates because they won’t know BFS algorithms. A good book about this topic is Paypal Wars to understand the nature of those companies on the beginning.
Not everyone is to blame
In the middle of this process, apart from being out of shape or whatever excuse you want to make to be comfortable with the result, there are many things that can happen:
- Cognitive Bias
- You don’t have the skills they want even you think you have. (See Dunning-Kruger effect)
- You’re over/under qualified
- They need more years of experience (even if this was proved that does not matter)
- They have already someone in sight for the position and it’s just a formality run the interview
- Your language skills could be very poor
- Awful social skills
Is the process broken?
In my opinion, it depends.
Problems start to appear when companies outside the FAANG circle start to mimic in the same way those behaviors that only work for FAANGs (because of the unique scale). This is a big problem because you’re going to be interviewed by someone who most likely doesn’t know how to reverse a binary tree. They just do what other people do where they can do a much better job just asking daily real life experiences or questions about how to read a f**king documentation.
This has happened before with microservices, where everyone jumps on the bandwagon because Netflix did it only to find out that Uber almost shot itself in the foot by just mimic what Netflix did.
For me, everyone must assess their own situation and understand the needs of the position. Be realistic. Be nice (you don’t want to be rude) and try to get the best out of a person you could work for over ten years in a single hour.
Conclusion
Personally, I don’t like to do what I don’t like to be done. Because I don’t think code interviews represent a clear picture of the candidate and I prefer to personally assess the situation, asking questions more related to real-life work experiences and particular solutions, workflows and situations where the candidate had to use his or her logic and understanding of a problem to get the best possible domain-oriented solution.
Obviously, in my free time I always dedicated myself to try to learn new things, new ways of doing the same things but I know that this is not something I can ask for others and that is why I do not expect that kind of behavior in an interview (it is a plus, of course, but it is not definitive in my assessment).
The first time I got a coding interview was for Facebook, I didn’t do my homework by reading all the books I had to read and even tried to do it in C++ (oh dear lord!). Then, a year later, I got an email to go to Silicon Valley to participate in a Hackathon in which my team and I made it to the finals. Ironic, given that I didn’t pass the coding interview at all. So my message to anyone reading this is: don’t listen to anyone, not even yourself. Apply, fail, get rejected, train, join, study, repeat, but in the meantime, don’t lose sight of yourself in this industry. You have to change your world at first, at least, and in the end, the world. Be meaningful.