Explicación sobre el Lean Software Development preparada para la asignatura de "Introducción a la Ingeniería del Software" en la Universidad Europea de Madrid.
2. Origen
Mary & Tom Poppendieck
Basado en el Toyotismo
Mary: http://www.flickr.com/photos/8502118@N08/4076240155
Tom: http://www.flickr.com/photos/improveit/1573552241
Toyota logo: http://toyota.com
3. Toyotismo (I)
Taiichi Ohno (1912 - 1990)
Crisis productiva de los 70
Puntos básicos
Flexibilidad laboral
Estímulos sociales
Just in Time
Precios más bajos para el consumidor
4. Toyotismo (II)
Producción
Fabricar sólo lo necesario
Detenerse si algo va mal
Eliminar todo lo que no añada valor
Filosofía de trabajo
Respetar a los trabajadores
Utilizar completamente sus capacidades
Responsabilidad & autoridad
6. Nueva forma de pensar (I)
Forma de pensar anterior
Cambiar de moldes es caro
No se cambia de moldes
Taiichi Ohno
Se necesitan muchos moldes por máquina
Cada cambio dura un minuto
7. Nueva forma de pensar (II)
Forma de pensar anterior
Los cambios en el código son costosos
Diseño fijo antes de codificar
Metodología ágil
Se requieren multimples cambios
Cambios en el último minuto
8. Ejemplo
1981 - GM lanza el Proyecto G-10
1988 - Buick Regal
1989 - Pontiac Grand Prix
1986 - Honda lanza el Proyecto Accord
1989 - Se presenta el modelo
1990’s - Modelo más vendido en Norte América
http://www.flickr.com/photos/ice_e_fresh/96022679
9. Nueva forma de pensar (III)
En vez de
La prisa produce gastos
La calidad cuesta más
Sabemos que
Los retrasos producen gastos
La calidad hace ahorrar
11. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
12. Eliminar las pérdidas
Pérdida
Todo lo que no crea valor para el consumidor
El consumidor estaría igual de contento con el
software sin esa característica
Crear Valor para el
consumidor
13. Identificar las pérdidas
Fabricación Desarrollo de software
Inventario Trabajo a medio hacer
Procesos extra Papeleo
Sobreproducción Características extra
Transporte Cambiar tareas
Espera Espera
Movimiento Cambiar grupos
Defectos Defectos
14. La mayor fuente de pérdidas
Raramente Algunas veces
Bastante Siempre
Nunca
Casi nunca o nunca
64%
19%
45%
16%
7% 13%
Bastante o siempre
Funciones y características de un sistema típico 20%
16. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
17. Aumentar el feedback
Modelo en Cascada
¡¡¡NO
Análisis FUNCIONA!!!
Diseño
Implementación
Pruebas
Mantenimiento
19. Proyectos en problemas
¡Aumentar el feedback!
Feedback del cliente al equipo
Feedback del equipo a la dirección
Feedback sobre el producto al equipo
Feedback hacia arriba y hacia abajo
¡No reducir el feedback!
Añadir más procesos no suele ayudar
21. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
22. Decidir lo más tarde posible
La tecnología cambia rápidamente
La situación del negocio evoluciona
¡El software cambiará!
23. Escalada del coste
Dos tipos de cambios
A gran escala
Ejemplos:
Idioma, usabilidad, seguridad, escalabilidad
Reglas:
Sólo unos pocos
A alto nivel
La mayor parte de los cambios
¡Que no se dispare el coste!
24. Decidir lo más tarde posible
Compartir diseño parcialmente terminado
Sentido de absorber cambios Tomar decisiones
Evitar características extra basándose en
hechos, no en
Rápida capacidad de respuesta predicciones
Momento de tomar decisiones
26. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
27. Entregar rápidamente
Las organizaciones más disciplinadas con las que
responden a sus clientes
De forma rápida
De forma fiable
Repetidamente
Madurez del desarrollo de software
Velocidad a la que de forma fiable y repetidamente
se convierten los deseos del cliente a software
desarrollado
28. Principios para la velocidad
Basar la producción en la demanda
No basarse en una planificación
Trabajo fácil de entender
Comunicación interna y compromiso
Kanban
Reuniones
Usar lotes pequeños
30. Kanban (Software)
Tarjetas o lista de caracterlísticas
Los desarrolladores saben lo que hacer
Pizarras
Gráficos
Reuniones diarias
Estado
Compromiso
Necesidades
32. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
33. Crear integridad
Experiencia del cliente
Integridad conceptual
Componentes del sistema funciona como un todo
Utilizamos la refactorización
34. Refactorización
1. Simplicidad
• Objetivo de la mayor parte de los patrones
2. Claridad
• Lenguaje común
• Encapsulamiento
• Código autodocumentado
3. Apropiado para el uso
• Usabilidad
• Rendimiento
4. ¡NO REPETIR!
5. No añadir cosas extra
• No codificar antes de tiempo
• No codificar tarde
36. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
37. Potenciar el equipo
1982 - GM cierra la planta de Fremont, CA
Baja productividad
Alto absentismo
1983 - Vuelve a abrir como NUMMI (Toyota & GM)
Misma plantilla
1985
Productividad y calidad duplicada
38. Compromiso
1. Equipo pequeño
2. Misión clara
3. A corto plazo
4. Capacidades necesarias
• Expertos tecnología
• Expertos dominio
5. Suficiente información para determinar la viabilidad
6. Proporcionar recursos necesarios
7. Libertad para tomar decisiones
8. Entonrno básico para una buena programación
• Estándares de codificación, control de versiones, tests automáticos...
40. Principios Lean
1.Eliminar los pérdidas
2.Aumentar el feedback
3.Decidir lo más tarde posible
4.Entregar rápidamente
5.Crear integridad
6.Potenciar el equipo
7.Ver todo el conjunto
41. Ver todo el conjunto
Sistemas de software != Suma de sus partes
Sistemas de software = partes + interacciones
Defectos se acumulan en el proceso de desarrollo
Importante tener bien definidas las relaciones
Entender pensamiento Lean antes de aplicarlo
Principios Lean al mismo tiempo + sentido
común = base para el éxito
43. Bibliografía
POPPENDIECK, Mary; POPPENDIECK, Tom. Lean Software Development: An
Agile Tooklit.1st Edition. New Jersey, USA: Addison Wesley, 2003.
POPPENDIECK, Mary; POPPENDIECK, Tom. Implementing Lean Software
Development: From Concept to Cash. 1st Edition. New Jersey, USA: Addison
Wesley, 2007.
Kanban [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 17 de
enero de 2010]. Disponible en <http://es.wikipedia.org/wiki/Kanban>.
Lean software development [en línea]. Wikipedia, La enciclopedia libre, 2009
[fecha de consulta: 16 y 17 de enero de 2010]. Disponible en <http://
es.wikipedia.org/wiki/Lean_software_development>.
Toyotismo [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 16
de enero de 2010]. Disponible en <http://es.wikipedia.org/wiki/Toyotismo>.
NUMMI [en línea]. Wikipedia, The Free Encyclopedia, 2010 [fecha de consulta: 17
de enero de 2010]. Disponible en <http://en.wikipedia.org/wiki/NUMMI>.