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.
Basado en Seven principles of Lean Software Development

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw