viernes, 27 de marzo de 2009

Lean en la producción de Software


Considerado por los expertos como el sistema de fabricación del siglo XXI, Lean Manufacturing es un sistema de gestion de proceso de producción impulsado por Toyota. Su objetivo primordial es implantar la eficacia en todos los procesos del negocio, eliminando las actividades que no aportan valor añadido (denominadas waste), con el fin de generar beneficios tangibles para el cliente final.

Veamos los cinco principios del Lean:
  1. "Understanding Consumer Value" o comprensión de lo que es valor para el cliente; el foco se externaliza desplazándose hasta el consumidor final, que es quien decide lo que es importante y le aporta valor.
  2. "Value Stream Analysis" o estudio de todas las fases del proceso de producción, para determinar las que añaden valor y las que se deben cambiar o eliminar.
  3. "Flow" o unificación de las fases de trabajo en un espacio único.
  4. "Pull" o fase final, en la que el producto no se termina hasta que los clientes no hacen el pedido.
  5. "Perfection" u objetivo final. En la medida en que se eliminan los pasos innecesarios y los flujos de trabajo se adaptan a los pedidos de los clientes, se comprueban las reducciones de costes, esfuerzo y tiempos de trabajo en todas las áreas de la empresa. continuas.

Mejoras Continuas.

El soporte a los principios del Lean Manufacturing, se realiza en tres áreas funcionales básicas: gestión, planificación y ejecución, y reducción de actividades sin valor añadido.

En el área de gestión, esta metodología analiza todos los procesos y prácticas respecto a una serie de indicadores clave, y establece unos criterios fundamentales que sirven de punto de partida para medir las mejoras y progresos durante el proceso de implementación del Lean Manufacturing.

En el área de planificación y ejecución, la fabricación comienza cuando el cliente hace el pedido. Mediante el sistema Kanban de planificación y ejecución, se establece un flujo ordenado y automático de materiales, tanto en lo que se refiere a peticiones y aprovisionamientos como a cantidades, proveedores y lugares de destino, basándose en la demanda actual.

Los proveedores también pueden formar parte del sistema gracias al desarrollo de portales web en los que pueden verificar los niveles de existencias y reponer ellos mismos el material en función de los niveles acordados.

La posibilidad de replicar actividades repetitivas sin necesidad de emitir órdenes de trabajo para cada una de ellas o de establecer líneas de producción independientes para cada trabajo, son otras de las ventajas de este sistema que reduce los tiempos muertos entre cada etapa.

Por último, el sistema Lean incide con especial interés en la reducción de actividades que no aportan valor añadido ”waste”. Básicamente, esta metodología identifica siete tipos de waste:

  • Exceso de producción o producción temprana: producir más de lo que el cliente demanda o hacerlo antes de tiempo. Ocupa trabajo y recursos valiosos que se podrían utilizar en responder a la demanda del cliente.
  • Retrasos: por falta de planificación, de comunicación o de tardanza en el suministro de materiales, herramientas, información…
  • Transportes desde o hacia el lugar del proceso: los materiales se deberían entregar y almacenar en el punto de fabricación, para evitar traslados innecesarios.
  • Inventarios: se deben reducir al mínimo ya que suponen un coste financiero y de almacenamiento.
  • Procesos: dedicar más esfuerzos de los necesarios en revisiones y actualizaciones; la calidad se debe insertar en todas las fases del proceso de forma que cada una de ellas sea correcta desde el principio.
  • Defectos: multiplican los costes y el tiempo de trabajo y consumen una parte importante de los recursos para su solución.
  • Desplazamientos: los empleados deben tener a su disposición todas las herramientas y recursos que vayan a necesitar para evitar desplazamientos innecesarios.
Mejoras Operativas

90% reducción de tiempos en el ciclo de trabajo

50% incremento de la productividad

80% reducción del inventario

80% mejora de la calidad final

75% reducción del espacio utilizado

Para eliminar o reducir el waste, existen una serie de técnicas que abarcan todas las áreas funcionales como: análisis de producción de la empresa, análisis de las actividades de valor, sistema de gestión de calidad total, mantenimiento totalmente productivo, análisis Kaizen de costes y fijación de precios, ingeniería y gestión del cambio y gestión de la documentación.

Como se ha visto, la implantación de la metodología Lean implica el compromiso de toda las áreas funcionales de la empresa y supone un cambio de mentalidad basado en la calidad total. Además ayuda a generar una dinámica propia de mejora, por lo que la adaptación a las caracteristicas de cada caso es indispensable. Por todo ello las ideas centrales del pensamiento Lean no incluyen explicitamente una implementación.

Fuente: Principios Lean para una fabricación eficaz. de IFS España

Ahora bien, En el caso puntual de la industria del software la respuesta rápida al cambio es un requisito indispensable. Cuantas veces hemos oido la frase: "¿Pero como, ahora es tan dificil agregar un botón en el formulario?" Haciendo una analogía apresurada con la ingeniería de puentes, ¿cuántos habitantes de una región(clientes) han pedido modificar el puente ya construido para que en vez de que sea de tipo colgante sea en arco. El cliente ve un proyecto de software como algo blando, fácilmente modificable, y sabemos que no siempre es asi. Pero entonces, ¿qué hacemos? Tratamos de persuadir al cliente que la Ingeniería del Software es tan rígida como la Ingenería Civil o buscamos adaptarnos a la flexibidad requerida.

Teniendo en cuenta lo anterior, la industria del software es el contexto ideal para implementar Lean. Toyota y muchas empresas ajenas a la industria del software tuvieron éxito y mejoraron su productivad con su implementación. Si el software se identifica tanto con los principios del Lean, ¿porqué no implementarlo?

