Les confesaré algo: hace muchos años me transformé en Developer porque lo disfrutaba. Realmente siempre he disfrutado programar, crear código, pasar las noches y fines de semana haciendo hacking.
No me considero un developer talentoso, quizás sí un developer esmerado, organizado y que disfruta su trabajo. He podido trabajar con compañeros mucho mejores que yo, provenientes de todas partes del mundo, pero en diversas ocasiones estos ingenieros perdieron sus trabajos.
Hace poco me preguntaban ¿qué hace a este ingeniero un ingeniero Senior?. Luego de explicar la parte técnica de la pregunta, expliqué la parte no técnica de la pregunta y a la que muchos lo ven como secundario, pero es incluso más importante que simplemente “saber programar”.
Luego de pensar un poco acerca de esto, quiero explicar en este post lo que he pensado durante los últimos días sobre esas habilidades no técnicas que requieren los developers para ser mejores (y diferenciarse del resto).
#.1. Creatividad e innovación
Desarrollar software es un proceso creativo. Al momento de desarrollar software debemos analizar la situación, todo lo que tenemos y encontrar un camino para llegar al resultado esperado.
Muchas veces llegar a ese resultado requiere ser creativo o buscar distintas alternativas para un mismo fin.
Igualmente, el desarrollador debe ver más allá de lo que tiene justo al frente. Debe ser capaz de ver posibles errores / fallos o ventajas.
#.2. Comunicación y negociación
Este es quizás el más elemental y el que más problema da en los ingenieros y desarrolladores no experimentados o que recién inician a trabajar.
Desarrollar software requiere trabajar con equipos de personas. Si las personas que realizan los trabajos no tienen buena comunicación, es imposible que el resultado sea bueno.
Ser un buen ingeniero requiere ser un buen comunicador. Esto no tiene nada que ver con los social skills, tiene que ver con comunicación básica: comunicar si estás bloqueado, tus avances, si requieres algo para seguir avanzando, validar con el cliente los requerimientos.
#.3. Empatía, gratitud y humildad
Los desarrolladores tenemos algunas malas famas en el trato con otros desarrolladores. Un buen desarrollador debe ser empático con el resto de los que trabajan con ellos:
- Saber como pueden reaccionar ante distintas situaciones.
- Entender sus habilidades principales y defectos principales.
- Ver desde distintas perspectivas.
- Tomar decisiones no solo desde nuestro punto de vista, sino desde el punto de vista de todos.
Igualmente, debemos ser agradecidos y humildes con todos los que trabajan con nosotros. Algunas veces podremos tener la razón y otras no tanto. Por esto es importante poder ser agradecido cuando no tenemos razón, pero nos corrigen y ser humilde cuando tenemos la razón y corregimos a otros.
#.4. Trabajo en Equipo
El desarrollo de software, igual que el béisbol o el fútbol, se hace en equipo. Saber trabajar en equipo es sumamente elemental en este trabajo.
El desarrollador debe saber que no siempre tendrá la razón y que este no es un juego en el que se pelea quién tiene razón y quién no.
Además, trabajar con un equipo que se respeta, se acompaña y se tiene química hace que el trabajo sea más llevadero.
#.5. Reponsabilidad y honestidad
- ¿Dijiste que lo ibas a entregar? ¡Cúmplelo!
- ¿Dijiste que para mañana iba a estar listo? ¡Asegúrate que así sea!
- ¿Dijiste que hiciste algo, pero no lo has hecho? Muy mal
Este es un trabajo de confianza. Una vez se rompe la confianza es muy difícil, sino imposible, recuperarla.
No hay nada peor que un desarrollador que aquel que no cumple con su trabajo y que aquel que no cumple con los tiempos de entrega o su palabra.
Este punto va muy ligado con el de la comunicación. Si estás atrasado en la entrega, hazlo saber con tiempo. Si no has avanzado lo suficiente, igual. Lo importante es que no sea una sorpresa si ocurre lo contrario a lo que prometiste que ocurriría.
#.6. Atención y cuidado en los detalles
Siente que el trabajo que siempre entregas es trabajo que debe llevar tu firma. Préstale atención a todos los detalles, hasta los más pequeños.
Sé que esto puede ser contradictorio con algunas prácticas ágiles, pero a lo que me refiero es que si alguien corrije tu trabajo y te señala alguna mejora: abrázalas y acéptalas (aun si son para el próximo Sprint).
“Pero así ya funciona” no debe ser nunca una respuesta.
#.7. Administración del tiempo y tareas
Como último punto quisiera señalar este. Muchos de los developers que comienzan en este “arte” son muy malos manejando su tiempo y las tareas que les corresponden.
Con esto me refiero que por lo regular requieren a alguien que les administre su trabajo y les consulte constantemente sobre el estado de los avances.
Un desarrollador debe ir más allá, debe poder organizar sus responsabilidades en el tiempo que tiene disponible solo.
#.¿Cuál otra consideras que debería mencionar?
¿Cuál otra consideras que es importante? Creo que las universidades cada vez más deben ayudar a desarrollar estas habilidades que cada vez menos vienen de los recién graduados.
A los desarrolladores que apenas comienzan (o a los que se consideran buenos técnicamente pero fallaron la prueba), les digo que todos fallamos en algunos de esta lista diariamente. Lo importante es