Let me explain this with a story.
10-12 years ago, the international cricket council picked the best players from around the world and formed a team called the World XI to play against the world champions, Australia. Mind you every player in the World XI was a legend. Now, you have all these great players playing together and you would assume that they would thrash Australia. Instead, the World XI lost pretty badly.
What's the moral of the story here? You don't pick the best people and expect to win, instead you pick a group of people (if they're strong from an aptitude perspective, even better, but I think you can always establish a bare minimum threshold and hire only above the threshold) who can all gel well together and establish a brotherhood of sorts, so to speak. Never hire for aptitude, but for attitude. The former can be learnt.
You ideally need a smart guy who knows the best practices already in the team and that's usually the CEO/CTO/VP-of-Engg. and the new guys can pick up the tricks from the smart guy.
How to know if a guy is going to be a good hire, that's the crux of the question here. A take home assignment can be a good way to judge whether or not the candidate passes the bare minimum threshold of knowledge you would need to work with them. If someone fails at this stage, they're out.
The next step is determining the attitude. Now, this is not going to work when you're just going to have a Skype call or an hour long in-person chat, since anyone can bullshit through that span of time and make you believe that they're someone that they're actually not. You need to work with a person for a week or so, to really evaluate them. If they pass the basic coding rounds, invite them over to your office and work on a side project with them for a week. Pay them for that duration. By the end of the week, you can make a hiring decision.
James
Technology agnostic software professional