Interestingly in the last 6 months I’ve been on both sides of this: being hired and hiring others. It was really cool because it allowed me to understand what is actually good and useful in the hiring process from both ends.
While hiring (only 2 people, one junior and one senior, both fully remote) I just had a ~45-60min chat about technical and non-technical things (e.g. what do you think about functional programming/rails/deployment/ops/whatever, what does <something> mean to you, how do you feel about <some workplace practice>) and then gave them a small paid project to work on our actual codebase - something like implementing a small, self contained feature or writing some tests for a particular piece of code. I found this to be a really good way to find out if I’ll like working with someone and if they are a good fit on a technical level.
While hiring (only 2 people, one junior and one senior, both fully remote) I just had a ~45-60min chat about technical and non-technical things (e.g. what do you think about functional programming/rails/deployment/ops/whatever, what does <something> mean to you, how do you feel about <some workplace practice>) and then gave them a small paid project to work on our actual codebase - something like implementing a small, self contained feature or writing some tests for a particular piece of code. I found this to be a really good way to find out if I’ll like working with someone and if they are a good fit on a technical level.