Estrategias para Crecer y Evolucionar como Desarrollador de Software
Durante el paso del tiempo se han ido definiendo roles para atender tareas específicas dentro de las compañías, por eso existen roles como: Software Engineer, Staff Software Engineer, Tech Lead, Team Lead, Engineering Manager, Principal Engineer, VP Engineering, CTO, u otro. Estos roles varían dependiendo del tipo de empresa y su organigrama e incluso hasta podrían tener responsabilidades distintas entre Startup, Consultora, Big Tech, u otra, lo que en una empresa se le conoce como: “Team Lead” tal vez en otra se le conozca como: “Engineering Manager” ;pero el punto es el mismo, tratar de darle sentido al rol para atender ciertas responsabilidades específicas dentro de los equipos de software.
Hablar de crecimiento en software es muy difícil porque eso depende de los objetivos personales y profesionales de cada persona ;pero alguna vez ¿Te has preguntado hacia qué rol te gustaría crecer?
Otra situación es que para muchos el crecimiento también es variante, ¿Qué es crecer para ti? , ¿Cambiar de rol en tu linkedin?, ¿La posibilidad de venderse más caro? ¿Una mayor recompensa económica/emocional?, ¿Ser tomado en cuenta en decisiones complejas?, ¿Ser quien decide los objetivos de un equipo? ¿Subir tu “Seniority” como desarrollador?, ¿Escribir código más complejo?, ¿Liderar el desarrollo y la arquitectura de un software?, ¿Tomar decisiones de negocio?, todas son consideraciones respetables y válidas, cada uno es responsable de darle el sentido que crea conveniente ;pero ¿Cuando realmente estamos creciendo?
Considero que el crecimiento se da solo cuando te animas a salir de tu zona de confort y dar apertura a lo desconocido, te enfocas aprender, en hacer tu trabajo de la mejor forma, con la mayor calidad y profesionalismo posible, sin importar si tu objetivo es ir por el lado técnico como un “Staff Software Engineer” o algo más estratégico como un “CTO”, abandonar la comodidad para tocar la incomodidad es el punto de inflexión.
Siempre me ha gustado involucrarme en la capacitación de nuevos integrantes en los equipos, porque ahí aprendí y entendí la importancia de ser muy claro con las expectativas que se tienen sobre un desarrollador, entender sus motivadores y plan de carrera tangible dentro de la compañía desde el día 1, es necesario entender hacia dónde quiere ir el desarrollador, y como desarrollador es importante expresarlo de igual forma. Recomiendo no asumir y clarificar todo, las veces que sea necesario, no hacerlo a tiempo podría ocasionar demasiados problemas en el futuro para el desarrollador y el equipo.
Por ello quiero compartir una lista de estrategias, prácticas y errores que me han ayudado a crecer, sin importar el rol en el que me he desempeñado y que podrían brindarte más oportunidades de aprender y alcanzar tus objetivos profesionales y de equipo.
No son Silver Bullet, aunque estoy seguro que probablemente te ayudarán a mirar tu día a día con otra perspectiva.
1. Aprende del código
Soy creyente que la mejor forma de aprender a escribir código es haciendo, no importa el lenguaje o framework, hay que hacer para comprender, eso te obliga de manera implícita a investigar, leer y estudiar. El trabajar en equipos de software también te da crecimiento técnico, por que puedes aprender de las experiencias de otros desarrolladores, entender cómo piensan, cómo resuelven los desafíos que se les presentan, que evalúan durante el code review, en general se aprende de reglas de negocio, buenas prácticas, estándares y cómo escribir código de alta calidad.
Aunque siempre nos enfocamos en querer aprender de lo que está “bien hecho”, hay ocasiones que no es así y puede llegar a desanimarnos cuando vemos un mal código, sentimos que no nos aporta e incluso lo vemos como una pérdida de tiempo ;pero míralo desde otra perspectiva el mal código te ayuda clarificar qué es lo que no funciona y que no debes hacer, por que las buenas prácticas importan, como escribir mejores pruebas, código mantenible y estrategias para refactorizar código, cada línea de código con malas prácticas es una oportunidad para convertirse en un mejor desarrollador.
2. Conviértete en un desarrollador confiable
Se un desarrollador que cumple con los objetivos, que entrega calidad, que se preocupa por las fechas de entrega, realiza lo que prometes, no esperes a que alguien te pregunte si ya está listo o ya terminaste, comunica efectivamente tus avances o los problemas que te bloquean, se redundante en tu comunicación repitelo las veces que sea necesario, ten proactividad e iniciativa no esperes a que alguien te asigne una tarea, dale un toque extra de tu magia a cada tarea que resuelves, tus tareas deben tener un impacto o justificación sobre usuarios, negocio o tus compañeros, no desperdicies el tiempo haciendo cosas que no tienen trascendencia, no hagas trabajo invisible, enfócate en las prioridades y deja que la gente sepa lo que hiciste, porque si nadie lo sabe, no sucedió, sobre todo si estás buscando ser promovido o tener algún ascenso. No olvides nunca que tu trabajo es la representación de cómo te ven los demás. Eres lo que hablan de ti cuando no estás.
3. Fomenta la colaboración segura
Evita a toda costa ser la persona con la que nadie quiere trabajar, esa que nunca deja hablar a los demás, que no escucha, que todo lo sabe, que nunca se equivoca, que siempre tiene la razón por que ya lo hizo antes así, que no respalda a su equipo, que no da espacio para preguntas por qué todos lo deberían saber ya, que siempre quiere quedar bien con el “Manager” o con alguien, que culpa siempre a otros en los momentos difíciles, que no acepta el feedback y cree que estas en su contra, que se adjudica los logros que no le corresponden, que fomentan el favoritismo y culturas tóxicas, por favor no seas ese pequeño gran rockstar.
Aunque es desmotivante, es probable que te toque trabajar con alguna persona así e incluso muchos de estos desarrolladores nunca se vuelven conscientes de sí mismos, y sus actitudes, no son capacitados para mejorar su actitud y terminan siendo promovidos a posiciones de liderazgo e influencia donde luego se vuelven inmunes, aunque siempre lo atribuyó a que tuvieron malas guías en sus caminos y no se dieron la oportunidad de mejorar.
Sin embargo tu puedes ser esa persona que crea el espacio seguro para los demás, se humilde, todas las opiniones cuentan, colabora para ayudar no para bloquear, respeta el tiempo de los demás, permite que todos participen, acepta que no existen preguntas tontas, clarifica puntos a quien no lo haya entendido, sé un facilitador para tu equipo, apasionante por tu profesión, amá tu trabajo, se disciplinado, comparte todo tu conocimiento a tu equipo, se transparente, que vean en ti una persona en la que se puede pedir ayuda, genera un ambiente en donde todos son vulnerables, donde todos se ayudan por el bien del equipo y las metas comunes, promueve que está bien equivocarse y no saber, se solidario en los momentos complicados, que si falla alguien falla todo el equipo, y si gana alguien gana todo el equipo.
Todos queremos que todo sea perfecto pero normalmente no será así, siempre más propuestas y soluciones sobre quejas, si algo no es claro toma la responsabilidad y resuélvelo, somos ingenieros y aplica para todo no solo para software.
Antes de ser desarrolladores somos personas, y el que no vive para servir no sirve para vivir.
4. Involúcrate en el negocio y el producto
Uno de los errores más comunes en desarrolladores es creer que ser desarrollador de software, se trata solo de escribir código y atender temas técnicos ;pero en el mundo real no es así, y es por eso que debemos educar a nuestros equipos, compañeros y así mismos qué hacer software es un proceso complejo y una tarea de equipo.
Si en tu empresa alguien “le pasa una solución a alguien de ingeniería para que la construya”, no tienes un equipo de ingeniería, tienes un equipo de consultoría. :(
Hacer software de calidad requiere de entender el negocio, enfócate en comprender cómo funciona el producto/servicio para el cual desarrollas, como genera ingresos la compañía, las métricas que se persiguen, piensa en el impacto que puede generar tu trabajo si tienes un mejor entendimiento de los problemas que tienes que resolver, por tal razón es relevante participar en reuniones, aunque a veces suelen ser un poco tediosas o aburridas puedes usarlas a tu favor, es el momento para preguntar, el detrás de los requerimientos, entender los porqués de lo que se está construyendo, qué impacto va tener una vez realizado, propón soluciones a los problemas plateados, comparte ideas, opina sobre lo que piensas, cuestiona lo que no es claro, preocupate por los detalles, plantea los casos borde, da un punto de vista diferente con una perspectiva constructiva, tú conoces mejor que nadie el código que va permitir agregar o no esa nueva funcionalidad, levanta la mano si algo no es viable, acércate a personas que conocen el negocio mejor que tu o tienen más experiencia, interactúa con otras áreas, absorbe todo el conocimiento posible que nada resta y todo suma, cada nuevo aprendizaje cuenta y eso hará que tu desempeño sea aún mejor.
Steve Jobs decía que necesitas ser dirigido por las mejores ideas, no por las jerarquías y las mejores ideas siempre deben ganar.
5. No asumas nada y aprende a decir “NO”
Tal vez una de las habilidades más difíciles de aprender, me gustaría decir que no vas a perder tu trabajo (en la mayoría de los casos 😅) por decir que algo no es posible en ese momento, tampoco tienes que demostrar a nadie que puedes ser un superhéroe.
El sobre-trabajo genera:
Malas prácticas y soluciones técnicas con baja calidad, por que se realizará solo por terminar
No se cumplen los plazos o fechas de entrega
Jornadas de trabajo irreales que terminaran en agotamiento físico y mental
Trabajo irrealista que conduce a conflictos
Múltiples tareas en paralelo ;pero ninguna completada
Comprometer tus compromisos personales y familiares teniendo que tomar tiempo extra de tus fines de semana.
Tampoco es que se trata de ir por la vida repartiendo “NO” ;pero hay que ser sensatos y profesionales con lo que realmente se puede realizar, muy pocas cosas en la vida son tan urgentes que no pueden priorizarse, en la mayoría de lo posible, aplazar a otro sprint, intercambiar con otra prioridad o recortar el scope puede ser la salvación, la mejor recomendación que podría dar es, no digas “Si” sin nunca antes comprobar y asegurarse de su viabilidad, recuerda no es solo escribir el código de la solución, pide tiempo para verificarlo, cada cosa que comprometes como desarrollador también repercute al equipo.
6. Pide y Transmite feedback continuo
Es muy común hacerlo solo cuando se acerca el periodo de evaluación de desempeño que promueven las empresas, mi sugerencia es no esperar a este momento, pregunta de forma continua cada 2 o 3 semanas a tus compañeros, pares, reportes directos, jefes/líderes sobre las áreas en las que necesitas mejorar, no necesita ser una reunión formal o una llamada agendada, puedes preguntar simplemente por mensaje, eso es mejor que nada, una manera de iniciar es hacerlo con la persona que más confías dentro de la compañía ;pero intenta expandirlo, es común creer que nuestras actitudes y comportamientos están siendo los mejores ;pero desde afuera puede que haya otra perspectiva, recíbelo, se agradecido y luego trabaja duro para mejorarlo.
Lo mismo del otro lado de la moneda, ten la confianza de acercarte a un compañero, escribirle o pedirle una llamada, siendo respetuoso y constructivo, siempre desde el punto de vista de la curiosidad y empatía no de la arrogancia, no vas a juzgarlo, vas a preguntar sobre tus observaciones y a brindar ayuda para mejorar.
We all need people who will give us feedback. That’s how we improve. Bill Gates
7. Escribe documentación
Una de las tareas menos motivantes o más aburridas para muchos desarrolladores ;pero es una de las más importantes, crea documentación cuando integras un nuevo servicio tercero, nueva funcionalidad, cada vez que encuentres que una parte del código o sistema está en la mente de 1 persona, documenta todo lo que sea posible.
El conocimiento debe estar distribuido, y debe existir un lugar donde todos puedan recurrir cuando existe alguna duda, ocurre un error, o cuando llega un nuevo miembro al equipo. La gente cambia de empleo a menudo, la situación actual de despidos masivos es impredecible, documenta todo lo que sea posible por el bien del equipo, crea diagramas que ayuden a entender partes específicas del software, mantén documentación confiable en los repositorios de código, ayuda a mejorarla de forma continua eso hará el trabajo más fácil para todos, documentar es escribir el entendimiento y el aprendizaje.
8. Mantente en un estado beta constante
Siempre aprende algo nuevo sea de tu profesión o no, se una mejor persona evoluciona tu identidad, fomenta el autoaprendizaje y comparte tus experiencias, en el día a día es común trabajar con una tecnología específica, aprovecha la oportunidad de diversificar más tu conocimiento, más en estos momentos de incertidumbre por los que pasa la industria, aprende algo que sea de tu interés y que no tenga que ver con lo que haces en tu día a día.
Lee blogs, lee libros de software y mejores prácticas, realiza workshops, asiste a conferencias, contribuye a algún proyecto open source, interactúa en las comunidades, ten un side-project, sigue a personas talentosas que te motiven y te inspiren, aprende de su contenido, construye experimentos para tu satisfacción emocional y personal.
Stay Hungry. Stay Foolish.
9 . Te un momento para ti
Desconecta cuando sea necesario, escucha a tu cuerpo y a tu cabeza, no te sobre satures, no se trata de trabajar más, se trata de trabajar inteligente, busca estrategias que te hagan más productivo, entiende los momentos en el día en los que eres más eficiente, pon límites y respetarlos, toma vacaciones y días libres a tiempo o cuando sea necesario, no esperes a que tu cabeza esté llena de problemas e incertidumbres, el trabajo no se irá, y te va esperar para cuando vuelvas, encuentra una actividad que te ayude a despejar la mente, pasamos muchas horas frente a una computadora la mente lo va agradecer. Da un respiro a tu cuerpo para aclarar las ideas y mirar el panorama con otra perspectiva, no hacerlo puede llevarte a agotamiento, fatiga e incluso burn out.
only the disciplined ones are free in life. If you are undisciplined, you are a slave to your moods. You are a slave to your passions. Eliud Kipchoge
Conclusión
Mentiría si dijera que todo lo que hecho ha sido perfecto (aparte que quien se creería eso 😄), la realidad es que no, me he equivocado demasiado, he cometido muchos errores técnicos y no técnicos, he tenido actitudes nefastas en mis malos días, soy una persona y también he fallado, lo hice mal en algunas veces en el pasado, aprendí las lecciones por eso espero que te sea de ayuda, que no ha funcionado y que si ha funcionado, no repitas los mismos errores, mejor crea los tuyos y que sean nuevos.
Busca por tu crecimiento profesional alineado con tus metas personales disfruta del proceso, cada situación es una oportunidad que te va poner más cerca de donde quieres llegar, ten paciencia, no dejes de creer, que todo cuenta por más mínimo que sea el cambio, apasionate por los detalles, sé ético, actúa de manera responsable y haz lo que otros no están dispuestos a hacer, decide el tipo de profesional que quieres ser y demuéstralo con pequeñas victorias.
“Every line of code represents an ethical and moral decision. And, that encompasses where and for whom one chooses to work to write that code.” Grady Booch