Metodologías ágiles
Nadie dijo que desarrollar software fuese fácil. Por eso, existen procesos, conocidos como metodologías ágiles, que facilitan en gran medida el camino al equipo de desarrolladores y a los clientes.
Pero, ¿qué son las metodologías ágiles? Este concepto surge por la necesidad de agilizar, como su propio nombre indica, los pasos para la creación de software. Se centra en las interacciones humanas para poder mantener un flujo de conversación entre las partes que permita un desarrollo más dinámico y participativo. Las metodologías ágiles utilizan un sistema de desarrollo adaptativo en lugar de uno predictivo. Esto significa que el equipo de trabajo tiene en mente el resultado deseado, pero no conoce de forma exacta el tipo de producto que podría crearlo por la imposibilidad de entender las necesidades del cliente.
Uno de los fundamentos de estas metodologías es lo que se conoce como el ciclo de vida iterativo o incremental, también conocido como desarrollo en cascada. Este concepto consiste en el desarrollo del producto de forma progresiva, proporcionando al cliente un MVP periódicamente y cada vez más funcional hasta llegar al producto final. Las empresas que se dedican a la creación de software deben utilizar las metodologías ágiles no para generar un plan de acción, sino para crear desarrollos que se puedan ir puliendo y mejorando hasta llegar al producto perfecto. La siguiente cuestión es conocer cuál de ellas es la que más se ajusta al estilo de trabajo de la empresa y, por ende, cuál podrá funcionar más eficazmente dentro de la misma.
En DIGITAL55 hemos querido recopilar cinco de las mejores metodologías ágiles y analizar sus ventajas y sus usos.
Manifiesto y Principios
El Manifiesto Ágil es un escrito creado y firmado por 17 personalidades del mundo de la programación con la finalidad de facilitar el trabajo a desarrolladores y clientes y agilizar los procesos de creación de software, centrándose más en las relaciones interpersonales entre cliente, desarrolladores y equipo de trabajo, que en los procesos estandarizados a lo largo de los años. De este modo, en el sitio web del Manifiesto se puede leer:
Estamos descubriendo formas mejores de desarrollar software tanto por nuestra propia experiencia como ayudando a terceros. A través de este trabajo hemos aprendido a valorar:
Individuos e interacciones sobre procesos y herramientas.
Software funcionando sobre documentación extensiva.
Colaboración con el cliente sobre negociación contractual.
Respuesta ante el cambio sobre seguir un plan.
Esto es, aunque valoramos los elementos de la derecha, valoramos más los de la izquierda.
En la web también se encuentran disponibles los Principios básicos del Manifiesto Ágil para aquellos usuarios que deseen conocer más acerca del mismo.
Scrum, metodología de desarrollo de software más utilizada
Scrum es la metodología ágil más utilizada. En 2017, supuso el 58% del total de uso de todas las metodologías, muy por delante de cualquier otra. Esta metodología está basada principalmente en la creación y asignación de cometidos.
Tales cometidos, normalmente escritos en postits o derivados, se implementan en el sistema, que controla los cambios que se puedan producir en los mismos: asignado, no asignado, terminado, en proceso, etc. La metodología Scrum se desarrolla a través de la consecución de unos puntos concretos:
- En un primer momento, se define el Product Backlog. Este, podría definirse como una lista de las funcionalidades que el cliente quiere que tenga el producto, ordenadas de mayor a menor importancia.
- Una vez definido el Product Backlog, se comienza a desarrollar la lista de tareas de la iteración o Sprint Backlog, que consiste en un índice con ciertos puntos del Product Backlog que deben completarse en la primera parte del desarrollo. El equipo de trabajo es quien define su duración.
- A lo largo del Sprint Backlog también se realizan reuniones con el cliente y el equipo de trabajo. Estas reuniones son conocidas como Sprint Planning Meeting y sirven para determinar cómo se va a enfocar el proyecto, las etapas y los plazos.
- Durante todo el periodo de Sprint se realizan reuniones diarias conocidas como Daily Scrum o Stand-up Meeting. Este último concepto se traduce como «reuniones de pie», pues se recomienda que se realicen de pie y que no duren más de cinco o diez minutos. En estas reuniones el equipo de trabajo ha de plantearse y responder tres preguntas: ¿Qué hice ayer?, ¿qué voy a hacer hoy?, ¿qué ayuda necesito?
- Con el Sprint finalizado, da comienzo la fase conocida como Sprint Review, que consiste en una revisión de todos los avances del proyecto hasta la fecha. En este punto el equipo de trabajo debería tener un producto tangible que pueda ser presentado al cliente.
- Por último, toca revisar los objetivos cumplidos y recapitular qué se ha hecho bien y qué no y apuntarlo para evitar cometer los mismos errores. A este último punto se le conoce como Sprint Retrospective.
Kanban
Esta metodología de origen japonés está basada en el método de producción Toyota surgido en los años 40. Su nombre procede de la unión de las palabras Kan, cuyo significado hace referencia al plano visual, y Ban, que significa tarjeta. Así, se puede concluir que esta metodología ágil “hace uso de tarjetas para gestionar, de manera visual, la realización de determinados procesos”. Tal uso de tarjetas es su principal ventaja, ya que permite que Kanban sea una metodología muy sencilla de implementar al sistema y los proyectos de una compañía.
Kanban permite observar de manera clara qué se está haciendo ahora, qué se ha terminado y qué se debe hacer a continuación. Las tarjetas con la información del estado de los proyectos se colocan en un tablero que debe situarse donde todos los miembros del equipo puedan verlo. Si bien la información de dicho tablero se muestra de forma sencilla, también es bastante completa y “contendrá tantas columnas como estados en los que pueda encontrarse un proyecto”.
En Kanban existen una serie de fundamentos que deben seguirse para que la metodología se establezca de la forma correcta dentro de la compañía:
- Visualizar el flujo de trabajo: El tablero ayuda a visualizar todas las tareas del proyecto, tanto realizadas como por realizar. Esto permite al equipo tener una visión más clara del estado del desarrollo.
- Limitar la cantidad de Trabajo en Proceso: Establecer metas asequibles es de gran importancia. Un exceso de trabajo puede acarrear desmotivación entre los miembros del equipo y conllevar a no poder terminarlas.
- Lectura fácil de indicadores visuales: El uso de tarjetas de colores facilitará enormemente la distinción entre tipos de trabajo.
- Realizar un seguimiento del tiempo: Evaluar de forma continuada si se está cumpliendo con los plazos de desarrollo y entrega ayudará a comprender mejor el estado del proyecto.
eXtreme Programming
La metodología XP fue desarrollada por Kent Beck, uno de los principales precursores del Manifiesto Ágil. eXtreme Programming es la metodología de desarrollo de software más sencilla y fácil de implantar, aunque a su vez fue de las menos utilizadas por las compañías en 2017. Es una metodología basada en la “retroalimentación continua entre cliente y equipo de desarrollo”.
Por ello, lo más aconsejable es que el cliente de su opinión sobre qué le gusta y qué no a medida que el proyecto avanza. Es muy recomendada para aquellos proyectos cuyas condiciones son ambiguas o muy variables. De manera que la planificación ha de ser altamente flexible y basarse en un desarrollo iterativo, o desarrollo en cascada, con entregas muy rápidas “esperando feedback diario por parte del cliente”
Dentro de la metodología XP, en cada una de las interaciones del desarrollo, se programa de un día para otro, reflexionando, diseñando y documentando el código a medida que se escribe.
Factores de XP
eXtreme Programming es una metodología muy arriesgada, pues el éxito o fracaso del proyecto depende inmediatamente de las cualidades del equipo de programadores y cómo de precisas sean las ideas del cliente. Para una correcta aplicación de la metodología XP deben darse ciertos factores:
- Los programadores deben trabajar en parejas para impedir que ciertas partes del proyecto se queden estancadas.
- Los programadores deben ser profesionales con gran experiencia, ya que han de programar, analizar y probar con el tiempo en su contra.
- Es de gran importancia que el equipo de programadores se lleve bien entre sí, para así poder mantener flujos de conversación ligeros.
- El cliente debe poder incorporarse como uno más a la metodología de trabajo. De este modo, se evita que la retroalimentación llegue tarde y se tengan que modificar aspectos que produzcan retrasos no deseados.
Desarrollo Ligero (Lean)
El Desarrollo Ligero, también conocido como Lean, es una metodología especialmente diseñada para equipos de trabajo pequeños. Es necesario que los miembros del mismo sean personas preparadas y motivadas, ya que el desarrollo del proyecto no se encaminará siguiendo los procesos de un sistema de producción típico, sino que dependerá de la eficacia y unión del equipo de trabajo. Al igual que Kanban y otras metodologías ágiles, Lean está basado en el método de producción Toyota y es una de las más utilizadas para el desarrollo de proyectos a medio plazo.
Según el libro Implementing Lean Software Development: from Concept to Cash, esta metodología consta de siete principios básicos para su implementación, que a su vez están divididos en varios puntos dentro de ellos:
- Eliminar residuos. Los dos mayores desechos en el desarrollo de software son:
- Características adicionales – Se necesita un proceso que permita desarrollar solo el 20% de las características que dan el 80% del valor.
- Cruzar los límites – Los límites organizacionales pueden aumentar los costes en un 25% o incluso más. Crean bucles que ralentizan el tiempo de respuesta e interfieren con la comunicación.
- Calidad de la construcción. Si rutinariamente se encuentran defectos en el proceso de verificación, el proceso es defectuoso.
- Código a prueba de errores con desarrollo controlado por pruebas – Escribir especificaciones ejecutables en lugar de requisitos.
- Dejar de construir código heredado – El código heredado es un código que carece de unidades automatizadas y pruebas de aceptación.
- El Big Bang es obsoleto – Se recomienda usar integración continua y sincronización anidada.
- Crear conocimiento. La planificación es útil, pero el aprendizaje es esencial.
- Usar el método científico – Enseñar a los equipos a establecer hipótesis, realizar gran cantidad de experimentos rápidos, crear documentos concisos e implementar la mejor alternativa.
- Los estándares existen para ser desafiados y mejorados – Incluir las mejores prácticas conocidas actualmente en estándares que siempre se siguen, mientras se anima activamente al equipo humano a desafiarlos y cambiarlos.
- El rendimiento predecible es impulsado por la retroalimentación – Una organización ha de desarrollar la capacidad de responder rápidamente al futuro a medida que se desarrolla.
- Aplazar la entrega. Suprimir el concepto de que es una buena idea comenzar el desarrollo con una especificación completa.
- Romper con las dependencias – La arquitectura del sistema debe admitir la adición de cualquier función en cualquier momento.
- Mantener opciones – Pensar en el código como un experimento, hacerlo tolerante al cambio.
- Aprender tanto como sea posible antes de tomar decisiones irreversibles.
- Entrega rápida. Las listas y las colas son almacenamientos intermedios entre organizaciones que disminuyen la velocidad.
- La entrega rápida, alta calidad y bajo coste son totalmente compatibles – Las empresas que compiten sobre la base de la velocidad tienen una importante ventaja de costes, ofrecen una calidad superior y están más en sintonía con las necesidades de sus clientes.
- La teoría de colas se aplica al desarrollo, no solo a los servidores – Centrarse en la utilización crea atascos que, en realidad, reducen dicha utilización. Reducir el tiempo de ciclo con lotes pequeños y menos elementos en proceso.
- Limitar el trabajo a la capacidad – Establecer una velocidad confiable y repetible con desarrollo iterativo. Limitar el tamaño de las listas y las colas a su capacidad de entrega.
- Respetar a las personas. Las personas comprometidas proporcionan una ventaja competitiva más sostenible.
- Los equipos prosperan con compromiso y confianza – Los miembros se comprometen mutuamente para lograr un objetivo común.
- Proporcionar un liderazgo efectivo – Los equipos efectivos tienen líderes efectivos que sacan lo mejor de las personas.
- Respetar a los socios – La lealtad a la empresa conjunta nunca debe crear un conflicto de intereses.
- Optimizar la totalidad. Productos innovadores surgen de una combinación única de oportunidad y tecnología.
- Enfocarse en todo el flujo de valor – Desde el concepto hasta el efectivo. Desde la solicitud del cliente hasta el software implementado.
- Entregar un producto completo – Desarrollar un producto completo, no solo software. Los productos completos son construidos por equipos completos.
- Valorar – Medir la capacidad del proceso con el tiempo del ciclo. Medir el rendimiento del equipo con el valor comercial entregado. Medir la satisfacción del cliente con una puntuación de promotor.
Uso de Scrumban
Scrumban es la metodología ágil que combina las ventajas de Scrum y las de Kanban. En 2017, tuvo un uso del 7% comparado con el resto de metodologías ágiles. Un número que, en realidad, está muy por encima de los tantos por ciento de otras metodologías como eXtreme Programming o Lean, con un 1% y un 2% de uso respectivamente.
Aunque en esta metodología Scrum y Kanban pueden combinarse de diversas formas, por norma general se utiliza el conocido tablero de Kanban, al que se le añaden nuevas categorías más propias de Scrum, y los puntos que deben seguirse en esta otra para el desarrollo de un proyecto, desde el Product Backlog, hasta el Sprint Review.
De este modo, se mantiene una línea de trabajo con un tablero que ayuda a visualizar el estado del proyecto y que ofrece aún más información. El uso de Scrumban es recomendable cuando se está realizando alguna de estas tareas en la compañía: Mantenimiento de proyectos, desarrollo de nuevos productos o gestión de proyectos problemáticos.
Beneficios de la Metodología Ágil
Las ventajas del uso de metodologías ágiles para el desarrollo de software son abrumadoras comparadas con otras metodologías que se usaban anteriormente. Cada vez son más utilizadas por las empresas por el ahorro que proporcionan tanto en tiempo como en costes y la mejora en la motivación de los miembros del equipo, lo que se traduce en un trabajo de mayor calidad y eficiencia.
Por su parte, el proceso de desarrollo también se ve afectado positivamente gracias al uso de estas metodologías. La flexibilidad en los procesos, la retroalimentación constante con el cliente durante todo el desarrollo y las interacciones tanto entre los miembros del equipo, como con el cliente ayudan a que los proyectos incrementen significativamente su calidad, posibilitando la eliminación de características innecesarias, y se perciban errores o problemas con mayor rapidez.