Hiring
If a candidate’s interview feedback is not a “HELL YES!!!”, err on the side of rejecting a good resource than hiring an average one.
Hiring is tricky. Companies that hire well, do well. Hiring encompasses a broad spectrum of things. Interviews are a part of hiring process that most engineers have to deal with. In this post, I am not going to give an exact proposal of how to do interviews, because it’s not important, neither required nor possible. If you need that, ask Google or AI. There is a tonne of text out there.
Rather, here are some tips that you must follow as rules and the next wave of employees in your company will be a class apart. If you fear that the people you hire might actually be better than you and eventually replace you then those are the people you want to hire.
If the candidate is more than 3 years of experience, hire only if he/she teaches you a thing or two. Hire people who are smarter than you on some things. This way you can introduce a variety and people with complementary skills to your organization. If you have never learned a thing or two in any interview you have conducted, then fire yourself. Either you are too smart for the place or too arrogant.
Hire proactively rather than reactively if you can afford to do so. In haste, humans make bad decisions. Good people are hard to find, so give yourself leverage to reject 20-100 people before settling for the right person. One good hire goes a long way and one bad hire goes a long way too. Read this epic essay by Paul G. on why one should keep the organization size small and talent density as high as possible.
This advice does not apply to pyramid schemes though. It is for real businesses. If you have to scale a team just because you got $200M in funding. It won't work. You can stop reading.
Interview Panel
Put socially groomed and developed introverts in the interview panel. I am being very selective here but I have my reasons. Introverts tend to be better programmers generally. Introverts speak less and observe more. They are better at judging people because of the time they have spent overthinking and observing. However, do not pick awkward or socially inept people for conducting interviews. An ideal interviewer understands psychology. He/she has invested some time and brain space pondering about different types of people and what motivates them.
There should be at least one intuit in the interview panel. Intuits are people who can connect seemingly irrelevant dots in a matter of seconds. How can you find out if someone is an intuit or not? I would suggest profiling your organization through the eyes of someone who understands psychology deeply. As a fallback, in absence of such a person, use psychoanalytic tests such as Big Five, or MBTI.
What to ask
For sizing programming skills, do not ask LeetCode-type problems. That thing is dated and a flawed concept. We hire software engineers, not computer scientists or mathematicians. Many people can’t code on a whiteboard/live in front of others. Give people room to be natural. Let them google, consult references, AI, documentation, and StackOverflow. Let them work as they would be working day to day in your company. Skip live coding at all if you can manage. Give paid take-home assignments on real-world problems and see how they perform. Those problems could be issues from an old snapshot of your codebase. Review that code as you normally would. Do not give unpaid take-home assignments. You might face a big churn if you do. Many good engineers won’t complete 4-8 hours of assignments for free. They will move on unless your company offers something they can’t refuse.
The areas other than programming are trickier to nail down. Ask candidates what did they learn on their own. Measure self-initiative by figuring out if they have learned something on their own that was not a requirement of their job or academics.
Ask some open-ended questions with too little information so much so that it has no answer. See how they cross-question or arrive at the answer. What sort of assumptions do they take and the quality, thoughtfulness, and thoroughness of assumptions if they take any. It really helps to measure analytical and critical thinking skills.
Every question you ask gives you a chance to size up someone’s analytical capability. Never settle on the first answer. Build questions on the answers. Drive conversation. Explore the depth and understanding of the candidate. Figure out how they navigate uncertainty. Cross-question the answers even if they are right. If the candidate is right in some answer, sometimes, reject it and insist on the opposite and see how they react. It gives a lot about the person.
Always size communication skills. Always size analytical and critical thinking. Always size motivation, self-initiative, and learning skills. Motivation isn't only that someone is excited to work for your company. Almost everyone will tell you how excited they are to join your company or no one will deny that at least. There is usually a hidden, intrinsic and selfish motivation behind why people work for someone else. Slaving in a job is not in human nature. No amount of fake displays of motivation can hide that fact from a keen eye. Dig deeper if you can. You don't have to be hell-bent on understanding true motivations. If you do find someone whose motivations align with what you are looking for, that's a golden combo.
Always ask yourself, would you enjoy working with this human. This is a good rule of thumb. See, if you hire that person, would your work life become better.
Don’t ask “what is” questions. If most of your questions can be answered with a 10-second Google search, change your questions. Not because someone might be googling it but because those are not good questions, to begin with. If you can’t think of other questions. You need automation, AI, or a bot for the job, not a human.
Don’t let the candidates confuse you. Especially for senior positions, interviews tend to become subjective. Maintain objectivity. Find conciseness of speech in people. If he/she is talking randomly/too much blabber, it’s a warning sign. They might be trying to confuse you or are confused themselves. If you don’t understand something, ask again. Beware of people throwing too much technical jargon at you.
Other notes
Hire good and well-rounded people. Don’t be focused too much on either tool, tech, functional or soft skills, etc. Try to hire well-rounded people unless the job is contractual or very specific in nature. See if they have a variety of experiences. If they are in one job and tech/product for too long, it’s a warning sign. As for what makes a good professional, there is no right answer. Your ideal hire is a moving target. Moves with the position of your company or team. If interested, read up on my thoughts about professionalism.
If you sympathize with bad performers or want to hire those who made poor life and career choices, then do the world a favor. Pool all that money that you are going to pay them in wages. Divide it into half. Give half to the charity and half to your best performers. There are people far more deserving out there in the world. It will always pay the best dividends.
Referrals are big. Referrals are important. Prefer getting a referral from your employees/colleagues. However, always take interviews without any bias. Assign a credibility index to the referrer. Develop a credibility index based on the performance and value of the employees and update the index based on the people they referred. In smaller organizations, mental notes are enough. Document if necessary.
For senior and lead positions, hire through references only. It’s better if you have 90% of the information already at hand for crucial hires. 1-5 hours of the interview can’t tell that much than a referral who has spent 2-3 years working with the person. Remember the credibility index though.
Do not succumb to pressure from the HR or CEO. Some CEO might tell HR that he/she wants to hire 25 engineers in a quarter. HR’s job is to achieve that number asap. HR will push you to rethink the candidates you have rejected or try to get a yes out of you. Do not be that CEO. Do not be that HR. Do not be that engineer who succumbs to this. Sometimes, you have to succumb, but face as much music as possible and don’t settle for less. For the greater good. Send them this post or the essay by Paul G.
After each hire evaluate how you did and adjust. If you hired someone and you are not satisfied with your purchase, reflect on what went wrong and what not to do next time.
No matter what, no one can make the perfect hire 100% of the time. If you have made a wrong hire, give them a chance to improve. If they don't let them go. In the long term, this is a win-win for the company and the person being laid-off. Hiring effectively is more about firing efficiently. We need to normalize firing. The world will be more productive in general and humans... alive.
Hire slow, fire fast.
This post is from a series of related posts about software engineering. It is part of an attempt to write a book in public. I seek your feedback. Raise your opinion. Share with people who can benefit from it. Contribute in the comments section, on social media, over a cup of coffee, or however you prefer. This will help me and the community tremendously.