viernes, 16 de agosto de 2013

Metodologías ágiles: LEAN Software Development



Hola a todos,

El desarrollo de software LEAN es la traducción al mundo de la programación del sistema productivo automovilístico usado en TOYOTA (referente mundial en su campo).

La idea principal que mueve LEAN es eliminar todo aquello que sean "desperdicios" en el proceso de producción. Desperdicio se define como todo aquello que genera costes pero no genera valor para el consumidor.

Un ejemplo sencillo: si tenemos una fabrica de lapices, nos interesa saber que el consumidor quiere comprar un lapiz, sin más. Que sea de madera, que escriba y que se le pueda sacar punta, si además es de su color fávorito mejor que mejor. El consumidor no va a estar dispuesto a pagar más por que el lápiz se haya desplazado 3,5 km dentro de la fábrica en un complejo sistema de cintas transportadoras, ni por el hecho que después se haya embalado y transportado en camión durante 500 km. El consumidor solo quiere un lápiz. Solo estará dispuesto a pagar más si el lápiz dura más, pinta mejor o tiene alguna otra característica que lo hace atractivo.  Lo mismo pasa con el mundo del software. El consumidor no le va a dar ningún valor a que el software haya pasado por un complejo sistema "burrocrático" de aprobaciones o que durante el proceso el proyecto se haya parado por que ha habido un bug muy grande. El solo quiere pagar por la funcionalidad que le da el software, nada más.

En el caso concreto de LEAN para el desarrollo de software se designan algunos puntos adicionales:
- Eliminar desperdicios: Eliminar burocracias, código innecesario, procedimientos que no aportan valor.
- Ampliar aprendizaje: La formación continua del producto permite a los trabajadores realizar menos fallos y entender mejor los requerimientos.
- Decidir lo más tarde posible. Si se retrasa la toma de decisiones menos posibilidades hay que se tiren para atrás en el último momento.
- Reaccionar tan rápido como sea posible: Vendría a ser la idea subyacente de XP, hacer lo mínimo indispensable para cumplir con los requisitos, a fin de tener cuanto antes una versión entregable que se pueda evaluar a fin de poder iniciar la siguiente iteración.
- Potenciar al equipo: Los programadores del equipo han de poder auto-organizarse solos y desarrollar su trabajo en el marco que ellos establezcan a fin de poder trabajar más cómodos y por tanto , eficientes.
- Crear la integridad: Este concepto es el de como se comporta nuestro producto de software como un todo. Si se desarrolla por partes separadas y meramente pegadas con pegamento dificilmente estará todo integrado.  A veces es necesario refactorizar (como en  XP) pero no con el objetivo de reducir la complejidad  sino la de unificar el código y eliminar las duplicidades.
- Ver el conjunto: Esto significa que los programadores, en todo momento, han de tener muy claro que va ha hacer y como tiene que ser el producto de software final (independientemente que la parte que ellos toquen sea una minúscula parte del total) a fin de que todo el conjunto tenga cohesión.


LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares