Qué hace a un desarrollador excepcional
(steady-study.super.site)Este artículo corresponde a la primera parte de la charla Guía práctica para mejorar el desempeño y las capacidades de ingenieros frontend junior, presentada en Infcon 2023. También podría verse como una secuela espiritual de Roadmap de carrera para ingenieros frontend: 3 rutas de especialización para juniors, que ya había compartido antes en GeekNews.
¿Cómo es un ingeniero excepcional?
En su artículo de 2015, Li Paul Luo propuso cinco requisitos esenciales que hacen a un ingeniero excepcional en <What Makes a Great Software Engineer?>. La metodología del estudio fue la siguiente.
- Análisis de numerosos estudios previos sobre la formación, capacidades y comportamientos necesarios para los desarrolladores
- Entrevistas en profundidad a 59 desarrolladores de Microsoft con nivel 2 o superior, es decir, personas con cierto nivel de capacidad ya reconocido. A partir de eso se identificaron 54 posibles características personales que un desarrollador debería tener, como personalidad, conocimientos y conducta
- Encuesta a más de 2,000 desarrolladores de Microsoft. (Tras describir detalladamente cada rasgo) se les preguntó: “Si un desarrollador experimentado no tuviera esta característica, ¿lo considerarías un desarrollador excepcional?”
- Análisis de los resultados de la encuesta y entrevistas de seguimiento con quienes respondieron
- Con base en el análisis de la encuesta y las entrevistas posteriores, se realizaron además 40 entrevistas con los principales colaboradores de los desarrolladores, como artistas, planificadores de contenido, científicos de datos, diseñadores e ingenieros eléctricos
Tomando los cinco requisitos esenciales propuestos por el autor, cambié un poco el orden y la interpretación, y los organicé agregando mi propia perspectiva.
1. Escribe gran código (Be a competent coder)
Más que apuntar a ser un “coder competente”, es mejor tener como objetivo escribir “gran código”.
La habilidad para programar es la capacidad más importante para un junior. Pero una vez que se supera cierto nivel, suele ser más eficiente dedicar esfuerzo a desarrollar otras capacidades. Ese “cierto nivel” varía según la persona y la organización.
Yo evalúo la habilidad de programación de un junior con estos criterios: “1) tiene una perspectiva propia y consistente sobre la calidad del código, 2) escribe código que satisface los requerimientos del cliente, 3) con rapidez, 4) con pocos bugs, y 5) de forma legible”.
2. Practica la toma de decisiones basada en evidencia (Practice informed decision-making)
Para desarrollar la capacidad de tomar decisiones, conviene enfocarse más en mejorar el proceso que en juzgar el resultado. El resultado puede definirse por factores fuera de tu control.
Y cuando hablamos de basarse en evidencia, significa usar datos sin interpretarlos con sesgo ni sacar conclusiones apresuradas. En especial, si obtienes nueva información, aunque no te guste, es mejor reconsiderar tu juicio previo en lugar de racionalizarlo.
Sobre todo al hacer debugging, casi siempre es un error pensar que el problema no eres tú sino la librería o el navegador. Incluso si de verdad fuera un problema del navegador, culpar al navegador por todos los problemas parecidos puede hacer que ignores fallas críticas que en realidad sí fueron error tuyo.
Una forma de evitar el sesgo o la precipitación es aceptar con mente abierta distintas perspectivas externas. Si haces una pausa y miras cómo interpretan el asunto personas como amigos, colegas, clientes, competidores o jefes, se vuelve más difícil mantener tus propios sesgos.
Claro, cuando una persona está bajo estrés le cuesta actuar racionalmente. Lo mismo pasa con las organizaciones. Por eso, las organizaciones prudentes dejan deliberadamente cierto margen en tiempos y recursos, y las personas prudentes aprenden a manejar el estrés, por ejemplo mediante la meditación.
Para practicar de forma habitual la toma de decisiones basada en evidencia, necesitas contar con muchas buenas evidencias. Conviene construir un sistema para que información diversa y de calidad pase constantemente a tu alrededor: suscribirte a newsletters, formar parte de comunidades y participar en grupos de estudio, por ejemplo.
3. Ayuda a tus colegas a tomar decisiones de forma eficiente (Enable others to make decisions efficiently)
Un desarrollador excepcional comparte información y experiencia para hacer crecer a sus colegas, mejorar la productividad del equipo y, en consecuencia, ayudar a que la organización tome mejores decisiones.
Entonces, ¿qué debe hacer un junior? Más que intentar dar resultados inmediatos, lo que ayuda a los colegas y a la organización es crecer haciendo preguntas. Supera el miedo a ser subestimado, rechazado o causar molestias y haz preguntas con mucho contexto. Suele pensarse que primero hay que construir confianza para poder mostrar este tipo de vulnerabilidad, pero la investigación real muestra lo contrario. Cuando las personas muestran sus debilidades y asumen riesgos con valentía, la base de la confianza se forma con rapidez.
También hay una manera correcta de mostrar vulnerabilidad: incluir bien el contexto. Los juniors suelen tener un problema A, prueban B y, si dentro de eso C no funciona, solo preguntan por C. Cuando pasa eso, normalmente solo reciben respuestas muy puntuales, y aun obteniéndolas, el problema no se resuelve bien. En cambio, muchas veces he visto que, si se define bien A, B aparece casi por sí solo y C deja de ser necesario.
Para fomentar las preguntas, hace falta una cultura organizacional que valore mucho la vulnerabilidad y la transparencia. En ese punto, importa bastante cuál sea el valor por defecto dentro de la organización, porque ese valor por defecto influye enormemente en la cognición y en el comportamiento de las personas.
En ese sentido, las herramientas Public by Default, donde hay que hacer una acción para ocultar algo, como Slack o Notion, son mejores que las herramientas Private by Default, donde hay que hacer una acción para compartir, como Email o Google Docs. “Puedes hablarme en cualquier momento, salvo cuando active esto (Do Not Disturb)” funciona mejor que “en este horario puedes venir a hablarme libremente (Open Hours)”.
4. Maximiza el valor actual de tu trabajo (Maximize current value of your work)
A un desarrollador excepcional se le exige tanto pensamiento sistémico —implementar con una perspectiva de largo plazo, anticipando qué partes podrían volverse problemáticas o cómo podrían cambiar los requerimientos— como capacidad de ponerse en marcha de inmediato —no quedarse detenido analizando, sino lanzarse a ejecutar y recibir feedback aunque haya incertidumbre—.
En especial en startups, lo segundo suele ser más ventajoso, pero inclinarse demasiado hacia un extremo también juega en contra. Conviene enfocarse en ejecutar rápido, pero al mismo tiempo convertir en hábito acciones que, con poco esfuerzo, den grandes beneficios. Un ejemplo a nivel micro es no dejar hardcodeado ni siquiera un solo valor, sino extraerlo como variable; o usar un Mode en lugar de un valor booleano si, aunque ahora solo existan dos valores, se trata de un tipo de opción que atraviesa más de un componente. Un ejemplo a nivel macro es pensar qué hipótesis estás intentando validar con lo que haces y con qué datos vas a validarla, y ejecutar con ese hábito.
Al final, el valor del trabajo se maximiza cuando puedes moverte con flexibilidad, por decisión propia, entre el pensamiento sistémico y la acción inmediata.
5. Aprende de manera continua y efectiva (Continuously learn)
Aprender a aprender de forma efectiva es el inicio de todo crecimiento. Cuanto antes se haga, mejor: es una acción con beneficios compuestos.
Aprender, al final, consiste en ampliar tu conocimiento para transformar tu vida. Pero como no hay garantía de que el conocimiento antiguo siga siendo válido hoy, siempre hace falta el esfuerzo de actualizarlo con nueva información.
Sin embargo, tener mucha información no siempre es algo bueno. Como ocurre con los big data sin depurar, hay informaciones que solo estorban. Por eso, hay que aumentar la proporción de “señal” frente a “ruido”: en lugar de información imprecisa o no relacionada con tus problemas, necesitas señales útiles. Considero buenos ejemplos de señal las ideas que crean conexiones con el conocimiento que ya tienes desde dominios que no son tu especialidad, o las evidencias de que podrías estar equivocado bajo ciertas condiciones.
El aprendizaje efectivo puede resumirse en esta pregunta: “¿Cómo puedo crecer cada día, aunque sea un poco, de forma más efectiva?”. La respuesta es repetir lo siguiente: 1) identificar lo que realmente necesitas ahora mismo en la realidad, 2) aprender solo la cantidad justa de fundamento teórico relacionado, y 3) usarlo de inmediato en cuanto lo aprendes para recibir feedback propio.
Entonces, ¿cómo saber qué necesitas ahora mismo en la realidad? Puedes escribir un diario y descubrir los problemas que enfrentas en tu vida diaria, o intentar mejorar una actividad a la que hayas dedicado mucho tiempo durante la última semana. Por ejemplo, si estás buscando trabajo, probablemente participes mucho en estudios grupales, así que te servirá investigar cómo hacerlos de forma más efectiva. Cuanto más frecuente sea una actividad, más oportunidades de aprendizaje ofrece, y mayor puede ser la mejora en tu calidad de vida al optimizarla.
Cómo aplicarlo: la perspectiva junior y senior
Para los juniors, conviene revisar uno por uno estos objetivos, especialmente cuánto se ajustan a los conocimientos y comportamientos descritos en “escribir gran código” y “aprender de manera continua y efectiva”. Luego, desarrollar de forma concentrada las capacidades que les falten.
Y si eres senior, puedes usar esto en evaluación de contratación y evaluación de desempeño. Vale la pena pensar con qué señales distinguir si una persona candidata posee estas capacidades en grado suficiente. También puede servir de forma parecida al liderar para elevar las capacidades de los juniors.
Además, estas capacidades ofrecen buenos criterios para evaluar cualquier rol si solo reemplazas “escribir gran código” por la especialización propia de ese dominio. Por eso, en XL8, ya sea para PMs, diseñadores o desarrolladores, al contratar, hacer onboarding y dar feedback, intentan evaluar capacidades tomando esto como referencia, y han visto efectos bastante importantes.
Puntos a considerar al usarlo
Estas cinco capacidades son todas complementarias entre sí. Como están entrelazadas, convertir solo una de ellas en objetivo principal puede no ser tan efectivo. Visto al revés, destacar en una sola también puede facilitarte mejorar en las demás.
Además, este estudio, como cualquier otro, no es una verdad absoluta. Naturalmente tiene limitaciones, y también hay que tener en cuenta que pasó tanto por la interpretación del autor del paper como por la mía.
Asimismo, como el título del paper era “¿Qué hace a un desarrollador excepcional?”, uno podría pensar que tener estas cinco capacidades basta para convertirse en un desarrollador excepcional, es decir, que serían una condición suficiente. Pero lo que en realidad se investigó fue esto: “si no tienes esto, no se te puede considerar un desarrollador excepcional”, es decir, son condiciones necesarias. Por lo tanto, está bien tomarlas como buenos objetivos, aspiraciones o puntos de paso, pero no hace falta verlas como destino final.
Cómo aplicarlo: la perspectiva del desarrollador frontend
Para aplicar estas cinco capacidades en el contexto del desarrollo frontend, puedes hacerte preguntas como estas.
- ¿Qué significa escribir gran código en el dominio frontend? ¿Cómo puedo escribir mejor código?
- Para tomar mejores decisiones en frontend, ¿qué evidencia debería recopilar y cómo?
- ¿Qué significa ayudar a mis colegas a tomar decisiones de forma eficiente en el dominio frontend?
- ¿Cómo mido el valor actual de mi trabajo en frontend? ¿Cómo lo maximizo?
- ¿Cómo puedo aprender de forma continua y efectiva el conocimiento del dominio frontend?
Lo que surgió al pensar cómo responder estas preguntas fue el Roadmap de carrera para ingenieros frontend. Allí se explican las funciones que la organización espera de un desarrollador frontend, separadas en rutas especializadas en web, producto y operación, junto con sus características principales, ventajas y desventajas. (En la charla de Infcon este contenido quedó completamente fuera, pero planeo ampliarlo y explicarlo mejor en un artículo aparte.)
Este roadmap también puede aprovecharse desde el contexto junior y senior.
Por ejemplo, los juniors frontend pueden investigar de antemano o hacer preguntas en entrevista para entender la situación de una empresa, y usarlo así al buscar trabajo: “En esta organización a la que quiero entrar buscan este tipo de especialización. Si desarrollo bien esta especialización y sé mostrarla, aumentarán mis posibilidades de ser contratado”.
Y si eres senior: “En nuestra organización nos faltan personas con este tipo de especialización. Entonces ayudemos a esta persona a desarrollarla. Y tratemos de identificar bien y contratar a personas que ya tengan esta especialización”. Así puede utilizarse al hacer crecer al equipo y contratar.
Por supuesto, igual que con el paper mencionado, hay que tener presente que estas tres rutas son complementarias, no son una verdad absoluta y tampoco son el destino final.
Convertirse en un desarrollador senior excepcional
En el Roadmap de carrera para ingenieros frontend, también mencioné brevemente mi visión sobre cómo convertirse en un desarrollador senior excepcional.
- Una buena persona senior es alguien que se mantiene fiel a lo básico y sigue desarrollando las cinco capacidades esenciales.
- A veces, una sola conducta ejemplar de un colega influye más que muchísimas palabras de un líder formal. A quien demuestra liderazgo incluso cuando no tiene el rol, al final se le asigna ese rol.
- Las personas que generan gran impacto en cualquier situación, incluso cuando se les asigna una tarea pequeña, son las que luego reciben responsabilidades mayores.
1 comentarios
Como lo moví directamente desde Notion, el enlace de "Hoja de ruta de carrera para ingeniero frontend" que está al final quedó como un enlace de Notion. T_T https://steady-study.super.site/frontend-engineer-career-roadmap Es este.