37 puntos por xguru 2025-05-28 | Aún no hay comentarios. | Compartir por WhatsApp
  • Para lograr el éxito en ingeniería, es importante equilibrar tres áreas: calidad (Quality), velocidad (Velocity) y satisfacción de los desarrolladores (Happiness)
  • ESSP (Engineering System Success Playbook) ofrece un framework de tres pasos para mejorar estos aspectos de forma integral y maximizar los resultados del negocio
  • A través de 12 métricas clave diseñadas con base en varios frameworks como SPACE, DevEx, DX Core 4 y DORA, permite entender la situación actual de la organización, establecer prioridades según los objetivos de mejora e implementar y ajustar cambios de forma gradual
    • Estas 12 métricas están pensadas para seguir cada área de forma cuantitativa y pueden personalizarse según el contexto de cada organización
  • Todas las mejoras se basan en la sostenibilidad a nivel de equipo y el pensamiento sistémico, y enfatizan un enfoque equilibrado que considera tanto indicadores adelantados como rezagados
  • Se busca una transformación sostenible a largo plazo en lugar de mejoras rápidas
  • ESSP puede comenzar a aplicarse incluso sin herramientas propias de medición, y un diagnóstico inicial mediante métodos cualitativos como encuestas también resulta útil
  • GitHub destaca, con casos propios, que las mejoras centradas en la calidad terminan teniendo un efecto positivo también en la velocidad y la satisfacción de los desarrolladores

Métricas de éxito de ingeniería de GitHub

  • Quality
    • Change failure rate: tasa de fallas por cambio
      → Proporción de cambios que causaron incidentes o problemas
      • Cálculo: (número de despliegues fallidos / número total de despliegues) × 100
      • Tip: acordar claramente dentro del equipo qué se considerará una falla (por ejemplo, rollback, alertas de monitoreo, etc.)
    • Failed deployment recovery time: tiempo de recuperación de un despliegue fallido
      → Tiempo que toma revertir un despliegue fallido o restaurarlo a un estado normal
      • Cálculo: mediana de momento de recuperación completa − momento en que ocurrió la falla para cada despliegue fallido
      • Tip: se recomienda extraerlo automáticamente desde el sistema de alertas o los logs. Se recomienda usar la mediana en vez del promedio para evitar el efecto de valores extremos
    • Code security and maintainability: seguridad y mantenibilidad del código
      • Cálculo: evaluación integral de cantidad de vulnerabilidades, complejidad, cobertura y más, usando herramientas de análisis estático, GitHub Advanced Security, CodeQL, etc.
      • Tip: configurar escaneos automáticos periódicos. Útil para medir el efecto de refactorizaciones o cambios en políticas de seguridad
  • Velocity
    • Lead time: lead time
      → Tiempo que tarda un cambio de código en reflejarse en producción
      • Cálculo: tiempo desde que se crea el PR hasta su despliegue después del merge
      • Tip: usar la mediana en lugar del promedio reduce distorsiones. Si el lead time es largo, conviene medir por separado el tiempo de espera del PR o los retrasos en revisión
    • Deployment frequency: frecuencia de despliegue
      → Qué tan seguido se realizan despliegues a producción
      • Cálculo: número de despliegues durante un período determinado (por día o por semana)
      • Tip: hay que definir claramente si se incluirán también los despliegues automatizados; para equipos pequeños, una medición semanal puede ser más adecuada
    • PRs merged per developer: PR fusionados por desarrollador
      • Cálculo: número total de PR fusionados / número de desarrolladores que contribuyeron
      • Tip: usarlo no como herramienta de comparación, sino para medir la eficiencia del workflow del equipo. Debe interpretarse junto con el tamaño o la complejidad de los PR
  • Developer Happiness
    • Flow state experience: experiencia de estado de flujo
      • Cálculo: evaluar mediante encuestas a desarrolladores la “frecuencia/duración reciente de experiencias de concentración profunda”
      • Tip: se recomienda una medición periódica de al menos una vez al mes. Incluir respuestas abiertas también puede aportar insights cualitativos
    • Engineering tooling satisfaction: satisfacción con las herramientas de ingeniería
      • Cálculo: recopilar mediante encuestas la satisfacción con el uso de herramientas y las mejoras deseadas
      • Tip: si se separa por categorías de herramienta (IDE, CI, seguimiento de issues, etc.), es posible detectar puntos de mejora más concretos
    • Copilot satisfaction: satisfacción con el uso de Copilot
      • Cálculo: encuesta de satisfacción a usuarios con licencia de Copilot (NPS o puntuación)
      • Tip: se recomienda comparar distintos momentos, como justo después de la adopción y tres meses después. El feedback puede servir para mejorar la capacitación y los casos de uso
  • Business Outcomes
    • AI leverage: aprovechamiento de la IA
      • Cálculo: proporción de commits con Copilot, tasa de adopción de sugerencias de código de IA, tiempo de uso, etc.
      • Tip: se puede usar Copilot Telemetry API de GitHub o instrumentación interna. El análisis es más útil si se combina con feedback cualitativo
    • Engineering expenses to revenue: proporción entre gastos de ingeniería e ingresos
      • Cálculo: gastos relacionados con ingeniería / ingresos totales
      • Tip: es necesario alinear los criterios contables internos. Se recomienda analizar tendencias mensuales o trimestrales para comparar
    • Feature engineering expenses to total engineering expenses: proporción del costo de desarrollo de funcionalidades sobre el gasto total de ingeniería
      • Cálculo: (gastos relacionados con desarrollo de funcionalidades / gasto total de ingeniería)
      • Tip: para medirlo con precisión, hay que definir de antemano criterios claros para clasificar los costos no relacionados con funcionalidades, como mantenimiento, infraestructura o testing

