The real reason tech companies ask hard questions

“Academia doesn’t want too many unmotivated people to attempt medical school, so they set up a screen. Organic chemistry is the killer class, the screen that separates the doctors from the psychologists. If you can’t handle organic chemistry, well, then, you can’t go to med school.”

Seth Godin, The Dip

Companies and institutions often deliberately set the barrier of entry extremely high. Big tech companies such as Google are among the many whose interviews are notoriously difficult.

These companies ask candidates to implement, e.g., a sorting algorithm from scratch on a whiteboard or traverse a graph (usually, these are just parts of the bigger problem to be solved). Yet, a day-to-day job of a software engineer rarely requires this - if at all. There’s no reason to implement a sorting algorithm from scratch as the combined work of many intelligent people has already done it. Instead of writing 40 lines of code and re-invent the wheel, you can simply write e.g. items.sort(). Most programming languages already have a highly optimized sorting algorithm implemented.

So, many say tech interviews are broken. They argue that since the actual job does not require, e.g., implementing a sorting algorithm from scratch, they don’t have to know how it works. I.e., there’s a huge mismatch between the interview questions and the actual job.

There’s a story of an engineer whom Google didn’t hire because he couldn’t invert a binary tree even though he is the author of popular software used by many people worldwide (including the engineers at Google).

I don’t know if this particular story is true or not. Still, there certainly is a tendency for many developers with big egos to go on on a tantrum on Twitter and complain about something similar.

From what I’ve seen personally, this is how it usually goes:

“I’m an important senior engineer with N years of experience in X, Y, and Z technology, and I’m asked to do some silly computer science problem. How dare you not hire me.”

So why are candidates asked to code up things they never need to in real life? And why all this injustice?

First, these companies want software engineers who know the fundamental principles of computer science inside out. They want people who can solve complicated problems. They want people who understand how the React framework works, not just how to use it. They want engineers, not technicians.

In fact, these interviews are so effective, they also filter out some competent people.

Why and how can they let this happen?

Well, they (the big tech companies) have plenty of applicants to choose from, so if they miss out on someone awesome, plenty is waiting at the door—no big deal. The second reason is that they rather risk not hiring someone competent than hiring someone incompetent. The latter can cause a lot more damage. It’s better to have a team of 5 tens than a team of 10 tens with the addition of a couple of fives.

The second reason relates to the quote at the beginning of the article.

Why do med students have to study chemistry in-depth even though their job only requires knowing the basics? After all, they learn to become a doctor, not a chemist.

It’s the “dip.” And this is what many people don’t get. They only look at the superficial level. They can’t seem to grasp the bigger picture.

The bar in big tech companies is set so high for the same reason, it’s high in med school: so that only people who are 100% committed will get through. And both - the med school and Google - can afford it as there’s plenty of people who want to get in.

The people who end up “getting in” are the type of people who will do it whether they’re required to study organic chemistry or go through 500+ LeetCode questions and several books on data structures and algorithms, discrete math etc.

They’re the type of people who will do whatever it takes. They have their end goal in mind and understand that going through temporary pain is necessary to achieve their dreams. Few of them are huge fans of organic chemistry or algorithms, but it doesn’t matter. “If this is what I have to do, I’ll do it,” is their mindset.

Most people will give up as soon as they hit the dip - i.e., when things get tough. Therefore, it’s no wonder why constructing a dip is one of the most efficient and easiest ways to weed out the weak.

The med school is not interested in investing its resources in people who are not 100% committed to become a doctor. So is Google not interested in engineers who are unwilling to study up algorithms and data structures.

The tech interviews (aka the “dip”) are not broken at all. In fact, they work incredibly well. Imagine you’re a company, and you get to weed out all the whiners, complainers, and the uncommitted.

Sounds pretty good to me.

As Seth Godin recommends, embrace the dip. Understand why it’s there and decide to either stop and realize it’s not for you or push through and do what is necessary.

And there’s no shame in quitting if you realize it’s not for you. It’s a smart move. This particular “dip” might not be part of your life’s purpose at all.

E.g., for me, before I decided to become a software engineer, I was a lawyer. I faced a dip: should I keep grinding in a field I did not particularly like, or stop, cut my losses and switch to something I enjoy doing instead.

Honestly, I don’t understand developers who complain they have to know all this complicated computer science stuff. As for me, I want to know that stuff. I’m completely willing to learn the C language only to understand computer architecture better, even though I might never need it in my day-to-day job.

Find your dip.

Don’t complain.

Push through the dip.

K.