I've taken and given a lot of interviews. I had been part of recruitment processes in many organisation. That allowed me to observe the overall hiring process from both side of the table. This post is a compilation of my observations, and my opinion on how a hiring process should be for engineers. I had been lucky so far with hiring the right people. Maybe I was lucky, or maybe I improved my hiring tactics to find out the right people from experience. And this post might help you find the right people for your organisation too.
Also, before reading this, Please note that this post is a pure Opinion, There's no right or wrong here. Everything here is my opinion derived from my experience, backed by logics valid in my opinion. Also this only applies when you are hiring engineers, specifically, Software engineers. You might have a completely different experience, and that's fine.
Writing a good job opening post:
Every hiring process starts with a job opening post. Either to be published in a hiring platform, or to be posted in Social media. Or maybe both. Wherever it gets published, keep it small if you want the candidate to actually read the job post.
Keep the list of required skills as specific as possible. Please remember this works as a filter, ask for too much, and perfectly fit candidates won't apply. Ask for too less and you will receive a lot of irrelevant application. If it's good to have additional skills for the applicant, Keep it in a separate "Good to have" list. If you are purely looking for skills, Make having a CS degree optional. I've seen many non CS grads with amazing software engineering skills. Also mention that the years of experience can be flexible for very skilled individuals. You'll be surprised at how good some less experienced engineers are. I've seen it and I was amazed.
Mention a salary range to attract the right crowd. Money is the biggest motivating factor in a salaried job and it's fair to let the candidates know what to expect. Also include clear application instruction. If you are using a recruiting platform please ensure that it supports Resume imports or Linkedin/Indeed imports. I've seen platforms that present you with a huge form and you have to fill it with everything that's already in your resume. Many good applicant bounce off from this stage.
Ask for a PDF resume. Because formats like word, Pages or Open document will often break because of font, layout and compatibility issues. Also, converting to PDF shouldn't be a problem for an aspiring software engineer. Additionally, this will work as a filter to know who did and didn't read the job post carefully.
Add a last date of application, specially if your job post is going to be published in social media. Otherwise, you might get a job application even six month after publishing the job post. This happens in real life, trust me!
Shortlisting candidates
Let an engineer shortlist the candidates. Or best hire a HR with CS background. maybe under a fancy designation like "Engineering talent specialist". Not every CS person wants to write code, you'll find many good engineers interested in people science and HR.
Shortlist based on skillset and previous experiences. A good resume might tell a lot about a person, but sometimes many good engineers have sloppy resumes. I'd suggest taking the time and not get deceived by looks.
Also, whenever you reject a candidate in whatever stage of this process, write back a constructive positive message. If you can't offer someone a job, the least you can do is avoid letting them feel down. And don't share any feedback on anything, be generic. In fact, this is illegal in many places.
Coding interview:
Smile. Introduce yourself properly. Let the candidates introduce themselves. Talk like a friend. Everyone gets nervous during an interview. To find the best in a person, you have to make sure the overall environment is friendly.
If you ask a question, and the candidate is in the right track with the answer, help them out. Everybody forgets things under stress, don't hold it against them.
Keep the camera on and request the candidate to keep the camera on if the interview is online. Think of it like this, if it was an on-site interview, they had to show their face anyways. Also, expressions tells a thousand things.keeping the camera on also helps detect cheating. Like searching the answer to your question in a different device. It happened multiple times while I took interviews, Unfortunately.
Many prefer live problem solving with screen sharing. This is good. Just make sure the problem is very easy to communicate and is not too complex. The goal is to find out the candidate's approach to a problem, and their way of solving it. A ten minute problem solving session can tell a lot about an engineer. Also try to keep the problem relevant to the type of work they will be hired for. And please avoid common problems.
Ask questions about things that the candidate might have to encounter according to their experience. For example, you might ask an API developer about CORS.
Plan the session ahead of time and keep it as short as possible. You don't want to waste too much time for yourself and the candidate. Also, people get exhausted. If you observe carefully, you won't even need a long time to know someone. Also if a candidate is not up to the mark, don't cut them off from an ongoing conversation. Slowly take the conversation to an end. Because again, Don't let people feel down.
Coding assignment
The number of steps in an interview should co-relate with the expected level of seniority. If you are not hiring for anything above mid level engineer, maybe skip the coding assignment. Hiring juniors or associates should be a simpler process.
If you do give candidates coding assignment, make sure it's not too much time consuming, Mention the requirements as clearly as possible. Also make sure the problem is not too obvious to just search for a matching implementation. Always ask to use a VCS like git. And while checking, always go through the commits. Git never lies.
Also don't add bonus points. Just don't. It's a competition, all the candidates will end up doing the bonus points anyway, so why bother? If you want something just clearly mention it in the requirements. Again, keep the requirements simple, you don't want to waste a lot of time for a lot of people just to hire one person, It's unfair.
Making an offer
A lot of people might disagree, but if you have budget, make an offer slightly higher than the expected salary. At least don't offer lower than expected. And you should not bargain if you have the budget. Salary is an investment, and if you invest on the right person, and if a few hundred dollars make them happier, this will go a long way and come back with great return. Trust me, it always does. Also make sure to include company policies in the contract, let them know clearly what they are getting into.
There's a lot more to discuss about this, and a lot more areas to cover. this post is a work in progress and will be updated gradually.