Cómo catalogar a un desarrollador de software

lunes, 11 de agosto de 2008



15 consejos para obtener el ascenso que quieres, e incrementar el salario que te mereces

¿Cómo catalogas a un desarrollador de software? Es una pregunta fantástica. Hay muchas teorías por allí, y hay muchas formas en las que los equipos de Recursos Humanos lo hacen y te ayudarán a dirigir el estudio de rendimiento. Sin embargo, ¿qué hace realmente a un gran desarrollador? Y si eres un Desarrollador de Software, ¡cómo puedes mejorar hoy tu carrera! Abajo les presento mi biblia para catalogar a los desarrolladores en mi equipo. Siguiendo estos consejos e ideas, podrás mejorar tu estado de "buen desarrollador", a "gran desarrollador".

1. Tiempo que invierte escribiendo código grandioso.
¡No me refiero a la cantidad, sino a la calidad! Sin embargo un giro a esto es: Me refiero a la cantidad, y la calidad. Muchísimas veces encontrarás uno de estos dos escenarios.

En el escenario A, tienes a un desarrollador que escribe código como loco, y las cosas parecen funcionar... entonces comienzan a suceder errores, y tú no sabes porqué, parece que llevará toda la vida arreglarlos. ¡O ellos arreglan 10 y causan 5 más! Pero obtuviste bastante código...

En el escenario B, tienes a un desarrollador que parece inteligente. Lo entrevistas y él lo sabe todo de todo, puede hablar teóricamente de arriba a abajo. Pero por alguna razón, tú le has asignado tres tareas, y tres semanas después, ¡él aun está trabajando en algo que debió haber terminado en 3 días! Y estás confundido. ¡Él es tan inteligente! Conoce todo acerca de generics, multi/threading, ¡y puede explicarle de punteros a tu abuela y hacer que ella se emocione y quiera codificar! ¿Por qué no esté terminado nada?

¡En el escenario de tus sueños, obtienes código grandioso! El código grandioso está hecho por un gran desarrollador que es súper inteligente, conoce lo que es código de calidad, y escribe código como Tony Hanks maneja su patineta. ¡Se ve tan natural! Es muy entretenido verlo/a. Además, lo consiguen a una velocidad cegadora. Saben cuánto tomará cada problema, y no se detendrán por buscar cuál es la mejor solución del mundo con múltiples threads y capas para escribir un juego de pong. Lo errores no existen porque ellos escriben pruebas unitarias para ellos mismos, y solo codifican en sus sueños. Estos chicos valen lo que pesan en ORO.

2. Interpretación del problema.
Hay un problema con millones de formas de resolverlo. Algunas personas son solamente pensadores rápidos y pueden salir con múltiples soluciones instantáneamente. Sin embargo, lo que un gran desarrollador haría es definir totalmente el problema antes de hacer cualquier cosa. Un gran desarrollador escribirá un documento o pizarra con el problema. Ellos enviarían un correo electrónico a su gerente y dirían cosas como "¿Podemos tener una junta para que le pueda explicar cómo entiendo yo el problema?" Luego ellos comienzan dando varias soluciones, etc.

Vea, un gran desarrollador conoce que la forma en la que ellos ven e interpretan el problema, probablemente no es la forma en la que el creador del problema quiso que fuese entendido. Este es un punto importante, ten eso en mente. Un gran desarrollador buscará entender completamente el problema antes de intentar proponer una solución. ¿Entiendes el problema al 100%? ¿no? ¿99%? ¡Ve, haz más preguntas y asegúrate que está 100% claro!

3. Cómo se aborda el problema
¿Una vez que tengas claramente definido el problema, solo comienzas a codificar? ¡Error! Un gran desarrollador mirará la disposición, y comenzará a pensar en varias opciones, y basado en el problema, pensará en el mejor enfoque para resolver el problema. Yo veo esto como un juego de ajedrez; puedes saber cómo se mueven todas las piezas, conocer todas las reglas del juego, ¿pero sólo comenzarás a mover las piezas? ¡Claro que no! Debes analizar el tablero, crear tu plan de juego, mirar a tu oponente, y ver qué es lo que él o ella hace usualmente. Es el mismo caso cuando abordas un problema.

Observa el problema, imagínate cómo necesita ser el resultado, el tiempo del que dispones, la calidad que se espera, las herramientas de las que dispones para trabajar, etc. Entonces, comienzas a resolver el problema.

4. La confianza en el código
Como gerente, cuán confiado puede estar en sus códigos. Puede decirle a algunos desarrolladores "Necesito esto completamente para el Viernes" y llega el viernes, recibe un email diciendo "He revisado el código en el branch y está listo para las pruebas" y tú sabes que el equipo de aseguramiento de la calidad encontrará muy pocos errores, o ninguno. Por otra parte, hay algunos desarrolladores que en lugar de eso le enviarán un email diciendo "Aún no he terminado, estará listo para el Lunes a primera hora en la mañana." Y estás 95% seguro que estará plagado de errores, y que no será utilizable durante días, sino es que semanas, hasta que los errores sean eliminados completamente del código.

Resumiendo: ¡La más alta fiabilidad que puedes tener de los desarrolladores, es que están muy cerca de ser grandes desarrolladores! Imagínate siendo tu manager, y el peso que quitas de su hombro si no tiene porqué preocuparse por tu código.
5. Confianza en la solución
Una cosa es sentirte confiado en el código. Si tienes a un gran desarrollador en tus manos, estás confiado en la solución. Los grandes desarrolladores serán grandes arquitectos. Ellos son capaces de analizar el problema entero, e imaginarse cómo necesita ser solucionado el problema. Ten en cuenta que no es solo codificar con código grandioso, !se trata también y principalmente de la arquitectura que le das a la solución! Este es un punto importante, y que realmente separa a los buenos desarrolladores de los grandes en el mundo del software.

6. Satisfacer los requerimientos del usuario
Al final del día, puedes tener el mejor código, y la mejor solución posible, con toda la mejor arquitectura, ¿pero logra satisfacer los requerimientos del usuario? ¡Posiblemente no! Y has fallado completamente. Ahora, hay varios grados de falla, pero un gran desarrollador dará en el blanco consistentemente. Ellos encuentran lo que el usuario necesita exactamente, crean una propuesta, le muestran al usuario lo que obtendrán paso a paso durante la marcha con ediciones semanales sin errores, y seguirán la construcción desde la última versión. ¡Los requerimientos están justo como deben estar y el usuario baila de contento!

7. Mantenerse actualizado
Los grandes desarrolladores están actualizando constantemente sus habilidades independiente y proactivamente! Tienen sed de nuevos conocimientos y perfección como un gato con la leche. No esperan a que su director venga a darles tareas, les ofrezcan tomar cursos, o les den libros para ser más eficientes. ¡Ellos van y consiguen esas cosas por sí mismos!

Encuentran las conferencias a los que quieren asistir, y envían correos electrónicos como "Estaría encantado de ir al Tech-Ed este año. Aprenderé [insertar razones aquí], y estaré capacitado para contribuir a [insertar proyectos aquí]. He hecho provisión para ahorrarles [dinero/razones métricas aquí]. ¿Si fuera posible, la empresa me ayudaría a pagar el viaje?" Si alguien me enviara esto, no solo le podría ayudar a pagar, ¡sino que le pagaría el viaje entero!

Los grandes desarrolladores acuden siempre a los grupos de usuarios, como un grupo de usuarios .net por ejemplo, o un grupo de usuarios Java. Asisten a los encuentros locales, y hacen lo que sea para alimentar su cerebro. ¿Has leído todos los últimos blogs y revistas? Haz una lista con tus 5 blogs de desarrollo favoritos. ¿Puedes hacerlo? ¡Deberías poder hacerlo como si fueran actividades de un club de boy scouts! Actualízate, esto abrirá tu mente, tendrás la siguiente gran idea y serás recompensado.

