Processos seletivos que ficam muito longe da realidade do programador tendem a falhar. A pessoa vai resolver aquele tipo de problema no dia a dia? Vai ter ajuda de alguém quando surgir uma dificuldade? Introduza isso durante a avaliação.
O tempo mais valioso com o(a) candidato(a) não são as 8 horas que ele(a) vai passar resolvendo o desafio técnico, e sim naquela 1 hora que ele(a) vai conversar com você.
Esqueça fit cultural e busque match cultural. As pessoas não devem se encaixar na sua cultura, e sim agregar positivamente nos valores da sua empresa.
Não valorize mais as pessoas que estão entrando na empresa do que aquelas que já estão na empresa. Tenha um framework de avaliação para evitar essa perversidade.
Abandone checklists ao avaliar pessoas. É provável que algumas pessoas na sua empresa não preencham esse mesmo checklist e mesmo assim entreguem resultados espetaculares.
Durante o processo seletivo seja 100% transparente em relação aos problemas que sua empresa tem. As pessoas não escolhem empresas pelos benefícios, mas sim pelos trade-offs. Se você esconder os problemas, elas pessoas podem se frustar e sair depois de pouco tempo.