We have two steps in our process:
This really helps us determine how a candidate thinks through problems, how much they fit the position, and helps them put their best foot forward. It is enough work that we can tell who mailed it in, but not so much that candidates need to upend their whole schedule to accommodate us.
Each member of our team taking part in the interview process (typically everyone in our small team) conducts individual 15-20 minute interviews with the candidate, usually back-to-back. Each member of our team will evaluate the candidate on areas they are most capable of evaluating (some more technical than others)
My interviews will typically consist of walking through their code and asking questions, then we may walk through our code if it is relevant and they ask us questions. I am looking to tease out a candidate's current understanding of topics, potential and willingness to learn, and interest in our mission. What I don't do is code trivia or riddles and the such.
And if we need another interview, we will do it.
We try to optimize for capable candidates, not for ones with enough spare time to jump through circus hoops for us. The best candidates are not necessarily the ones most capable of taking on an arduous interview, and we think there are diminishing returns and enough uncertainty that we try to streamline the process whenever possible.
The most important part of our process is that we all fill out individual surveys after each contact point without consulting one another. We do this to insure we don't bias each other and get true wisdom of the crowds benefits. After everybody has filled out their surveys in private, we come together to have discussions about our candidates, fight for ones we liked, etc.
I'm pretty happy with our process so far.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.