Lean Software Development
 Metodologías Ágiles




                       David Fernández Martínez
                       Universidad Europea de Madrid
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
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
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
Imagen: Wikimedia Commons
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
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
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
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
http://www.flickr.com/photos/nickbush/450151862/
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
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
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
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%
http://www.flickr.com/photos/nickbush/450151862/
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
Aumentar el feedback
  Modelo en Cascada
                                                    ¡¡¡NO
  Análisis                                       FUNCIONA!!!

             Diseño



                      Implementación



                                       Pruebas



                                                 Mantenimiento
Aumentar el feedback RECOMENDADO
Modelo Iterativo Incremental
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
http://www.flickr.com/photos/nickbush/450151862/
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
Decidir lo más tarde posible


 La tecnología cambia rápidamente
 La situación del negocio evoluciona
 ¡El software cambiará!
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!
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
http://www.flickr.com/photos/nickbush/450151862/
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
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
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
Kanban (Fabricación)




Imagen: Wikimedia Commons
Kanban (Software)
Tarjetas o lista de caracterlísticas
  Los desarrolladores saben lo que hacer
Pizarras
Gráficos
Reuniones diarias
  Estado
  Compromiso
  Necesidades
http://www.flickr.com/photos/nickbush/450151862/
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
Crear integridad

 Experiencia del cliente
 Integridad conceptual
   Componentes del sistema funciona como un todo
 Utilizamos la refactorización
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
http://www.flickr.com/photos/nickbush/450151862/
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
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
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...
http://www.flickr.com/photos/nickbush/450151862/
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
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
http://www.flickr.com/photos/nickbush/450151862/
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>.
http://blog.dfm.com.es
http://www.slideshare.net/davidfm
   @dave_dfm
                                    David Fernández, davidfm@linux.com

Lean Software Development

  • 1.
    Lean Software Development Metodologías Ágiles David Fernández Martínez 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) TaiichiOhno (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
  • 5.
  • 6.
    Nueva forma depensar (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 depensar (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 depensar (III) En vez de La prisa produce gastos La calidad cuesta más Sabemos que Los retrasos producen gastos La calidad hace ahorrar
  • 10.
  • 11.
    Principios Lean 1.Eliminar lospé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 fuentede 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%
  • 15.
  • 16.
    Principios Lean 1.Eliminar lospé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
  • 18.
    Aumentar el feedbackRECOMENDADO Modelo Iterativo Incremental
  • 19.
    Proyectos en problemas ¡Aumentarel 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
  • 20.
  • 21.
    Principios Lean 1.Eliminar lospé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ástarde posible La tecnología cambia rápidamente La situación del negocio evoluciona ¡El software cambiará!
  • 23.
    Escalada del coste Dostipos 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ástarde 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
  • 25.
  • 26.
    Principios Lean 1.Eliminar lospé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 organizacionesmá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 lavelocidad 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
  • 29.
  • 30.
    Kanban (Software) Tarjetas olista de caracterlísticas Los desarrolladores saben lo que hacer Pizarras Gráficos Reuniones diarias Estado Compromiso Necesidades
  • 31.
  • 32.
    Principios Lean 1.Eliminar lospé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 Experienciadel 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
  • 35.
  • 36.
    Principios Lean 1.Eliminar lospé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...
  • 39.
  • 40.
    Principios Lean 1.Eliminar lospé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 elconjunto 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
  • 42.
  • 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>.
  • 44.
    http://blog.dfm.com.es http://www.slideshare.net/davidfm @dave_dfm David Fernández, davidfm@linux.com