8. Contribuye al equipo
Puedes ser uno de los mejores, o aún el mejor programador, arquitecto y más brillante chico en el equipo, pero en lo que a mí respecta, sino estás dispuesto a compartir y contribuir con tu equipo, estás perdiendo la mitad de tu valor, sino es que más. Un gran desarrollador hace grandes a los otros alrededor de él. fíjate, un buen desarrollador consigue ser cada vez mejor, pero no comparte el conocimiento que obtiene, o cómo lo obtiene.

Aprende nuevas cosas, aprende acerca de las nuevas tecnologías, pero no deja que otros sepan de ellas. Un buen desarrollador termina sus proyectos a tiempo, pero cuando la presión es mucha, no está allí para su equipo. Un gran desarrollador está en contacto con todos los proyectos que tiene el equipo y está listo para ayudar cuando se necesite. Ellos dirán cosas como "Me enteré que el equipo A está trabajando en [proyecto], y creo que puedo ayudar, ¿no crees?"

9. Haz grandiosas actas de juntas
Esto es increíblemente importante! No hay peor cosa que llamar a una reunión, tomar tiempo para explicar nuevos conceptos, nuevas ideas, lluvia de ideas, venir con grandes diseños, y no tener nadie que tome notas de las reuniones. Incluso si tienes a alguien designado para esto, quisiera ver a todos con pluma y papel (de preferencia la notebook del desarrollador). Un gran desarrollador hace grandiosas actas en las reuniones; escribe todos los acuerdos de la reunión, y al final de los encuentros puedes escucharlo decir "Entonces solo para confirmar, mis tareas son: . ¿Me falta algo?"

Luego, un gran desarrollador enviará el acta a su manager, listando la fecha de la reunión, el tema, y quién lo atendió. Siguiendo esto, tendrás las tareas en la parte superior, con el abanderado de la tarea. Bajo eso, encontrarás las notas detalladas de la reunión. Un buen desarrollador no toma notas de las reuniones, dice 'Si' cada vez que agregas una tarea a su lista... y espera que su memoria le funcione bien. Luego te envía un email para revisar sus cambios, y te molestas cuando ves que se le olvidaron algunas cosas, pero obtuvo el 90% si está bien. ¡Este es un enorme desperdicio de tiempo! Y sin ninguna razón. Toma grandiosas actas de reuniones.

10. Esté dispuesto a aprender y aceptar críticas constructivas
Si has leído esto, entonces estarás tomándolo todo e intentarás implementar alguna de mis sugerencias en tus labores de desarrollo diarias. Mira, otra área importante es la habilidad del desarrollador para aprender de otros, y aceptar críticas. Sé una persona dispuesta a aprender, debes ser como una esponja, y absorber enormes cantidades de conocimiento rápidamente! Tu jefe está allí por alguna razón. Seguro, ellos pueden ser unos programadores a la antigua, pero también estuvieron en las trincheras, y han estado en cientos de batallas, y tienen heridas y miedos. Ellos tienen el instinto para hacer grandes decisiones, y hacerte grande. Están en la posición en la que están porque quieren verte tener éxito, y desean hacerte crecer.

Por supuesto, este es el entorno de trabajo ideal, pero eso puede pasar donde tú quieras si eres un gran desarrollador. Te garantizo absolutamente, y te prometo, que lo mejor es cultivar esta habilidad, hacerte extremadamente enseñable, tomar notas de las sugerencias y críticas, y ponerte el objetivo de mejorar, y es la mejor oportunidad para convertirte en más de lo que te hayas imaginado posible. Si por otra parte, escoges pensar de tí mismo como "la élite", y que no tienes más que aprender, siempre estarás estancado en donde estás. Si no estás creciendo, ni siquiera estás en el status quo, estás muriendo! Crece!

