La importancia de una buena entrevista técnica y el (sutil) arte de crear un equipo eficiente.

Esta semana tuve la oportunidad de entrevistar gente para la posición de programadores de apps móviles. Si bien es cierto que no es la primera vez que participo en ello, no dejo de reflexionar que una tarea como entrevistar (que pudiera parecer sencilla) es en realidad compleja e incluso me atrevería a decir que es una forma de arte.
¿Arte? ¿Por qué? Pues bien, en esta publicación compartiré mis opiniones del porqué vale la pena en invertir tiempo en realizar una entrevista técnica ‘de calidad’, esperando dar tips tanto a los entrevistados como entrevistadores.
¿Realmente es ‘taaan’ importante?
No es para menos, las entrevistas nos dan la oportunidad perfecta de crear ya sea:
Un equipo eficiente, orientado a dar resultados, que sobrepasan las expectativas. Por ejemplo, para el caso de los programadores, puede ser un equipo que entrega a tiempo su desarrollo (sino es que antes), con la menor cantidad de defectos, capaz de innovar no solo en su día a día de programador (al integrar nuevas herramientas, mejores prácticas y demás) sino también mejorando al cultura de la empresa…
Un equipo promedio que puede dar resultados pero no sobrepasa expectativas. Por ejemplo, no se preocupa por implementar nueva tecnología o herramientas. La preocupación principal es programar y entregar en fechas límite….
Un equipo ineficiente, caracterizado en estar muy por debajo de las expectativas, no entrega a tiempo, su desarrollo está incompleto y es la botana de QA :v
Por otro lado, y no menos importante, es el hecho de considerar el aspecto social e incluso anímico del equipo. Sería triste que pese a contar con un equipo eficiente los integrantes no se llevaran bien a tal grado que genere un ambiente tóxico de trabajo o en el otro extremo, contar con un equipo donde hay buen ambiente pero no entregan resultados.
¿Entonces es un volado?
Uno pudiera pensar que puesto que existen tantas variables de por medio, resulta imposible formar un equipo perfecto (a decir verdad, ¡lo es!) y es mejor no invertir tanto tiempo en entrevistar, contratar al recurso por un corto espacio de tiempo y evaluarlo si da o no resultados tal como los demás ¿Pero es eso justo?
En lo personal considero que no, entre más información tengamos del candidato (que justo nos dan las entrevistas), más fácil será tomar una decisión y ver si tiene potencial o no de hacer cosas grandes en la empresa. En caso contrario, si no hace match con la cultura de la empresa o el equipo, es mejor identificarlo con antelación.
Por ello, invirtamos tiempo en preparar una entrevista técnica.
Antes de comenzar…
Muchas veces nos enfocamos más en lo que sucede durante el intercambio de preguntas y respuestas del entrevistador y entrevistado, pero esto va más allá.
Así como todo producto o servicio de buena calidad requiere de buena planeación, así deberían de ser nuestras entrevistas. Comenzando con un análisis previo, estableciendo objetivos y, en nuestro caso, generando una guía de entrevista.
Sería bueno responder las siguientes preguntas antes de solicitarle al área de recursos humanos la búsqueda de un programador.
- ¿Cuál es el estado actual del proyecto? ¿Esta en estado crítico como para necesitar programadores con años y años de experiencia … o puede darse la oportunidad de recibir menos experimentados pero con gran potencial de crecimiento?
- ¿Tenemos preparado un listado de requisitos como herramientas o tecnologías que el candidato deba dominar?
- ¿Tengo “masomenos” claro las tareas que podría ayudar el nuevo recurso?
Este tipo de preguntas varían dependiendo de la situación de nuestro proyecto pero nos ayudan en establecer objetivos como:
- Experiencia del programador
- Herramientas o lenguajes de programación que deba manejar
- Cantidad de programadores por equipo
Llego la hora de entrevistar…
Una vez definidos los objetivos, tenemos que generar una guía de entrevista que nos permita obtener la mayor cantidad de información en un lapso razonable de tiempo (de hecho, la guía nos ayudará a no excedernos en cuanto a tiempo).
Esta consiste de preguntas e incluso ejercicios (de los cuales hablaremos más adelante) para conocer la experiencia y dominio técnico del candidato. Y deben ser lo suficientemente precisas.
Por ejemplo, si estamos buscando programadores de aplicaciones móviles iOS en Objective-C.
- Una pregunta ‘pobre’ que le haríamos al candidato sería algo como “¿Cuántos años tienes desarrollando aplicaciones?” Es una pregunta abierta y general, el candidato puede contar con muchos años desarrollando apps en Android pero poco tiempo desarrollando en Objective-C (¡¡y recordamos que es lo que estamos interesados!!). Este tipo de preguntas no nos permite conocer con exactitud al candidato.
- Una pregunta más precisa “¿Cuántos años tienes desarrollando aplicaciones iOS con Objective-C?”. No es un muy diferente al objetivo que establecimos ¿cierto? Objetivos bien formulados no serán muy diferentes al tipo de preguntas que haremos. He ahí la doble importancia de hacer un análisis previo y establecer objetivos.
Ahora bien, también es válido poner a prueba las habilidades del candidato (que a él o ella le servirán para prepararse en una siguiente ocasión en caso de no quedar en la empresa).
¿Cómo ponemos a prueba las habilidades del candidato? Con preguntas capciosas, teóricas y ejercicios.
…Pregunta capciosa?
Si el candidato asegura ser un programador entusiasta, una pregunta capciosa sería “¿cómo puedes asegurarlo o medirlo?” Si el candidato no cuenta con aplicaciones personales en tienda (es decir, no tiene un portafolio propio de apps) o no tiene otra forma de presencia online como un blog o sitio web que muestre su trabajo…es difícil creerle.
…Pregunta teórica
Aquí empezamos a poner a prueba fuertemente las habilidades del candidato que puede asegurar contar con años y años de experiencia, pero si no explica claramente conceptos básicos…ahí puede darse un importante foco rojo. Y puede que el candidato no se preocupe por informarse mucho menos actualizarse del lenguaje que está manejando …¿cómo programará?
Algunos ejemplos de preguntas teóricas (para iOS).
+ ¿Qué significa ARC?
+ ¿Cuál es la diferencia entre enums, structs y clases?
+ ¿Cuál es la diferencia entre herencia y composición?
+ ¿Qué es Autolayout?
+ ¿Qué métodos del ciclo de vida de un View Controller conoces?
+ ¿Cuál es la diferencia entre Objective-C y Swift?
+ ¿Qué son los Protocols y cuál es la diferencia entre los protocols extensions?
…Ejercicios….de programación.

