You Are Bad at Hiring Good Engineers

I have never asked a puzzle or a trick question to find some obscure algorithmic approach. It had always been instead asking to come up with design solutions and creative implementation for real-world problems.

But when I got to the other side as a candidate, I have never been lucky — not even once. It’s always some shitty puzzle or a whiteboarding exercise about some obscure algo that no one does on a typical day job. The software industry has a long way to go to be even considered “mature”.

The famous fizzbuzz test, why make people waste their time writing a test if you can simply ask, “Are you aware of the modulo operator?” Whiteboard and coding interviews routinely ask people to re-implement some common solution or low-level data structure. This is the opposite of good engineering.

A good engineer will try to maximize productivity by using libraries to solve problems. Why would you ask a senior engineer something that a student would be better at doing it? Those are academic problems and only new-grads are ready for it. Imagine doctors and pilots being hired based on those tests rather than updated real experience.

There is no value to memorizing the details of algorithms that are not part of most systems and if ever needed, you can google in 15 seconds.

I am 10 years experienced engineer who has lead projects written in Java, Python, PHP, Javascript (Front-end) and Golang. I am also the author of relevant opensource projects about Microservices, Big data, DevOps and Fx trading. I write articles that provoke people to reflect on software development and interviewers still asking me to write code under time pressure, with somebody watching. Some of the best engineers I know would melt under those conditions. Those tests are designed to exclude good engineers.

Don’t hire based on what they can remember in an interview room! Prioritize operational experience. You don’t only need a tech team that can solve problems as they arise, you need them to be able to identify problems earlier than your customers. You need a team that can identify areas of growth and works proactively. In other words, you need problem-solving, innovation agents, efficiency improvers.

When hiring, look for the candidate who has made mistakes, participated in different challenges and spent a decent amount of time in the trenches. This is the best way to know that someone has the operational intuition needed for success.

As Steve Jobs once said, “People with passion can change the world.” And I believe that great engineers are passionate about resolving problems with technology. So if a professional has the experience and loves what he does, the performance of its sort algo has no importance for me.

Much more important than what they know is how they learn it, and how quickly. You are looking for somebody with a record of learning new skills and applying them successfully. Talk about their career path, and look for evidence of increasing responsibilities. Try to find out how engaged is your candidate with the software development industry and his view about what is to deliver quality software, then explore the extents of their expertise.

Remember when interviewing, your role is to find the straight rather than the weakness. Companies do not need rockstars individuals but strong teams.

Be the Company That Says: We Are Mentoring

Today, companies create ridiculously complicated multi-step interview processes that filter out candidates that are “not good enough.” We rarely allow candidates spoiled by shitty companies and bad influence. We forget that some candidates weren’t lucky enough to meet an inspiring mentor or work in a supportive team.

Instead of trying to predict future performance by asking tough questions and sending candidates through long circles of hell, you can hire candidates with a growth mindset and grow them.

Conclusion

Every successful founder talks about how at a certain point in a companies history, people become your best capital and your biggest asset. So be smarter when hiring and don’t treat your candidate as a machine. if you get it wrong, it can be the difference between success and failure.


Free Advanced Java Course

I am the author of the Advanced Java for adults course, this course contains advanced and not conventional lessons. In this course, you will learn to think differently from those who have a limited view of software development. I will provoke you to reflect on decisions that you take in your day to day job, which might not be the best ones. This course is for middle to senior developers and we will not teach Java language features but how to lead complex Java projects.

This course’s lectures are based on a Trading system, an opensource project hosted on my Github.