11. Siempre disponible cuando se necesite.
Esto es dar y recibir. Si trabajas para una gran empresa, ellos serán flexibles contigo. Nunca deberían preguntarte acerca de las horas de cita con el doctor que no pudiste programar después de las horas de trabajo, por la hora de entrada o de salida, o tu hora de comida. Ellos deberían animarte a ir al gimnasio a la hora del almuerzo, pagar por las comidas cuando sales con el equipo, etc. Deberían darte algunos días libres después de algún día o proyecto pesado. Y la lista sigue y sigue.

Sin embargo, con todas esas ventajas, vienen responsabilidades, inexcusablemente! En momentos difíciles, un gran desarrollador te sugerirá que el vendrá el fin de semana si se necesita. Se queda hasta muy tarde como sea posible y tan tarde como se necesite para asegurar que el trabajo se termine. Escucha, los grandes desarrolladores toman responsabilidad de sus creaciones. Ahora, claro que esto no es necesario, pero esta es la marca de un gran desarrollador. Algunas personas solo quieren trabajar sus 8 horas diarias, y ser buenos desarrolladores, pero ellos nunca serán grandes. Los grandes desarrolladores están con los jugadores del equipo hasta el final, y ven su trabajo como un arte, y a su equipo como una familia.

12. Vestir profesionalmente a diario
Nunca sabes cuándo puede venir un cliente a una visita. Nunca sabes cuándo serás llamado a una junta, ya que no todo es planeado. Y cuando ese momento llegue, debes estar listo para el baile! Un buen desarrollador viste ropa normal de lunes a viernes, incluso con jeans negros, y tenis que parecen zapatos de vestir. Un viernes casual lleva shorts, tenis, y una playera. Cuando la visita llega el viernes con una nueva cuenta enorme, no puedes llamarlo para ir a una comida porque él no está vestido apropiadamente.

Un gran desarrollador viste ropa de negocios de lunes a viernes. Ellos visten para tener éxito. Claro, si no tienes habilidades, no serás ascendido a manager o líder de equipo solo porque vistas muy bien. Pero si tienes grandes habilidades, y vistes de traje y corbata, entonces te has catapultado de rango, no se puede negar. Los 400 dólares que gastaste en un conjunto decente y corbata te será devuelto con los años. ¡Te lo prometo!

13. Habilidad de comunicación
Esta es otra categoría crítica! Hay muchos buenos desarrolladores allí afuera, pero no hay muchos grandes desarrolladores, ¿Por qué? Porque todos los buenos desarrolladores son terribles comunicadores. Hay varios niveles de comunicación, desde un correo electrónico hasta encuentros SCRUM, todas las formas de reuniones ejecutivas y tu habilidad para contribuir en un nivel ejecutivo. Tú llegas a ser "El show" cuando te presentas a cientos de personas para mostrarles el nuevo software. Si bien no es necesario llegar a las etapas finales, debes al menos estar dispuesto a comunicar tus ideas clara y efectivamente en las reuniones. Mientras mejor sea tu comunicación, más lejos llegarás.

Resumiendo: Si quieres ser un ejecutivo, debes tener un 9 o 10 en comunicación. Aun cuando tomes notas de las reuniones, o envíes reportes de estado, necesitas comunicarte extremadamente bien. No digas solo "Arreglé el error 1371" en tu reporte diario. Expláyate; explica cuán complicado fue resolver el problema, cuánto tiempo te tomó, o cómo lo resolviste rápidamente. Explica la tecnología que usaste, y porqué estás seguro que el problema no volverá a suceder. Tus reportes de estado no deberían ser algo malo que no te guste hacer. Los reportes deben ser una parte emocionante de la semana donde consigues mostrarle todo a tu manager.

14. Objetivos en cuanto a habilidades
Los buenos desarrolladores pueden hacer las cosas e ir haciendo diariamente lo que les digas que hagan. Realmente no ven a futuro y tampoco saben lo que quieren estar haciendo dentro de uno, cinco o 10 años. Algunos buenos desarrolladores saben lo que quieren... pero no tienen un plan real para conseguirlo. Un gran desarrollador tiene sus metas fijadas para un año, los siguientes cinco años, y sabe también dónde estará en 10 años.

Los grandes desarrolladores además lo llevan a otros nivel, no solo piensan en sus objetivos, sino que también los visualiza. Pueden ver exactamente lo que estarán haciendo dentro de cinco años, y el nivel en el que lo estará haciendo. Y todavía más, un gran desarrollador crea un plan detallado para su siguiente año, lo completa con cursos que tomará, proyectos que completará, y relaciones que construirá.

15. Habilidades organizacionales
El componente final que realmente conjunta todo es la organización. Puedes ser el mejor desarrollador en el mundo, pero si no eres organizado, caerás y te hundirás. Eventualmente te abrumarás y finalmente te hastiarás. Los grandes desarrolladores mantienen un escritorio extremádamente limpio, cuidan sus laptops y escriben claramente. Anotan constantemente en su calendario de Outlook sus tareas y reuniones. Tiene un apartado en la bandeja de entrada para acordar con mensajes de correo a reuniones y nuevas asignaciones. Mantienen carpetas de archivos y pueden sacar instantáneamente proyectos, notas de reuniones y otros detalles cuando se les pida que lo saque.

Bonus Tip: Pasión!
Uno de los miembros de mi equipo leyó la entrada y me recordó algunas cosas que todas las personas simples en mi equipo tienen. Pasión! Sin pasión en los que haces a diario, no serás un gran desarrollador, o grande en niguna cosa. Esto es también la principal razón por la que las personas no tienen éxito. Un desarrollador apasionado superará al mejor desarrollador técnico si éste no se apasiona por su trabajo, su rol, y su proyecto. Piensa en esto, si has leido hasta aquí, ¿estarás haciendo un esfuerzo para hacer los cambios que he listado? Parece simple, pero sin la pasión para hacer esas cosas, realmente te comprometerás hoy y tendrás éxito?

¡Entonces ahí lo tienes! Esos son los punos principales con los cuales evalúo a mi equipo de desarrollo durante las revisiones de los procesos. Pon atención, proveo a los miembros de mi equipo del mejor entorno como me es posible, y por lo tanto espero que sean grandes desarrolladores, o si tú mismo eres un desarrollador, por favor usa esta lista para hacer los cambios que sean necesarios, y catapulta tu carrera y la de tus compañeros.
Sigue estos consejos, y obtendrás el escenso que buscas, el aumento de salario que estabas esperando, y sobre todo estarás feliz con tus logros. Inténtalo y cuéntanos de tus resultados en los comentarios de abajo. Me agradará escuchar de tí. ¡También si tienes otros puntos que creas que deberían ser agregados, hazmelo saber!



Traducido del original en Real World Software Development

Después de haber leído esto, me puse a reflexionar seriamente sobre mi estado actual como desarrollador de software. Soy fuerte en algunos puntos, pero muy débil en otros.
En cualquier área de desarrollo de software en la que te encuentres, ¿cómo te catalogas? ¿Te has propuesto mejorar?

2 comentarios:

Rocaloru dijo...

Muy buen articulo, hay muchas cosas que no pensaba que contaran tanto... y como dices creo que todos tenemos algunos puntos fuertes y otros debiles, pero pues lo ultimo me gusto mucho de acuerdo a nuestra pasión podremos corregir y mejorar lo que nos falta y convertirnos en grandes desarrolladores.....

Jesfre dijo...

Si, el último consejo, "La pasión" es algo que todo profesional del desarrollo de software debería tener y, en mipunto de vista muy personal, creo que es lo principal.
También quiero hacer referencia a una pagina que nos compartió Stock donde se puede analizar en qué nivel de programador te encuentras: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm
También puede ayudar para analizar y encontrar otros puntos débiles y fuertes.