El mismo RUP propone cierta flexibidad al cambio. Eso si, exige abundante documentación para poder llevarla a cabo. En un ciclo productivo Lean se analizaria que documentación es útil en la producción y que documentación es pérdida de tiempo y recursos. Aquí es donde entran las metologías ágiles. Si, es verdad, al igual que las religiones, todas se parecen. Pero cada una busca su implementación de la filosofía Lean para maximizar la producción. Noten que ahora hice referencia a Lean como una filosofía y no como una metología. Si se quiere se puede ver a Lean como una especificación de principios y a cada metodología agil como una implementación de Lean que intenta conducir un proyecto por el camino del éxito.

Sin dejar la objetividad de un ideal de fábrica de software productiva y metodológica, quiero abrir el debate y leer sus opiniones.

3 comentarios:

  1. Un tema muy interesante! Para comenzar, pienso que una "fabrica de software" no es una línea de montaje de autos, por lo que habría que adecuar el pensamiento Lean al marco del desarrollo de software, que tiene sus propios problemas y sus propios desafíos. Me parece imprescindible entender cual es la dinámica del desarrollo de software para poder aportar una solución.
    Las ingenierías tradicionales (Civil o Mecánica) y la de Software tienen algunas cosas en común, pero no tantas. Es necesario poder distinguir estos puntos comunes para que nosotros, inmaduros ingenieros de software, podamos aprender de una disciplina tan vieja y establecida como la ingeniería civil. Por ejemplo, mirando la lista de desperdicios, se pueden rescatar muchos conceptos: todo lo relativo a restrasos, procesos y defectos se aplicaría 100%. Dentro del concepto de desplazamiento podemos ubicar la necesidad de tener disponibilidad cercana de todos los elementos para trabajar (en nuestro caso PC, impresora, IDE, etc), y dejemos de contar.
    Por otra parte, yendo a nuestros propios problemas, el tema de los cambios en los requerimientos en la industria del software no podría haber sido soportado por otra disciplina. En ese sentido somos "blandos", "flexibles" (quizás porque nuestro objeto es intangible) y eso nos termina costando caro en teminos de presupuesto y plazos, gerentes descontentos, clientes ofuscados, y proyectos chicle.
    Aqui es donde aparecen algunas metodologías ágiles, imposibles de aplicar en otra disciplina ¿Alguien se imagina algo similar en una línea de ensamble?
    Para cerrar, pienso que informáticos y civiles somos parecidos, pero bastante diferentes. Compro la filosofía lean, pero hay que buscarle bien la vuelta para aplicar exitosamente sus conceptos en la industria del software.
    Fred Brooks decía en 1986 que no preveía una bala de plata para matar mágicamente al mostruo llamado proyecto de software. Casi 25 años después la seguimos buscando...

    ResponderEliminar
  2. La verdad que Lean tiene algunos conceptos muy interesantes, es obvio que si una empresa busca eliminar actividades que no agregan valor al proceso se obtendrá una ganancia, lamentablemente esto es algo muy difícil de hacer comprender a gerentes que se oponen al cambio y siguen trabajando con metodologías arcaicas (en la mayoría de los casos se sigue haciendo soft artesanal).
    De cualquier manera nunca estuve muy de acuerdo en equiparar una disciplina como la Ingeniería de Software con otras ingenierías tradicionales, creo que se pueden tomar algunas ideas útiles pero pienso que son muy rígidas y no se adaptan muy bien a los cambios, esto se puede ver en estimaciones que rara vez se ajustan al costo final del proyecto y en problemas que surgen ante la rotación de recursos, no se puede cambiar un desarrollador por otro sin pagar un costo alto hasta que esté productivo (y creo que esta es la diferencia fundamental con las ingenierías tradicionales).
    Para terminar pienso se pueden aplicar algunos principios de Lean en el desarrollo de software (no se si Pull es aplicable, una gran parte de los productos de soft son bajo demanda).

    ResponderEliminar
  3. Diego Ruy: Para comenzar, pienso que una "fabrica de software" no es una línea de montaje de autos, por lo que habría que adecuar el pensamiento Lean al marco del desarrollo de software, que tiene sus propios problemas y sus propios desafíos.

    Si, ese es un punto importantísimo. Como el software es cross a todas las ciencias, cada proyecto de software tiene sus problemas particulares. Por ejemplo, es muy probable que si se implementase exactamente la misma metodología para el desarrollo de un sistema bancario y para un juego de acción, no obtengamos los mismos resultados productivos.
    De todas formas hay problemas comúnes en cualquier desarrollo. Las metodologías buscan soportar la mayoria de ellos, pero sólo las ágiles están abiertas para poder adecuarse a los problemas concretos de cada proyecto, por su naturaleza flexible.

    elmassi: De cualquier manera nunca estuve muy de acuerdo en equiparar una disciplina como la Ingeniería de Software con otras ingenierías tradicionales

    La idea de la analogía del desarrollo de software y la construcción de puentes es precisamente mostrar porque el software no puede ser tratado de la misma forma que el resto de las ingenierias.


    En cuanto a implementar Lean, la mayoria de las metologías ágiles toman su filosofía (la de eliminar progresivamente las actividades innecesarias). Obviamente la construcción de software, actualmente no corre sobre una línea de montaje, como si lo hacen las fabricas de Toyota. Pero las perspectiva a largo plazo de una Software Factory deberia ser permitir pensar en "líneas de montaje con robots constructores de software". Sin meterme en lenguajes 4G, el camino hacia la automatización es el camino a seguir. De hecho algunas de las herramientas ágiles que se promueven como la Integración Continua no es más que una automatización robotica en una "línea de montaje". Pero este tema ya da para otro debate. :D

    ResponderEliminar