Por Felipe Talavera
Qué es Lean?
Lean es un concepto creado en Estados unidos a partir TPS creado en Toyota, siendo esta filosofía muy exitosa en japón y que ahora es bastante conocida a nivel mundial.
Lean se puede interpretar como “esbelto” o “sin grasa”. la “grasa” en términos de Lean sería todo aquello que no genera valor y esto lo define como “desperdicio”.
Lean apunta a crear un flujo de mejora continua y gradual que busca disminuir los desperdicios y generar el máximo valor para el cliente.
De Toyota al desarrollo de software
El término lean software development se originó en libro del mismo escrito por Mary y Tom Poppendieck. Lean software development es básicamente la aplicación de la filosofía lean al desarrollo de software. el libro presenta 7 principios basados en lean y un set de 22 herramientas.
7 principios lean
A continuación una descripción de cada uno de los principios lean que describe el libro
- ELIMINAR DESPERDICIO.
Uno de los pilares de lean es eliminar el desperdicio que no entrega valor y que agrega tiempos al flujo del proceso de desarrollo. El desafío se encuentra en encontrar aquello que se puede definir como “desperdicio”
Los autores nos dan algunas ideas de lo que podría ser desperdicio dentro del desarrollo de software:
- Código o funcionalidad innecesaria
- Comenzando más de lo que puede ser completado
- Retrasos en el proceso de desarrollo
- Cambios constantes o poco claras en los requerimientos
- Burocracia
- Comunicacion Lenta o inefectiva
- Trabajo parcialmente hecho
- Defectos y problemas de calidad
- Cambios de tarea
- CALIDAD EN LA CONSTRUCCIÓN
Cuando buscamos desperdicio, podemos encontrarlo en distintos puntos del flujo de desarrollo. Al eliminar ese desperdicio generamos calidad en todo el proceso. Este principio apunta a que se debe generar calidad desde la etapa inicial de desarrollo hasta que el producto es entregado.
Generar calidad significa encontrar defectos a tiempo , entrega de software a tiempo y con la menor cantidad de defectos posibles
- CREAR CONOCIMIENTO
El proceso de desarrollo de software en sí mismo es una actividad de aprendizaje y conocimiento. Es necesario tomar acciones para que este conocimiento sea compartido y no desaparezca al entregar el producto. El conocimiento es importante porque permite mejorar la flexibilidad y productividad del equipo
- APLAZAR COMPROMISO
Este principio en realidad significa “decidir lo más tarde posible”.
El desarrollo de software está lleno de situaciones donde se deben tomar decisiones en ambientes llenos de incertidumbre y complejidad. En este escenario mientras más tiempo tengamos para tomar una decisión mejor, porque es donde tendremos la mayor cantidad de información y tendremos la menor cantidad de incertidumbre.
Esto no significa que todas las decisiones deban ser postergadas. Primero que nada, debemos tratar de que las decisiones puedan revertirse y así cambiarlas fácilmente, de otro modo, las decisiones críticas dejarlas abiertas hasta el último momento posible.
- ENTREGAR RÁPIDO
Este principio parecería algo obvio, la realidad, es que en el desarrollo de software no lo es. Comúnmente, la creación de software es un proceso bastante exhaustivo, donde la entrega rápida no parece viable.
En lean software development se propone desarrollar un producto lo más simple posible y funcional y mejorarlo iterativamente a partir de la retroalimentación que el cliente puede dar. Al eliminar desperdicio y generando conocimiento estamos reduciendo los tiempos de entrega
Entre los beneficios de la entrega rápida estaría la adaptabilidad al cambio y minimizar el riesgo de que un requerimiento cambie.
- RESPETAR A LAS PERSONAS
Respeto significa que todos merecemos ser escuchados y ser tomados en cuenta sin importar si eres la señora de la limpieza o el gerente general de la empresa. También significa que todos tenemos la oportunidad de tomar responsabilidades a la hora de realizar una acción, al final de cuenta, la mejora continua no sería posible si no está todo el equipo comprometido con el cambio a través del respeto.
- OPTIMIZAR EL TODO
En desarrollo de software es común ver situaciones como esta:
El cliente quiere nuevas características “ayer”, los desarrolladores construyen lo más rápido posible y como resultado cambios poco rigurosos son hechos, defectos aumentan, complejidad del código aumenta.
Este principio apunta a que la organización debe buscar optimizar el flujo como un todo, no solo funciones individuales o equipos, es necesario, generar una organización mas homogénea donde la comunicación sea mas directa y que a la hora de decidir se tome en cuenta todo el flujo.
Algunas herramientas
Implementar lean software development no es algo intuitivo. existen varias prácticas y herramientas. de las cuales recomiendo 2, Kanban y retrospectiva, por ser faciles de entender e implementar
KANBAN
En términos simples, “kanban” es un método para visualizar el avance de un proyecto a travez de un tablero que se divide en las distintas fases del flujo de desarrollo y como las tareas avanzan en este.
para indagar en este recomiendo leer este articulo de Javier Garzas
RETROSPECTIVAS
Las retrospectivas se usan en generalmente en el desarrollo agil de software. las retrospectivas son “reuniones” que se hacen al final de una iteración(o al final de un proyecto), que busca generar reflexión sobre la forma en que hemos llevado a cabo el proyecto y generar acciones para mejorar en la próxima entrega.
Recomiendo leer este artículo de Thomas wallet