Sunday, April 07, 2024

Introducción al Lean Software Development

Descubrí que aceptar el cambio (en lugar de resistirme a él), siendo flexible y adaptable (en vez de aferrarme a un plan fijo), me permite impactar significativamente en el desarrollo de software sin sufrir ansiedad constante. Este descubrimiento me llevó a adoptar entusiastamente el Desarrollo Ágil de Software (https://agilemanifesto.org/iso/es/manifesto.html). Con el tiempo, en este camino de adaptación y mejora continua, los equipos con los que he colaborado hemos refinado las prácticas sostenibles y descartado aquellas que resultaban superfluas o poco beneficiosas. Este proceso, enriquecido por Extreme Programming, Continuous Delivery y, especialmente, por los principios Lean, nos ha permitido desarrollar un enfoque de trabajo muy efectivo. Sin embargo, al conversar con colegas, me sorprendió descubrir que los principios Lean y su aplicación en el desarrollo de software no son ampliamente conocidos. Por ello, he decidido crear una serie de publicaciones para compartir qué es el Lean Software Development y cómo lo implementamos en nuestros equipos.


Una aclaración importante, sé que cada contexto puede requerir aproximaciones diferentes y que el enfoque ágil/Lean no es la mejor opción en ciertos contextos, pero lo cierto es que dado que es la forma de trabajar que me gusta, de forma casi automatica suelo terminar trabajando en entornos en los que tiene sentido.

Orígenes del Lean Software Development

El concepto de Lean Manufacturing, con sus raíces profundamente ancladas en el revolucionario Sistema de Producción de Toyota (TPS) de la década de 1950, es una filosofía enfocada en maximizar el valor mediante la eliminación de desperdicios. Este enfoque no solo transformó la fabricación automotriz sino que también sentó las bases para las metodologías ágiles en el desarrollo de software.

Principios Clave del Sistema de Producción Toyota:

  • Jidoka (Automatización con un toque humano): Este principio enfatiza la importancia de la automatización en la producción no solo para reducir costos, sino también para prevenir defectos. Permite detener la producción ante cualquier problema para evitar la creación de productos defectuosos.
  • Just-in-Time (JIT): Bajo este enfoque, cada proceso produce únicamente lo necesario para el siguiente paso, adoptando un proceso de producción "pull" en lugar de "push".
  • Kaizen (Mejora continua): El Kaizen promueve pequeñas mejoras constantes en el proceso, lo que facilita el aprendizaje y la adaptación continua, mejorando la satisfacción tanto de clientes como de participantes en la producción.

Estos principios, junto con otros del TPS, enfocan en la mejora continua, la eliminación de desperdicios y el respeto por las personas involucradas en los procesos.

La transición hacia el desarrollo de software ágil fue influenciada notablemente por estos ideales, especialmente en lo que respecta a la mejora continua, la calidad del proceso y un flujo de trabajo basado en la demanda real, en contraposición a la producción basada en suposiciones.

Contexto Histórico y Evolución hacia el Desarrollo Ágil:

Posterior a la Segunda Guerra Mundial, Japón enfrentó severas restricciones económicas que hacían inviable la producción en masa al estilo occidental. En este contexto, las ideas de W. Edwards Deming sobre calidad y mejora continua encontraron un terreno fértil. Deming, un estadístico y consultor de gestión estadounidense, enfatizó la calidad y eficiencia en la producción como medios para reconstruir la economía japonesa. Estos principios de control de calidad, junto con el enfoque en minimizar desperdicios y maximizar eficiencia, fueron adoptados y adaptados por Toyota, dando origen al TPS.

"Learning is not compulsory. Neither is survival." W. Edwards Deming

A principios de los años 2000, mientras el desarrollo de software ágil ganaba popularidad, Mary y Tom Poppendieck, quienes tenían experiencia en Lean Manufacturing y estaban involucrados en el desarrollo de software ágil, adaptaron los principios Lean al desarrollo de software. Publicaron el primer libro de una serie que describe la metodología Lean Software Development (Lean Software Development: An Agile Toolkit

), marcando así un puente claro entre las prácticas de manufactura y el desarrollo de software ágil.

Los principios de Lean Manufacturing, originados en el TPS y reforzados por la influencia de Deming, no solo revolucionaron la fabricación sino que también trascendieron industrias, modelando profundamente el desarrollo de software ágil. La adaptación de estos principios al mundo del software por los Poppendieck subraya la universalidad de la mejora continua, la calidad, y la eficiencia, demostrando cómo los enfoques orientados a la eliminación de desperdicios y al respeto por las personas pueden conducir a innovaciones significativas.

Principios fundamentales

Lean Software Development se basa en siete principios fundamentales que buscan eliminar el desperdicio y optimizar el proceso de desarrollo:

  1. Eliminar el desperdicio: Cualquier cosa que no agregue valor al cliente se considera desperdicio y debe ser eliminada.
  2. Construir calidad desde el inicio: La calidad debe ser una parte integral del proceso de desarrollo, no una consideración posterior.
  3. Crear conocimiento: El aprendizaje continuo y la mejora del conocimiento son esenciales para el desarrollo de software.
  4. Diferir compromisos: Tomar decisiones lo más tarde posible para mantener la flexibilidad y adaptarse a los cambios.
  5. Entregar rápido: La entrega rápida permite recibir retroalimentación temprana y realizar ajustes necesarios.
  6. Respetar a las personas: Un ambiente de respeto y colaboración es fundamental para el éxito del equipo.
  7. Optimizar el todo: Se debe considerar el proceso de desarrollo en su totalidad para mejorar la eficiencia.

Beneficios de adoptar Lean en el desarrollo de software

La implementación de Lean en el desarrollo de software trae consigo numerosas ventajas, entre ellas, la reducción de costes y tiempo de desarrollo, el incremento en la calidad del producto y la satisfacción del cliente, así como la creación de un ambiente laboral más gratificante para el equipo. Lean fomenta una cultura de mejora constante y adaptabilidad, aspectos cruciales en momentos de alta incertidumbre y evolución acelerada del mercado.

Por primera vez en la historia del desarrollo de software, disponemos de datos que definen cómo debe ser una organización tecnológica de alto rendimiento, gracias a las investigaciones realizadas por el equipo de DevOps Research and Assessment (DORA). Según se detalla en el libro Accelerate, el enfoque lean es fundamental en la creación y el escalado de equipos y organizaciones tecnológicas.

Accelerate research

Al integrar Lean Software Development, XP o la combinación de ambas, con Lean Product Development y Lean Management, se forma un equipo de alto impacto, donde, además, se reduce el estrés y la frustración, elementos que considero tan esenciales como el impacto mismo (https://www.eferro.net/2017/12/how-vs-what.html).


Un breve adelanto de lo que se cubrirá en la serie

En las próximas entradas, detallaremos cada principio de Lean, mostrando su aplicación práctica en los equipos con los que trabajo. Me esforzaré por compartir abundantes ejemplos y explicar nuestro proceso de toma de decisiones.

A medida que se publiquen los distintos artículos de la serie los enlazaré aquí:

Si bien Lean ha influenciado diversos conceptos y métodos, como DevOps, Lean Product Development y Lean Startup, en esta serie profundizaremos en el Lean Software Development. No obstante, es importante mencionar que, a nivel de equipo, buscamos extender la aplicación de los principios Lean más allá, abarcando desde el desarrollo en sí hasta las decisiones de producto y la gestión de otras tareas y procesos. Ya sabéis “Make the right thing, make the thing right”.

El próximo artículo se centrará en explicar algunos conceptos Lean que usaremos durante toda la serie.¡Continuemos aprendiendo y evolucionando juntos hasta entonces!


Recursos:

No comments: