Most advice on how to interview software engineers optimises for the wrong thing: it measures how somebody performs in an interview room rather than how they would do the job. Those correlate less than anyone would like. The gap produces expensive mistakes in both directions - people who interview well and cannot deliver, and people who would have been excellent and never got the chance to show it.
The highest-return change available is to make at least one stage resemble the work. Give a small, self-contained problem in a real codebase, let the candidate use their own editor and search the internet, and talk through the result afterwards. What you learn is what you needed to know: how they read unfamiliar code, what they do when a requirement is ambiguous, whether they test anything without being told to, and how they respond when you disagree with a decision they made.
Puzzle questions and algorithm exercises persist because they are easy to standardise and easy to grade, not because they predict the work. They select for recent practice on a specific genre of problem, which correlates with having had time to prepare - which correlates with being early in a career or between jobs, and not with being good. If you use them, be honest that you are testing preparation, and keep them short.
Structure matters more than the questions themselves. Decide the criteria before meeting anybody, ask each candidate the same core questions, and have interviewers write their assessment before the debrief rather than during it. Unstructured interviews reliably converge on whether the panel enjoyed the conversation, which is a measure of similarity to the panel. Independent written scores are a small mechanical change that stops the most confident voice in the room from setting the consensus.
Take-home exercises are contentious for good reason. They move cost onto the candidate, and unpaid multi-day exercises exclude people with families or current jobs, which is most of the experienced people you want. If you use one, cap it firmly at a couple of hours, say so plainly, and honour the cap by not rewarding candidates who obviously spent longer. A pairing session on the same problem is usually better and costs everyone less time.
Interview the role that exists rather than the one in the advertisement. If the work is maintaining an older system with sparse tests and unclear ownership, a candidate who only wants greenfield work will leave, and enthusiasm during the interview does not change that. Describing the unglamorous parts honestly loses a few candidates at offer stage and saves considerably more at the six-month mark.
The uncomfortable part is that you cannot measure your own false negatives. You see the people you hired and how they did; you never see how the rejected candidates would have performed. That asymmetry pushes hiring processes towards caution, and caution reads as rigour. A process nobody has questioned is not a validated process, it is an unexamined one.