Tal como dice el refrán : “Del dicho al hecho, hay mucho trecho”. Los ejercicios nos permiten poner a prueba la forma de programación del candidato como:
- Estilo de programación (¿sus variables o clases son lo suficientemente descriptivos?).
- Qué tan cuidadoso es manejando escenarios de excepción o de error.
- Comunicación (¿es un lobo solitario que se queda callado y solo programa? ¿O se comunica bien, dice en voz alta su proceso de razonamiento? ¿Es entusiasta ante retos o se abruma? )
Debido al tiempo que puede tomar realizar los ejercicios, recomendaría agendar 2 sesiones de entrevista:
- la primera vía telefónica para platicar la experiencia y conocimiento teórico del candidato
- la segunda via Video Conferencia (como Google Hangouts) para realizar el ejercicio.
La idea con el ejercicio es que el candidato comparta una sesión via Hangouts de su escritorio y resuelva un ejercicio en su IDE o en un Google Document.
Asegurémonos de avisarle al candidato que realice el ejercicio en un lugar que cuente con buena conexión a Internet y que cuente con el IDE o cuenta de google correspondientes.
Algunos ejemplos de ejercicios técnicos:
- Ordenamiento de un arreglo
- Recorrer un árbol binario
- Poblar una tabla
Es también conveniente que con los ejercicios al candidato no se le presente toda la información con lujo de detalle. Sino más bien, permitirle que lo vaya descubriendo con base a preguntas bien formuladas.
Para darse una idea, les comparto un ejemplo de una entrevista técnica de
Irfan Baqui un YouTuber que publica videos ejemplos de entrevista técnica.
Conclusión
En esta publicación hablamos de lo complejo que puede resultar una entrevista. Pero también, de lo fácil que puede ser si vamos lo suficientemente preparados.
Teniendo una guía, nos será más fácil recopilar toda la información que necesitamos para tomar una decisión, sin dar paso a la improvisación.

Si desean más información del tema, les recomiendo consultar un libro obligado “Cracking the Coding Interview” de Gayle Laakmann McDowell que pueden conseguir en el sitio http://www.crackingthecodinginterview.com/