Today’s industry is so full of companies and startups who imagine a perfect world where a nervous candidate comes into the interview, answers a few clever coding challenges and then ultimately ends up the award-winning hire that will surely implement the high-class and exclusive algorithm that will bring the company into a new era of probability.
Most startups or winding projects have zero users and are a glimmer of the successful business they might wind up being some day. But we’re still romanticizing the idea that programming riddles will magically be the best benchmark for hiring, even though using a magic algorithm is very rarely the cause for any given startup’s success.
There is such a large gap between what gets asked in interviews and what get’s done in the gigs daily grind, that I wonder how a company or startup makes a profit from their product(s).
I’m a full-stack engineer. I have a formal CS background and I like building things for the web, and am slowly getting better at it. But I feel I am losing my passion for my craft, due to the constant exhaustive learning and pivoting I must do to get myself a decent entry level gig. Not even once in the last few months that I’ve been on-and-off interviews have I ever seen anything remotely close to what I know and have prepared for.
For example, a job description says I need to know Java, at a junior level of course. I study that and google junior level interview questions. However, when I go interview, they either treat me like I am a senior level developer who has created world class apps, or, asks me algorithmic questions that do almost exclusively focus on weird algorithmic approaches to problems that don’t exist in the real world. Then the next week later I get an email saying that I was great, but they are looking for a more experienced developer. It’s frustrating… How am I supposed to know all of this, when I’m a fresh grad?
| Interviewer: Here is a white board. How would you write this method to this operation?
| Me: writes it in a few lines using pythons built in functions.
| Interviewer: Great! Now, what if I can’t use Pythons standard library? Imagine the
| input file is very large (250gb+) of numbers and you have to do this in 0(log(n)/h)
| running time.
| Me: Why In the right mind would I do that?
| Interviewer 2: We want a Java Developer who is great at java and SQL? Please take this test that is totally unrelated to your capabilities and the job at hand.
| Me: Why am I here…
|Interviewer 3: We want a developer who is good at SQL. Here is a statement. Create an ER Diagram.
| Me: Here you go!
|Interviewer 3: Great, Now Image this is a DB with millions of ACID transactions a day. Figure out a way to optimize the Database and queries to search faster.
| Me: Couldn’t you Index the Primary key(s)
|Interviewer: That’s correct but we still have the problem of millions of transactions being sent to the database. But now imagine the database returns over 1000 results which we need to display on a web page, and we are now running the database on multiple clusters.
| Me: Um… Do I look like a database architect to you?
Certainly there some jobs where having to be extremely performant and algorithmically “correct” are legitimate to interview against. For example, an artificial intelligence company. But look around: how many companies and startups are doing work that requires algorithmic thinking? The dirty and hurtful secret is that most companies and startups are just glorified CRUD applications, whose main objectives are transferring data back and forth while applying a sprinkle of business logic. For building CRUD apps it’s often best to find well-rounded, diverse, and motivated people. They tend to have the biggest impact and are able to wear a lot of hats. With fast changes in the web-development world, it doesn’t make sense to not to.
A hot tweet that has been often talked about is:
… we had a group called "Bar Raisers" who mainly torpedoed candidates that lacked "CS Fundamentals". We passed on so many good people.— Trek Glowacki (@trek) January 26, 2016
TLDR: Worry more about weather you’re self-selecting the wrong people into your organization.
A large problem with all of these interviews is that it creates a troubling and powerful entity that virtually assures that people who are awful at technical interviews will fail.
Algorithmic-based challenges or coding based knowledge questions typically come from the interviewer, whom in all their self-aggrandizing smugness, come up with something question they think demonstrates cleverness. The best bet is to try to solve the question with recursion, it’s like an addictive drug to interviews. If that doesn’t work at all, try doing everything in one pass, over an O(n) operation, because that extra few ms will surely demonstrate your worth to the company.
When you come at it from this perspective, you’re instantly telling your prospective co-worker that: “I have a dirty little secret, that I only know, and I want you to guess or arrive at the correct answer..”. It becomes extremely stressful because there is a correct and optimal answer.
Every project I’ve worked or built in my career has not had a straight forward and correct answer. It has been more akin to carving a statue out of marble: you have an idea of what you want to see, and you chip away at it until you come up with a possible result. You arrive at the answer, with your teammates or the help of trusty old Google. You don’t sit on a preconceived answer and direct your coworker to slug through it alone.
I strongly feel pair programming is important for some point of the interview process.
Take an hour and knock off whatever bug or feature you were going to work on together. Not happening to be doing anything interesting today? Is the bug too “boring”? Cool, then why are you working on it? If it’s representative of the real work that the candidate will face in the job, then it’s good enough to interview on. Besides, you can learn a lot from someone even in the simplest of fixes.
Build something real together. The very act of doing that entirely changes the power dynamic; I cannot stress that enough. Whereas previously you had someone struggling to find out a secret only you were initially privy to, you’re now working together on a problem neither of you has a firm answer to yet. Before it was adversarial; now it’s collaborative. It’ll put your candidate at ease, and they’ll be able to demonstrate their skillset to you much easier.
If working on a project with them isn’t your cup of tea. Why not ask them to show off their projects? It will give you a better idea their strengths and weaknesses over any test will give you.
I’ve heard and experienced so many things happening in tech interviews that are just bonkers.
You might have heard stories such as like Max Howell(the creator of homebrew) who got rejected from jobs ostensibly because he’s not a good enough developer to whiteboard out algorithms, even though he built one of the most popular tools for developers today.
I’ve interviewed for many roles as well in my day. One of them was for a Java Software Architect role this year for a well-renowned startup that was struggling to keep up with their projects getting shipped to their clients. I had a nice chat with their director and VP about their company’s situation and how they needed extra help in overhauling their client expectations and their management structure, and then when I went in for the final round of interviews for this role the interviews were done online in which I was asked unrelated questions on Data Cleansing techniques and Advanced Windows Terminal Commands. Not being able to answer them cost me the interview.
Look, I get it. Most of you managers hate interviewing someone as much as us having to be the interviewees. It takes tons of time and effort to interview someone, and most of the time you just want to get back to building stuff or doing whatever managerial stuff you do.
Making up standard questions lets you get away with doing much more with very minimal effort, that is it gives you an even measure of ability for comparison across different candidates.
But hey! Does this really select the right candidates? The skills needed for most companies – is a glorious, twisted mess of product, code, marketing, design, communication, and empathy. Don’t filter out those people by doing what a Microsoft, Facebook, Amazon or Google does. They’re big companies, and let me be the first to tell you: that isn’t you right now. You have different priorities.
It’s more work, but it makes for better companies and better hires, in my opinion. But what do I know; I failed those tests anyway.