DevOps ha emergido como una filosofía esencial que tiende un puente entre el desarrollo de software y las operaciones de TI. Va más allá de solo utilizar herramientas de DevOps. Un equipo de DevOps exitoso no solo acelera el proceso de entrega, sino que garantiza la calidad y la fiabilidad. Sin embargo, crear un equipo así requiere una combinación armoniosa de herramientas, cultura, procesos, colaboración y más. ¿Cuáles son los componentes críticos de un equipo DevOps de primera, y cómo pueden las organizaciones integrarlos para obtener los mejores resultados? Como parte de esta serie, tuvimos el placer de entrevistar a Dylan Etkin, cofundador y CEO de Sleuth.
Hola, Dylan – ¿Puedes compartirnos tu historia personal?
Comencé mi carrera como ingeniero de software. Tuve la suerte de unirme a una pequeña startup, Atlassian, como su empleado número 20. Pasé 10 años en Atlassian aprendiendo muchísimo y viendo crecer la organización de 20 a 1200 empleados. Trabajé como uno de los primeros 3 ingenieros en Jira, fui el primer Arquitecto de Jira y líder de Ingeniería de Bitbucket, haciendo crecer ese producto de 40K a 2M de usuarios.
Dejé Atlassian y me uní a una pequeña startup, Statuspage. Un año después, Statuspage fue adquirida por Atlassian y de repente me encontré de regreso en la nave nodriza. Después de 3 años liderando ese equipo en Atlassian, decidí emprender mi propio camino, fundando Sleuth para convertir en producto lo que siempre ha sido mi pasión: construir equipos de ingeniería eficientes.
Siempre me han fascinado las herramientas para desarrolladores y ayudar a que los equipos sean eficientes y aprendan continuamente.
¿A quién le das crédito por haberte ayudado a alcanzar el éxito?
Muchas personas me han ayudado en el camino. Cuanto más viejo me hago, más me doy cuenta de la red tan especial que he construido y cuán abiertos están todos a ayudar cuando se les pide.
Un ejemplo que destaca es John Kodumal, cofundador y CTO de LaunchDarkly. John y yo fuimos compañeros en Atlassian. Cuando él dejó la empresa para fundar LaunchDarkly, siempre fue muy abierto al compartir su experiencia en la startup.
Cuando comencé a motivarme para iniciar Sleuth, él estuvo apoyándome en todo momento. Desde intercambiar ideas hasta conversaciones abiertas sobre cómo avanzar, e incluso apuntándose como nuestro primer cliente, John siempre ha ayudado en cada punto de mi trayectoria.
¿Puedes compartir con nosotros tres fortalezas, habilidades o características que te ayudaron a llegar a este punto en tu carrera? ¿Cómo pueden otros desarrollarlas activamente en sí mismos?
- Persistencia. La habilidad y la inteligencia solo te llevan hasta cierto punto. Volver una y otra vez a un problema es mucho más poderoso. La persistencia, incluso ante múltiples fracasos, ha definido el éxito para mí.
- Atención al detalle. Esta es una característica que siempre me ha salido de forma natural. Como ingeniero, es una habilidad vital que te permite cumplir con las tareas de una manera sobresaliente. En un entorno startup, esta capacidad es aún más importante. Cuando guías un producto desde la visión hasta la realidad, la atención al detalle marcará la diferencia entre un producto mediocre y algo que los usuarios adoran.
- Delegar. Por mucho que debas asumir plenamente tu negocio, una startup rápidamente se convierte en un ejercicio de contratar gente más inteligente que tú en muchas áreas y aceptar ceder tus "legos" para que otros puedan tener éxito y empujar tu negocio hacia adelante.
¿En qué habilidades sigues trabajando actualmente?
Siempre estoy trabajando en muchas cosas; nunca faltan habilidades por desarrollar. Lo que más tengo en mente ahora es el arte de sacar lo mejor de tu gente. Todos son diferentes, y saber cómo proveer un ambiente donde cada individuo pueda dar lo mejor de sí es todo un reto.
Hablemos de tener un equipo DevOps exitoso. ¿Cuáles son los objetivos clave que podría identificar un equipo DevOps en una jornada de transformación digital?
Los equipos DevOps tienen el poder de llevar el trabajo desde el concepto hasta su lanzamiento exitoso en producción, de manera eficiente. Por lo tanto, el objetivo principal de un equipo DevOps es construir las herramientas, procesos y cultura que permitan a los desarrolladores individuales llevar rápidamente su trabajo desde el concepto hasta su lanzamiento con éxito.
Los objetivos que ayudan a alcanzar este objetivo principal son:
- Capacidad para definir el trabajo en tamaños de lote pequeños
- Una canalización CI/CD totalmente automatizada
- Observabilidad y entornos de preproducción que actúan como redes de seguridad para que los desarrolladores puedan lanzar cambios a producción con confianza
- Un proceso claro para saber qué hacer cuando los cambios salen mal. Todos saben cómo detectar fallos y devolver el sistema a un estado funcional
- Compromiso del resto de la organización: PMs, Marketing, Soporte, Ventas y Ejecutivos. Los equipos no podrán llevar a cabo una transformación DevOps sin el apoyo de toda la organización
¿Existen desafíos o errores comunes que los equipos DevOps deban considerar?
Son demasiados para enumerar. Uno que destaca es reconocer que practicar DevOps significa trasladar más responsabilidad al desarrollador. Esto no es gratis y, si no inviertes en procesos y herramientas, corres el riesgo de construir un sistema que no deje tiempo para que los desarrolladores realmente hagan su trabajo.
También corres el riesgo de construir un entorno en el que los desarrolladores se quemen rápidamente. Debes recordar que las personas solo tienen cierta capacidad, por lo que tienes que ser consciente de lo que implementas para apoyar a los desarrolladores que practican DevOps.
¿Cómo puede la colaboración y comunicación efectiva entre los miembros del equipo mejorar la productividad y el éxito de un equipo DevOps, y qué prácticas pueden facilitar esto?
La comunicación y la colaboración son necesarias para practicar DevOps. Algunas prácticas importantes incluyen:
- Utilizar un rastreador de incidencias para todo el trabajo e incluir ese contexto e información en los commits y revisiones de código
- Revisión de código con pull requests
- Proporcionar una solución de chat en tiempo real como Slack para tu equipo
- Notificaciones de despliegue basadas en el equipo en Slack o en tu herramienta de ChatOps
- Aprobaciones en Slack para promover cambios de entornos pre-producción a producción
- Notificaciones individuales a los desarrolladores cuando sus cambios se despliegan y cuando han superado condiciones de fallo
- Visibilidad del equipo en incidentes y períodos en los que los despliegues deben esperar
- Demostraciones del equipo junto con PMs y otros interesados
- Reuniones rápidas diarias (reuniones rápidas diarias)
¿Qué rol desempeña CI/CD en DevOps y cuáles son las mejores prácticas para implementar pipelines de CI/CD que aseguren un proceso de liberación de software fluido y confiable?
CI/CD es, posiblemente, el componente de herramientas más importante que apoya a un equipo que practica DevOps. Lo ideal es que los equipos tengan un pipeline de despliegue totalmente automatizado que se ejecute en un tiempo razonable, para que los desarrolladores no tengan una larga espera y puedan guiar sus cambios hacia producción. Es importante incluir CI y la ejecución de pruebas como parte de este pipeline ideal. Ejecutar un conjunto sólido de pruebas contra tus cambios como filtro para el despliegue es tu principal red de seguridad para asegurar que se publiquen buenos cambios.
Si los equipos solo buscan desplegar una vez por semana, entonces es posible tener un pipeline de despliegue que no esté completamente automatizado. Sin embargo, si tu equipo busca desplegar al menos una vez al día, el proceso debe estar totalmente automatizado y el despliegue debe ser un "no-evento".
¿Cómo contribuye fomentar una cultura DevOps y mentalidad DevOps al éxito general de un equipo DevOps y qué estrategias pueden usar las organizaciones para promover esta cultura entre sus equipos de desarrollo y operaciones?
Para desarrolladores:
- La planificación de sprint semanal o quincenal puede ayudar a definir el tamaño de las tareas y a crear un acuerdo en equipo sobre cómo se ajustarán estas tareas a esa ventana de tiempo
- CI automatizado contra la rama de release y visibilidad del equipo sobre esos resultados para ayudar a mantener la rama de release en estado desplegable
- Mantener un rol de "persona encargada" en el equipo en el que esté claro de quién es la responsabilidad de mantener la rama de lanzamiento en estado de construcción
- Uno de los mecanismos más útiles para poder enviar trabajo incompleto es adoptar alguna forma de flags de características (feature flagging).
- También puede ser muy efectivo desplegar cada pull request de uno en uno. Adoptar este patrón permite incluir la revisión del tamaño del lote de un cambio junto con la revisión de código del pull request. Si un lote es demasiado grande, otros miembros del equipo pueden pedir al desarrollador que divida su cambio en varios pull requests.
- Tener suficientes métricas y comprender sus normas para poder verificar un despliegue
- Comprender cómo escalar y revertir si es necesario
- Estar empoderados para desplegar sus propios cambios a todos los entornos que mantienes y hacerlo rápida y exitosamente
Para PMs y diseñadores:
- Incluir a un PM en el proceso de planificación para que tenga oportunidad de expresar las necesidades del cliente en los despliegues incrementales.
- Implementar flags de características, permitiendo que el código salga pero aún no esté expuesto a los clientes. Esto ayuda a los PMs a mantener la flexibilidad que necesitan mientras los desarrolladores avanzan rápidamente.
- Tener un mecanismo acordado para la retroalimentación y el retrabajo, como una incidencia asignada directamente a un desarrollador. Una estrategia para resolver el tema del trabajo incompleto es que el equipo adopte ciclos de seis semanas.
Para Engineering Managers:
- Implementar procesos que faciliten la comunicación, como reuniones recurrentes de planificación, revisiones de código y demos semanales.
- Comprometerse a dedicar tiempo de ingeniería para mantener el paso de construcción de la rama de lanzamiento. Mantener el flujo de código también significa invertir en este nuevo sistema. Cuando el equipo identifica un cuello de botella, el gerente debe estar en condiciones de permitir que el equipo lo elimine (por ejemplo, reparar pruebas de CI que sean inestables en más del 20%).
- Implementar herramientas que ayuden a medir continuamente las métricas DORA
Para directivos:
- Haz visibles las métricas de Accelerate para tus proyectos y ponlas a disposición, con contexto, de tus ejecutivos.
- Haz visibles tu tiempo de actividad o el equivalente para tus aplicaciones.
- Proporciona a tu equipo ejecutivo la misma información de alto nivel sobre los grandes bloques de funcionalidad que se están lanzando.
- Si eres un ejecutivo, comprende que el cambio lleva tiempo. Sé firme al exigir a tus equipos el cumplimiento de objetivos de alto nivel pero flexible sobre cómo los alcanzan. Confía, pero verifica.
- Tómate el tiempo de explicar a tu organización cómo entregas valor a tus clientes. Explica cómo funciona la entrega incremental, qué cosas se lanzarán en un solo gran evento, y cómo esta forma de trabajar te permite entregar valor a los clientes más rápido.
¿Cuáles son los componentes esenciales de un equipo DevOps exitoso?
1 . El equipo trabaja en una cultura sin culpabilización.
El desarrollo de software es un deporte de equipo. Los incidentes y errores son oportunidades para que los equipos aprendan, no oportunidades de culpar. Una cultura sin culpabilización puede ir más allá de los incidentes. Al fijar metas de mejora, un equipo puede enfocarse en mejorar los resultados en lugar de culpar a individuos o procesos por lo que no está funcionando como debería.
2 . Los despliegues no son un acontecimiento importante.
Para lanzar en pequeños incrementos y responder a incidentes y comentarios de los clientes rápidamente, el despliegue debe ser fácil y no generar miedo ni ansiedad. Si un equipo no confía en sus despliegues, o si estos tardan demasiado o requieren pasos manuales, esto generará miedo y duda, lo cual impedirá que los equipos adopten DevOps.
3 . Los desarrolladores tienen la capacidad individual de llevar los cambios desde el concepto hasta el lanzamiento fiable en producción. DevOps funciona cuando transfieres la responsabilidad de todo el proceso —desde la idea hasta el lanzamiento— a manos de los desarrolladores. Esto permite que tu equipo divida el trabajo en pequeños lotes y entregue valor en pequeños incrementos al cliente rápidamente.
4 . El equipo cuenta con redes de seguridad, como observabilidad y medidas contra fallos, para tener la confianza de avanzar rápido (ésta es una de las muchas ventajas de las herramientas de observabilidad de datos). Ha quedado atrás la época de avanzar rápido y romper cosas. Ahora, necesitas avanzar rápido pero de forma fiable. Para lograrlo, debes tener sistemas automáticos de protección.
5 . Toda la organización está comprometida con trabajar en un flujo DevOps.
¿Qué tendencias emergentes prevés en el panorama DevOps que podrían impactar significativamente las estrategias de transformación digital en el futuro?
Esto puede parecer una respuesta obvia en este momento, pero las herramientas de IA ya están transformando la manera en que trabajan los desarrolladores y sin duda tendrán un gran impacto en cómo se practica DevOps en el futuro. Al menos, la IA se usará para detectar e identificar fallos de formas que hoy no son posibles.
Si cumple todas sus promesas, reemplazará por completo los complicados procesos de despliegue y pruebas que tenemos actualmente.
Suscríbete al boletín de The CTO Club para más ideas, recopilaciones, preguntas y respuestas, ¡y mucho más!