[Tres pasos para el éxito de ingeniería]

Step 1: Identify the current barriers to success

  • Identificar los problemas del proceso de desarrollo actual y las barreras que bloquean el éxito de la ingeniería es clave
  • Esto sirve como línea base (baseline) para definir la dirección de mejoras futuras y sus prioridades
  • Enfoque
    • Analizar todo el flujo del SDLC (Software Development Life Cycle) para detectar cuellos de botella
    • En GitHub analizan con base en 12 métricas estándar, pero se puede usar solo una parte según las características de la organización
  • Participación del equipo
    • No debe definirlo una sola persona líder; todo el equipo debe definir en conjunto el proceso de mejora
    • Incluso empezar una conversación significativa con solo unas pocas métricas es suficiente
  • Metodología
    • 1. Entender el flujo base

      • Revisar el flujo completo de ingeniería dividiéndolo así:
        • Planificar (Plan)Desarrollar (Develop)Revisar (Review)Compilar (Build)Probar (Test)Liberar (Release)Operar (Operate)
    • 2. Recopilar señales cuantitativas

      • Se analizan datos cuantitativos como los siguientes:
        • Frecuencia de despliegue: qué tan seguido se despliega
        • Lead time: tiempo desde que se escribe el código hasta que se despliega
        • Tasa de fallas por cambio: proporción de errores que ocurren después del despliegue
        • MTTR (tiempo medio de recuperación): tiempo que toma recuperarse después de que ocurre un problema
    • 3. Recopilar señales cualitativas

      • Recopilar feedback basado en la experiencia de desarrolladores y equipos:
        • Cuándo sienten ineficiencia los miembros del equipo
        • Qué herramientas o procedimientos causan problemas de forma repetida
        • Qué actividades generan la mayor carga psicológica
      • Método:
        • Usar encuestas, retrospectivas e entrevistas 1:1
        • También se puede usar una lista predefinida de preguntas de ESSP
    • 4. Definir los problemas clave

      • Definir las barreras (Barrier) a partir de los datos recopilados
      • Ejemplos:
        • "El lead time es largo y retrasa el desarrollo de nuevas funciones"
        • "Las fallas de build son frecuentes y reducen la confiabilidad del despliegue"
        • "Los desarrolladores sufren con frecuencia cambios de contexto (Context switching)"
      • Los problemas deben expresarse de forma específica y observable
    • 5. Priorizar métricas

      • En lugar de intentar mejorar todas las métricas al mismo tiempo, enfocarse en una o dos métricas con el mayor impacto
      • Esta prioridad se convierte luego en el criterio para intentar mejoras y medir resultados en el Step 2 y el Step 3
  • Consejos para ejecutar con éxito el Step 1
    • 1. Enfocarse en la causa raíz, no en la apariencia superficial
      • No hay que juzgar solo por los síntomas visibles; hay que profundizar hasta la raíz del problema
        • Ejemplo: puede parecer que la lentitud se debe a las 'pruebas manuales', pero la causa real podría ser la falta de confianza en las pruebas automatizadas
      • Para esto, es útil tomar como referencia los antipatterns (antipatrones) que suelen aparecer en ingeniería de software
    • 2. Tomar como referencia los antipatterns
      • Un antipattern es una solución usada con frecuencia que en realidad no resuelve el problema y hasta puede generar efectos secundarios
      • GitHub ofrece como recurso aparte ejemplos de antipatterns que pueden existir en un equipo, por lo que pueden usarse como herramienta de autoevaluación
    • 3. Involucrar a las personas adecuadas
      • En la Task 1 del Step 1, es importante recibir aportes de personas con distintos roles
        • Ejemplo: desarrolladores, testers, operaciones, seguridad, product managers, etc.
      • Esto permite entender el workflow completo de forma multidimensional y evitar pasar por alto perspectivas específicas
    • 4. Usar en equilibrio datos cuantitativos y cualitativos
      • Las métricas por sí solas no permiten entender todo el contexto
      • Además del análisis cuantitativo, también hay que recopilar feedback cualitativo sobre problemas psicológicos, culturales y de colaboración del equipo
      • Ejemplo: baja moral del equipo, falta de comunicación o quejas en retrospectivas no se reflejan en cifras
    • 5. No elegir demasiadas barreras
      • No intentes resolver todos los problemas de una vez; enfócate en las barreras más urgentes y de mayor impacto
      • Si al inicio se asumen demasiadas tareas de mejora, existe el riesgo de perder capacidad de ejecución y momentum
    • 6. Asegurar la seguridad psicológica
      • Hay que crear un entorno donde los miembros del equipo puedan expresar sus opiniones con honestidad sin temor a desventajas o represalias
      • Esta es una condición clave para sacar a la luz los problemas reales y aumenta la confiabilidad y la efectividad de las actividades de mejora
    • 7. Comparar es para aprender, no para evaluar
      • Las comparaciones de métricas entre equipos o las diferencias de workflow deben usarse para obtener insights, no para evaluaciones cuantitativas de desempeño
      • Como cada equipo tiene contextos, objetivos, stack tecnológico y restricciones distintas, las comparaciones simples pueden llevar a malentendidos
      • En cambio, se debe fomentar una cultura de aprendizaje que comparta qué está funcionando bien y extraiga lecciones

