El Desarrollo de Software Lean tiene sus inicios en el Sistema de Producción de Toyota (TPS) y ayuda a las organizaciones de software a optimizar sus procesos y sus métodos de producción de manera de poder entregar sus productos al mercado de manera más rápida y con mejor calidad. El movimiento Lean puede considerarse como un nuevo método de desarrollo que intenta identificar y erradicar todos los problemas y "desventajas" de metodologías antiguas, como Cascada.
Lean hace énfasis en las personas y la comunicación - si se respeta a las personas que producen software y se pueden comunicar de forma eficiente, es más probable que logren entregar un buen producto y satisfacer al consumidor final.
Los 7 principios
El Desarrollo de Software Lean fue la base para los métodos del Desarrollo Ágil de Software, y sus representantes principales como Scrum o Crystal Clear. Para muchos que conocen el tema, Ágil es tan solo otra palabra para referirse a Lean.
En uno de los libros más populares sobre Lean (Implementing Lean Software Development - from Concept to Cash) , Mary y Tom Poppendieck explican cómo implementar Lean siguiendo siete principios.
1. Eliminar el desperdicio
- Brindar un liderazgo técnico y de mercado - la organización puede ser exitosa si produce productos innovadores y tecnológicamente avanzados, pero es importante comprender lo que valoran nuestros clientes y conocer la tecnología que se está usando.
- Crear sólamente cosas de valor - debemos ser cuidados con todos los procesos que sigamos. Por ejemplo, debemos asegurarnos que todos estos procesos son útiles y están enfocados en crear valor.
- Escribir menos código - mientras más código se tenga, más pruebas se van a necesitar, por lo que se necesitará más trabajo. Si escribiemos pruebas para funcionalidad que no se necesita estamos perdiendo el tiempo.
2. Crear conocimiento
- Crear equipos de diseño y construcción - el líder del equipo de desarrollo tiene que escuchar a los miembros y hacerles preguntas inteligentes que los insite a buscar respuestas y volver lo más pronto posible con los problemas que surgen, o con las soluciones inventadas.
- Mantaner una cultura de mejora continua - crear un ambiente en donde las personas estén mejorando continuamente en lo que trabajan - deben saber que no son y no deben ser perfectas - y que siempre tienen algún área que pueden mejorar.
- Enseñar métodos de resolución de problemas - los equipos de desarrollo deberían comportarse como pequeños centros de investigación, estableciendo hipótesis y realizando varios experimentos rápidos para verificar su validez.
3. Embeber a la calidad
- Sinronizar - para lograr una alta calidad en el software nos debemos empezar a ocupar de él antes de empezar a escribir una sola línea de código.
- Automatizar - automatizar las pruebas, la construcción, las instalacionoes, y cualquier cosa que sea rutinaria. Hay que automatizar de una manera inteligente, de forma que las personas puedan mejorar el proceso y cambiar cualqueir cosa que quieran sin preocuparse por si el cambio hace que las cosas dejen de funcionar.
- Refactor - eliminar la duplicación de código a CERO - cada vez que aparezca la oportunidad, realizar el refactor del código, de las pruebas y de la documentación para minimizar la complejidad.
4. Postergar el compromiso
- Agendar las decisiones irreversibles hasta el último momento responsable - debemos saber hacia donde queremos ir pero no conocemos el camino del todo, lo vamos descubriendo día a día - lo más importante es mantener la dirección correcta.
- Romper con las dependencias - los componentes deben estar lo más desacoplados posible para que puedan implementarse en cualquier orden.
- Mantener opciones - desarrollar múltiples soluciones para todas las decisiones críticas y ver cuales funcionan mejor.
5. Optimizar el total
- Enfocarse en el flujo completo de valor - enfocarse en ganar la carrera completa (que es el software). No hay que gastar esfuerzo en optimizar ineficiencias locales, sino en ver el todo y optimizar a la organización en su totalidad.
- Entregar un producto completo - los equipos necesitan tener buenos líderes, y también buenos ingenieros, vendedores, especialistas de marketing, secretarias, etc. Todos juntos pueden entregar un gran producto final a los clientes.
6. Entregar rápido
- Trabajar en bloques pequeños - reducir el tamaño del proyecto, acortar los ciclos de entrega, estabilizar el ambiente de trabajo (escuchá lo que te dice la velocidad), repetir lo bueno y erradicar las prácticas que crean obstáculos.
- Limitar el trabajo a la capacidad - limitar la cola de tareas al mínimo (una o dos iteraciones por delante es suficiente), no hay que tener miedo al quitar elementos de la cola - rechazar cualquier trabajo hasta que se haya vaciado un lugar en la cola.
- Enfocarse en el tiempo del ciclo, no en la utilización - agregar tareas pequeñas a la cola que no puedan atascar al proceso por un tiempo largo - reducir el tiempo del ciclo y tener pocas cosas para procesar en la cola
7. Respetar a las personas
- Capacitar a los líderes de equipo - darles a los líderes de equipo entrenamiento, guías y espacio libre para implmenetar el pensamiento Lean en su ambiente.
- Mover la responsabilidad y la toma de decisiones al nivel más bajo posible - dejar que las personas piensen y decidan por su cuenta - ellos saben mejor que nadie cómo implementar algoritmos dificiles y aplicar tecnologías de última generación.
- Fomentar orgullo por el trabajo - fomentar la pasión y la participación del equipo hacia lo que hacen y cómo lo hacen.