En abril estuve realizando un proceso de selección para contratar a programadores y la verdad es que ha sido muy motivante el proceso y frustrante el resultado.

Nosotros hacemos dos entrevistas, una telefónica que hago yo sólo y una en persona que la que estamos Jose, el jefe de proyecto, y yo. De los anteriores procesos me había dado cuenta que venían demasiadas personas a hacer la entrevista en persona (con la inversión en tiempo que conlleva) y quería tener más argumentos para tomar la decisión sólo con la telefónica.

Entonces me planteé qué era lo que quería saber, por qué quería saberlo y qué preguntas iba a hacer para conocer la respuesta. Lo separé en diferentes áreas: motivación, experiencia, aspecto técnico y forma de ser. Este es el cuadro de las preguntas que hacía:

Tema ¿Qué quiero saber? ¿Por qué lo quiero saber? ¿Cómo voy a averiguarlo?
Motivación ¿Puedo ofrecerle lo que busca en una empresa? Si no cubros sus necesidades se irá y quiero que esté mucho tiempo aportando sus cualidades ¿De tus trabajos previos qué te ha gustado más/menos?
Si tiene trabajo, ¿por qué quieres cambiar de trabjo?
¿Qué es lo que más valoras de un trabajo?
Motivación ¿Está al día de las nuevas soluciones? Quiero gente que quiera seguir mejorando, salir de su círculo de seguridad. ¿Qué has aprendido en los últimos meses?
¿Qué tecnologías recientes te parecen más interesantes?
¿Qué haces para estar al día en temas de informática?
Motivación ¿Es una persona apasionada con la programación? Los que hacen lo que les gusta lo hacen mejor. ¿Has desarrollado algún proyecto al margen del trabajo?
¿Qué lenguajes de programación te parecen más divertidos?
Experiencia ¿Sería capaz de enfrentarse con éxito a nuestos problemas? Quiero que esté acostumbrado a tratar con problemas de la magnitud que nosotros tratamos ¿Qué estás orgulloso de haber hecho en el trabajo?
¿A qué problemas de escalabidad te has enfrentado?
Técnico ¿Conoce las herramientas?  ¿Qué herramientas son útiles para el programador?
Técnico ¿Es elegante escribiendo código? El código elegante es más fácil de leer y mantener. ¿Qué es hacer refactoring y cuándo es útil?
¿Qué patrones de diseño sueles utilizar?
Técnico ¿Tiene claros los conceptos de orientación a objetos? Los necesita para entender el código. No he sido capaz de encontrar una buena pregunta para este punto
Técnico ¿Diseña bien una jerarquía de clases? Es imprescindible saber hacer un diseño. ¿Cómo diseñarías una librería que facilitara la creación de juegos de cartas? ¿Qué clases y métodos principales tendría?
Técnico ¿Está familiarizado con la shell de linux? Nuestros servidores y la mayoría de programadores trabajamos en linux ¿Qué comandos de linux son útiles en el día a día?
Técnico ¿Está familiarizado con las bases de datos? Nuestro día a día es con BD ¿Cómo almacenarías la información de una jerarquía de clases en una base de datos relacional?
¿Qué problemas presenta esta implementación?
Metodología ¿Conoce TDD? Queremos que todo nuestro desarrollo sea dirigido por tests ¿Has programado alguna vez siguiendo un desarrollo dirigido por test?
Metodología ¿Conoce Scrum? Es nuestra forma de planificar ¿Qué puedes decirme de scrum?
Personalidad ¿Su forma de ser es compatible con la de los compañeros? Quiero un buen ambiente de trabajo con todos los miembros del equipo integrados ¿Qué te molesta en el trabajo?
¿Qué es lo que más valoran de ti tus compañeros?
¿Qué es lo que a menudo critican de ti tus compañeros?
Si tú fueras el entrevistador ¿qué cualidades valorarías más?
Personalidad ¿Maneja adecuadamente las órdenes que cree erróneas? Quiero gente capaz de defender su punto de vista de forma tranquila y a la vez capaz de cumplir órdenes. ¿Podrías darme un ejemplo de algo absurdo que te hayan pedido en el trabajo y qué has hecho?