Paso 2: Evaluar qué se necesita hacer para alcanzar tu objetivo

  • Propósito
    • Etapa en la que se analiza qué cambios deben implementarse para resolver la barrera principal (Barrier) definida en el Paso 1
    • Va más allá de introducir una función o cambiar una herramienta; busca identificar las causas raíz y las soluciones a nivel organizacional, técnico y cultural
  • 1. Análisis de las causas raíz del estado actual

    • En lugar de quedarse solo con resultados como "la velocidad es lenta" o "la satisfacción es baja", hay que ir más allá para entender:
      • por qué es lento,
      • qué razones estructurales u organizacionales existen,
      • y distinguir entre lo que se puede cambiar y lo que no
    • Herramientas disponibles:
      • técnica de los 5 Whys
      • diagrama de espina de pescado (causa-efecto)
      • análisis de retroalimentación cualitativa en las retrospectivas del equipo
  • 2. Generación de posibles soluciones

    • Hacer una lluvia de ideas de soluciones técnicas, culturales y de proceso para el problema
    • Ejemplos:
      • Técnico: mejorar la velocidad de las pruebas, optimizar el pipeline de CI/CD
      • Cultural: ajustar las prácticas de code review, mejorar el onboarding
      • Proceso: limitar el tamaño de los PR, cambiar los criterios de merge
    • Técnica recomendada por GitHub:
      • combinar soluciones basadas en la observación con mejoras centradas en las personas
  • 3. Evaluación del impacto y los riesgos

    • Para cada solución, evaluar los siguientes elementos:
      • impacto esperado: en qué métricas de mejora puede influir
      • viabilidad: recursos del equipo y capacidad realista de ejecución
      • aceptación organizacional: nivel de resistencia al cambio
      • diferencia entre efectos de corto y largo plazo: si genera resultados rápidos o un cambio sostenible
    • Para esto, se recomienda un pilot (prueba piloto)
      • probarlo primero en un equipo pequeño y, tras recopilar feedback, decidir si se amplía
  • 4. Priorización y comunicación

    • Entre varias soluciones, priorizar con base en los siguientes criterios:
      • la que pueda generar el mayor impacto
      • la que sea más factible de ejecutar
      • la que resuelva el punto de dolor más urgente
    • Esta decisión debe compartirse con el equipo y lograr su acuerdo, y
      • conviene dejarla claramente expresada en forma de OKR o metas de mejora
  • Consejos para ejecutar con éxito el Paso 2
    • 1. Considerar siempre la sostenibilidad a largo plazo
      • centrarse solo en resultados de corto plazo puede terminar provocando problemas a largo plazo
        • Ejemplo: introducir una herramienta nueva puede mejorar la velocidad de inmediato, pero si no viene acompañada de capacitación, soporte y gestión del cambio, puede terminar generando errores y confusión
      • Por eso, cualquier intento de mejora debe ser una estrategia que también considere el mantenimiento y la posibilidad de escalarla
    • 2. Considerar los trade-offs entre cada área (zone)
      • Hay que cuidar que un cambio para mejorar un área (por ejemplo, la velocidad) no sacrifique otra (por ejemplo, la satisfacción de los desarrolladores o la calidad)
        • Ejemplo: flexibilizar los criterios de revisión puede aumentar la velocidad, pero empeorar la calidad del código o el cansancio de los desarrolladores
      • Siempre hace falta un enfoque equilibrado, teniendo en cuenta que el impacto puede extenderse a varias áreas
    • 3. Involucrar al equipo desde el principio
      • cuando el equipo participa directamente y construye el cambio en conjunto, la probabilidad de éxito es mayor
      • recoger la opinión de los miembros para que el cambio pueda darse de forma bottom-up
      • un cambio impuesto de forma unilateral y top-down puede provocar resistencia y desinterés
    • 4. Definir con claridad las métricas de éxito
      • Antes de implementar el cambio, hay que acordar qué significa el éxito
      • Ejemplo: si el objetivo es “reducir el tiempo de despliegue”,
        • métrica rezagada: disminución real del tiempo de despliegue
        • métrica adelantada: reducción del tiempo de espera de los PR, aumento en las respuestas de encuestas de desarrolladores sobre “percibir una mejora en la velocidad de los PR”
      • Lo ideal es definir tanto leading indicators como lagging indicators
    • 5. Priorizar experimentos rápidos sobre planes perfectos
      • Un enfoque iterativo de probar incluso cambios pequeños con rapidez y mejorarlos a partir del feedback resulta efectivo
        • Al inicio, aunque el intento sea imperfecto, conviene probar en pequeño y ampliar solo si su efectividad queda demostrada
      • Esto ayuda a reducir la probabilidad de fracaso y fortalece la agilidad y capacidad de adaptación del equipo frente al cambio
    • 6. Empezar por cambios de gran impacto con poco esfuerzo
      • Cuando hay muchos cambios y son complejos, conviene empezar por mejoras de “alto impacto y bajo costo”
      • Ejemplo: introducir una guía simple de revisión o eliminar notificaciones innecesarias puede aplicarse rápido y aun así tener un gran efecto en la satisfacción
      • Las primeras experiencias de éxito dan confianza al equipo y aportan el impulso para avanzar hacia problemas más difíciles

