- enero 28, 2025
- 0 Comments
- By Laura García Bustos
Las metodologías ágiles y DevOps son conceptos que se aplican en la esfera de la gestión de proyectos y que surgieron al final del pasado siglo. Mientras que las metodologías ágiles tienen un campo de aplicación más amplio, DevOps se centra casi exclusivamente en el mundo del desarrollo de software, pero trataremos también de su posible aplicación en otros ámbitos.
Relación entre metodologías ágiles, DevOps y Agile
Las metodologías ágiles surgieron en la década de 1990 para gestionar proyectos de una forma más flexible y eficaz. Por aquel entonces se entendía un proyecto como algo rígido y detallado que una vez planteado no permitía modificaciones. El cliente exponía sus necesidades, el proveedor planteaba sus sugerencias y la síntesis se reflejaba en un plan que había que seguir a rajatabla desde el principio hasta el final. Toda rigidez implica fragilidad, y tanto cliente como proveedor pronto lo descubrían: al cliente le surgían nuevas necesidades antes de que se le entregara el proyecto y el equipo encargado de llevarlo a cabo podría hallar formas diferentes de implementarlo. Para evitar estos inconvenientes las metodologías ágiles se basan en la premisa de que en el proyecto se pueden introducir modificaciones y que, por lo tanto, es necesario adoptar un enfoque flexible y adaptativo.
Esta filosofía queda reflejada en el Manifiesto Ágil, que una vez publicado en el año 2001 marcó el nacimiento del movimiento ágil. Estas son sus características:
- Colaboración y trabajo en equipo: Fomentar la comunicación abierta y frecuente entre los miembros del equipo, así como la colaboración estrecha con los clientes y otras partes interesadas.
- Entrega incremental: Esta una de las características clave. Los proyectos se dividen en iteraciones más pequeñas y manejables, llamadas sprints. Cada sprint o iteración se compone de una parte de las tareas pendientes y deben aportar un avance en la ejecución y un incremento del valor funcional del proyecto respecto a lo entregado. El cliente debe ser capaz de probar la entrega y aportar el feedback, las impresiones recogidas, que deben permitir equipo encargado de la ejecución del proyecto en la elaboración de las siguientes entregas.
- Adaptabilidad: Las metodologías ágiles reconocen que los requisitos pueden cambiar a medida que se obtiene una mejor comprensión del proyecto. Por lo tanto fomentan ajustes y cambios en los objetivos y en el alcance del proyecto.
- Enfoque en el cliente: Se da prioridad a la satisfacción del cliente al involucrarlo activamente en el proceso de desarrollo y en la toma de decisiones. Ya hemos comentado la importancia que se da al feedback que aporte.
- Retroalimentación continua: Se busca obtener comentarios y aprendizaje constante a través de revisiones y retrospectivas periódicas, lo que permite realizar mejoras continuas en el proyecto. Como ya hemos comentado en la entrega incremental.
Si utilizamos el sustantivo Agile hacemos referencia a los principios que establece el Manifiesto Ágil de forma general. Mientras que si hablamos de metodologías ágiles podemos estar haciendo referencia a enfoques específicos de la gestión de proyectos que se adhieran a estos principios. Algunos de estos enfoques son: Scrum, Kanban o Extreme Programming (XP).
El término DevOps está formado a partir de las palabras Development (Desarrollo) y Operations (Operaciones) para reflejar la que es su principal característica, la estrecha colaboración entre estos dos equipos que históricamente han trabajado de manera independiente, y que es la clave de este modelo de ejecución de proyectos. El enfoque de DevOps busca romper los silos organizacionales entre estos 2 equipos y fomentar una comunicación más efectiva y una mayor responsabilidad compartida entre ellos, haciéndoles trabajar juntos en todas las etapas del ciclo de vida del software, desde el diseño y el desarrollo hasta las pruebas, el despliegue y la monitorización.
Resulta evidente que DevOps y las metodologías ágiles comparten muchos principios: colaboración, entrega continua, retroalimentación, etc., sin embargo, para entender la relación entre ellos conviene señalar qué es lo que los diferencia. Mientras que las metodologías ágiles se centran en la relación entre desarrolladores y clientes, DevOps busca implicar al departamento de sistemas en el desarrollo del proyecto estrechando su relación con los desarrolladores. Resumiendo, por un lado las metodologías ágiles buscan estrechar la relación entre proveedor y cliente, por otro lado, en el terreno del proveedor, DevOps busca implicar a los departamentos de desarrollo e IT. Para que una metodología resulte realmente ágil es muy recomendable que el equipo de desarrollo cuente con el equipo de operaciones.
SCRUM, un ejemplo de metodología ágil
Según la Wikipedia SCRUM surgió en Japón en los años 80, luego, es anterior al manifiesto ágil al analizar cómo desarrollaban los nuevos productos las principales empresas de manufactura tecnológica: Fuji-Xerox, Canon, Honda, NEC, Epson, Brother, 3M y Hewlett-Packard. En 1995, Ken Schwaber presentó “Scrum Development Process” en OOPSLA 95 (Object-Oriented Programming Systems & Applications conference), un marco de reglas para desarrollo de software, basado en los principios de Scrum.
Según la web de proyectoságiles.org Scrum es un proceso en el que se aplican de manera regular un conjunto de buenas prácticas para trabajar colaborativamente, en equipo, y obtener el mejor resultado posible de un proyecto. Estas prácticas se apoyan unas a otras y su selección tiene origen en un estudio de la manera de trabajar de equipos altamente productivos. En Scrum se realizan entregas parciales y regulares del producto final, priorizadas por el beneficio que aportan al receptor del proyecto. Por ello, Scrum está especialmente indicado para proyectos en entornos complejos, donde se necesita obtener resultados pronto, donde los requisitos son cambiantes o poco definidos, donde la innovación, la competitividad, la flexibilidad y la productividad son fundamentales.
Con todo esto queda claro que SCRUM cumple los principios de la metodología ágil. Veamos qué es lo que la diferencia:
- Estructura y roles: Scrum tiene una estructura específica con roles bien definidos, como el Product Owner, el Scrum Master y el Equipo de Desarrollo. Otras metodologías ágiles pueden tener estructuras y roles diferentes o más flexibles.
- Artefactos y meetings: Scrum utiliza artefactos como el Product Backlog, el Sprint Backlog y el Incremento del Producto, y reuniones específicas como las reuniones diarias de seguimiento, las reuniones de planificación de sprint y las retrospectivas. Otras metodologías ágiles pueden tener diferentes artefactos y reuniones o adaptarlos según sus necesidades.
- Enfoque en la entrega iterativa: Si bien la entrega iterativa es un aspecto clave de muchas metodologías ágiles, Scrum se enfoca específicamente en sprints con duraciones fijas y entregas incrementales al final de cada sprint. Otras metodologías ágiles pueden tener ciclos de entrega más flexibles o utilizar enfoques más continuos.
- Nivel de rigidez: Algunas metodologías ágiles pueden ser más flexibles y adaptativas en comparación con Scrum. Scrum tiene una estructura y procesos definidos que deben seguirse estrictamente, lo que puede ser beneficioso para algunos equipos, pero puede ser restrictivo para otros.
DevOps no es solo entrega continua
Puede haber cierta confusión que lleve a identificar los términos DevOps y CI/CD, Continous Integration / Continous Delivery. Pero realmente esto último queda englobado en el concepto de DevOps:
- La Integración Continua (CI) es la práctica que implica combinar y validar continuamente el código desarrollado por diferentes miembros del equipo en un repositorio compartido. La herramienta por antonomasia es GIT, servicio de control de código fuente del cual podemos encontrar diferentes opciones. Los grandes proveedores de servicios Cloud tienen sus propios servicios: AWS cuenta con Code Commit y GCP con Cloud Source Repositories.
- La Entrega Continua (CD) consiste en entregar software de manera confiable y lista para producción en cualquier momento. El objetivo es tener un proceso automatizado que permita desplegar versiones de software funcionales y probadas en un entorno de producción rápidamente y de manera confiable.
Esto coincide con una de las partes de DevOps, las entregas incrementales y frecuentes. Pero podemos ver que el ámbito de DevOps es más amplio si examinamos sus características. Podemos encontrar diferentes listas que las resuman, la siguiente nos parece adecuada:
- Colaboración: Fomentar la comunicación y la colaboración entre los equipos de desarrollo y operaciones para lograr una visión común y trabajar en conjunto hacia los objetivos del negocio.
- Automatización: Utilizar herramientas y scripts para automatizar tareas repetitivas y facilitar la entrega continua de software.
- Integración continua: Realizar integraciones frecuentes del código desarrollado en un repositorio compartido, seguido de pruebas automáticas para detectar problemas tempranos.
- Entrega continua: Buscar entregar cambios de software de manera continua y confiable, utilizando prácticas como despliegue automatizado y pruebas automatizadas.
- Monitorización y retroalimentación: Recopilar métricas y realizar un monitoreo constante para obtener información sobre el rendimiento y la calidad del software, y utilizar esta retroalimentación para mejorar continuamente.
Aunque no hay un movimiento fundacional como en el caso de las Metodologías Ágiles, sí hay una web del DevOps Institute en la que podemos encontrar noticias, foros, cursos y certificaciones.
Sus tres modos
Los 3 modos, Three Ways, son mencionados en libros como The Phoenix Project o en The DevOps Handbook. Son 3 vías para mejorar la secuencia de actividades requeridas para diseñar, producir y entregar un mejor servicio al cliente. Veamos en qué consisten:
- Mejorar el flujo de entrega: en primer lugar hay mejorar la visualización con herramientas que nos den una representación gráfica de las tareas y nos permitan identificar cuellos de botella y bloqueos; dividir los procesos en tareas más pequeñas que permitan hacer entregas más frecuentes; automatizar el mayor número de tareas posible para ganar tiempo y agilidad.
- Amplificar el feedback: la retroalimentación se basa en conseguir la información necesaria para que las correcciones necesarias se puedan aplicar continuamente. Aquí es indispensable la comunicación con el cliente, pero el feedback también incluye la recopilación de métricas y la monitorización continua. La retroalimentación no consiste sólo en detectar los errores, también los aciertos deben ser identificados para repetirlos y aplicarlos en otras etapas del proyecto.
- Aprendizaje y experimentación: este modo se refiere a la creación de una cultura de aprendizaje, colaboración y mejora continua en toda la organización. Se fomenta la experimentación, la toma de riesgos controlados y el aprendizaje a través del fracaso. Una buena forma de experimentar es la introducción de errores y la ejecución de pruebas extremas. El objetivo es promover la innovación y la adaptabilidad en el desarrollo y entrega de software.
Estas tareas, implementadas de forma consecutiva, proporcionan una guía valiosa para impulsar una cultura de colaboración, eficiencia y mejora continua en el desarrollo y entrega de software.
DevOps es una metodología ágil aplicada más allá del equipo de software
DevOps se puede aplicar más allá del equipo de software, y el éxito cosechado en este campo ha estimulado que se aplique en otros ámbitos. Aquí exponemos algunas de las formas en las que se ha extendido:
- Operaciones de TI: DevOps puede aplicarse a las operaciones específicas de TI en las que no esté implicado el equipo de desarrollo. Se puede mejorar la eficiencia, la confiabilidad y la escalabilidad de los sistemas y la infraestructura mediante la automatización de tareas de administración y despliegue, la aplicación de prácticas de entrega continua y monitorización en la infraestructura y el análisis de los resultados de las pruebas de carga.
- Gestión de proyectos: los principios de colaboración, comunicación y adaptabilidad de DevOps pueden aplicarse a la gestión de proyectos más allá del desarrollo de software. Se pueden adoptar prácticas ágiles y de entrega continua para mejorar la eficiencia, la visibilidad y la capacidad de respuesta al cambio en la gestión de proyectos en general.
- Áreas funcionales de la organización: las prácticas de DevOps también pueden aplicarse en diferentes áreas funcionales de una organización, como marketing, ventas, recursos humanos, servicio al cliente, etc. Esto implica la adopción de enfoques ágiles como la colaboración estrecha entre los equipos y la entrega continua de valor en estas áreas.
- Desarrollo de productos: DevOps también puede extenderse al desarrollo de productos más allá del software. Por ejemplo, en el desarrollo de hardware, productos físicos y servicios, con un enfoque en la colaboración entre equipos multidisciplinarios, la entrega continua de mejoras y la retroalimentación constante de los usuarios finales.
En resumen, los principios y prácticas de DevOps se pueden adaptar y aplicar en diferentes contextos y áreas de una organización más allá del desarrollo de software. La esencia de DevOps, que se centra en la colaboración, la entrega y la mejora continuas, puede ser beneficiosa en una amplia gama de funciones y procesos de negocio para lograr una mayor eficiencia, calidad y satisfacción del cliente. No en vano, DevOps sigue los principios de las metodologías ágiles, y empezamos el artículo matizando que estas se aplican a la gestión de proyectos más allá del desarrollo de software.
Herramientas para DevOps
Para terminar vamos a enumerar una serie de herramientas que podemos utilizar para poner DevOps en práctica. Intentar encasillarlas como hemos hecho puede resultar engañoso porque por sus capacidades muchas de ellas son aplicables en varias etapas, por tanto esta clasificación sólo debe tomarse como una aproximación que ayude a la exposición:
Control de versiones y colaboración
- Git: El protocolo estándar de control de versiones para la gestión de código fuente.
- GitHub: Plataforma basada en Git para alojar repositorios de código, facilitar la colaboración entre equipos y llevar a cabo el control de versiones.
- BitBucket: Alternativa a GitHub, permite alojar el código, la colaboración y el control de versiones.
- GitLab: Otra implementación de Git como las dos anteriores. Tiene una versión cloud pero también se puede instalar como servicio local, integrar la autenticación con un servicio de directorio y aplicar permisos específicos por proyectos y usuarios.
Integración continua, entrega continua y despliegue continuo
- Jenkins: Herramienta de automatización de integración continua que permite compilar, probar y desplegar el código de forma automática.
- CircleCI: Plataforma de CI/CD basada en la nube que facilita la integración continua y la entrega de software.
- Travis CI: Herramienta de integración continua en la nube, especialmente utilizada para proyectos de código abierto.
- AWS Code Pipeline: Servicio específico de AWS de integración continua.
Automatización de pruebas
- Selenium: Framework de pruebas automatizadas para aplicaciones web.
- Jmeter: software basado en Java para automatizar pruebas de carga de aplicaciones web y bases de datos.
- JUnit: Framework de pruebas unitarias para aplicaciones Java.
- Pytest: Framework de pruebas para aplicaciones Python.
Monitorización y gestión de logs
- Check MK: Sistema de monitorización y alertas para infraestructuras de servidores y aplicaciones.
- Prometheus: Sistema de monitorización y alertas diseñado para entornos de contenedores.
- ELK (Elasticsearch, Logstash, Kibana): Conjunto de herramientas para la recopilación, el análisis y la visualización de logs.
- New Relic: Plataforma que incluye la monitorización de aplicaciones y la recopilación y gestión de logs.
Gestión de la configuración
- Ansible: Herramienta de gestión de la configuración utilizada para el despliegue y la gestión de infraestructuras.
- Puppet: como Ansible, herramienta de gestión de la configuración. Aunque también se puede utilizar en el despliegue, su uso habitual es el mantenimiento de infraestructuras a largo plazo.
- Chef: Otra Herramienta de gestión de configuración que automatiza la implementación y el mantenimiento de infraestructuras.
Gestión de incidentes y seguimiento de problemas
- JIRA: Herramienta de seguimiento de incidencias y gestión de proyectos.
- PagerDuty: Plataforma de gestión de incidencias y respuesta a alertas en tiempo real.
La elección de las herramientas adecuadas depende del contexto y los requisitos específicos de un proyecto. Además, hay muchas otras herramientas disponibles en el ecosistema DevOps que podrían ser relevantes para diferentes etapas y necesidades. Conocerlas todas es complicado por el carácter de continua evolución del ámbito al que pertenecen, dominarlas es prácticamente imposible, cada una de ellas merecería un artículo para darlas a conocer.