Paso 3: Implementa tus cambios, monitorea los resultados y ajusta

  • Ejecutar dentro de la organización el intento de mejora (Intervention) derivado en el Step 2,
    medir sus resultados y, si hace falta, ajustarlo o iterarlo para buscar un éxito de ingeniería continuo
  • 1. Implementación (Implement the change)

    • Antes de implementar, se debe dejar claro lo siguiente:
      • ¿Qué cambio se va a realizar?
      • ¿Quién será responsable?
      • ¿Con qué métricas se evaluará?
      • ¿Desde cuándo y hasta cuándo se medirá?
    • Consideraciones durante la implementación:
      • Asignar responsables: dejar claro el ownership
      • Onboarding y capacitación del equipo: todos los integrantes deben entender por qué el cambio es necesario y qué va a cambiar
      • Documentar el cambio: dejar registro para futuras retrospectivas e iteraciones
    • Ejemplos de adopción:
      • Cambiar la estrategia de build cache para mejorar la velocidad de CI/CD
      • Cambiar la política de code review (por ejemplo, introducir la regla de responder en menos de 1 día)
  • 2. Monitoreo (Monitor the change)

    • Después de implementar la mejora, hacer seguimiento de sus efectos con las métricas definidas de antemano
      • Si se redujo el lead time
      • Si disminuyó la tasa de fallos
      • Si mejoró la satisfacción de los desarrolladores, etc.
    • Herramientas:
      • GitHub Insights, Copilot Telemetry, sistemas internos de BI
      • Dashboards de reportes semanales/mensuales
      • Encuestas a desarrolladores o feedback de retrospectivas
    • Puntos importantes:
      • Debe ser posible compararlo con la línea base (baseline)
      • Es importante observar la tendencia, no solo un valor aislado
  • 3. Recolección de feedback (Collect feedback)

    • Además de las métricas cuantitativas, es necesario recoger feedback sobre si el cambio realmente ayudó desde la perspectiva de los desarrolladores
      • Usar retrospectivas, encuestas anónimas, reuniones 1:1, etc.
      • Verificar si la mejora realmente se percibe como útil o si, por el contrario, genera fatiga
    • Los cambios implementados apresuradamente sin consenso organizacional pueden provocar resistencia y rechazo
  • 4. Ajustar o iterar (Adjust as needed)

    • Si el resultado del intento de mejora no cumple las expectativas o trae efectos secundarios, se puede responder así:
      • Revertir o complementar el cambio
      • Mantener solo algunos elementos y reducir el alcance
      • Expandir su aplicación a una escala mayor
    • Independientemente de si el cambio fue un éxito o un fracaso, siempre se debe aprender lo siguiente:
      • ¿Qué elementos fueron efectivos?
      • ¿Qué factores actuaron como obstáculos?
      • ¿Qué habría que cambiar la próxima vez?
  • Consejos para ejecutar con éxito el Step 3
    • 1.No esperar perfección inmediata
      • No todos los cambios generan una mejora visible de inmediato
        • Puede tomar tiempo para que los efectos aparezcan
        • Como el equipo también necesita un proceso de adaptación al cambio, la paciencia y la observación continua son importantes
      • Al inicio, puede ser útil usar herramientas de feedback cualitativo, como encuestas, para entender cómo se percibe el cambio
    • 2.Seguir iterando y mejorando el cambio
      • Aunque algo haya funcionado una vez, no se trata de dejarlo igual, sino de que el cambio también debe evolucionar y ajustarse de forma constante
      • Ante nuevos problemas o cambios en el entorno externo, también puede ser necesario revisar de nuevo las mejoras existentes
      • Hay que alentar al equipo a verlo como una actividad regular y a mantener el ciclo de mejora
    • 3.Prestar atención a efectos secundarios no intencionales
      • Algunos cambios pueden generar fricciones inesperadas en otras áreas
        • Ejemplo: mejorar la velocidad de despliegue es positivo, pero si la validación de calidad es débil, puede terminar aumentando los bugs
      • Además de las métricas, también hay que revisar los cambios en el flujo general del workflow, y si aparecen señales anómalas, actuar de inmediato
    • 4.Seguir revisando el estado de seguridad psicológica
      • Incluso después del cambio, debe mantenerse un entorno donde el equipo pueda plantear problemas libremente
      • Para evitar que se acumulen problemas que nadie dice, hace falta crear un ambiente donde los integrantes puedan dar feedback honesto
      • Inconformidad con el proceso cambiado, aumento excesivo de carga de trabajo, estrés inesperado, etc.
    • 5.Evaluar continuamente los efectos a largo plazo
      • La clave no es el resultado de corto plazo, sino el rendimiento sostenido y la mejora de la moral del equipo
      • Con el paso del tiempo:
        • si el cambio ya se asentó
        • si no surgieron nuevos efectos secundarios o problemas
        • si hay mantenimiento o caída del rendimiento, todo esto debe revisarse continuamente
    • 6.Usar el feedback como oportunidad de aprendizaje
      • Incluso los cambios fallidos son activos de aprendizaje valiosos
      • Hay que analizar qué salió mal con base en datos y feedback e incorporarlo al siguiente intento
      • También es importante fomentar una cultura en la que el equipo vea el fracaso como una oportunidad de aprendizaje

Beyond the steps: Make the playbook work for you

  • Adaptación

    • Elegir las métricas y los métodos de medición (telemetría vs. encuestas) según las características de la organización
    • No se debe medir por medir, sino usarlo como herramienta para una mejora real
  • Gestión del cambio

    • Es importante usar frameworks de gestión del cambio como ADKAR o el modelo de Kotter para ayudar a que la organización se adapte bien al cambio
  • Mentalidad de crecimiento

    • Ver cada intento como una oportunidad de aprendizaje, y una actitud que acepta el fracaso es clave para la mejora continua
  • Gamificación

    • Diseñar recompensas basadas en motivación puede tener efectos positivos, pero si se diseña mal, puede incluso provocar baja calidad o desequilibrios

Alternatives to the GitHub Engineering System Success Playbook

  • Según la situación, en lugar de ESSP también se puede optar por análisis simples centrados en el uso de features o estrategias de mejora basadas en herramientas individuales
  • Lo importante es un enfoque realista adecuado para el equipo y la organización, junto con un esfuerzo continuo de mejora

Aún no hay comentarios.

Aún no hay comentarios.