Lean Software Development: Difference between revisions

From Scrum Manager BoK
No edit summary
No edit summary
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__


Se trata de la aplicación de los principios Lean al desarrollo del software. Mary y Tom Poppendieck fueron quienes acuñaron estos términos. Gracias a sus aportes y los de la comunidad ágil, Lean Software Development va generando principios y prácticas para el desarrollo de software.  
Este término se refiere a la aplicación de los principios la [[manufactura lean]] o [[producción lean]] en el desarrollo del software. Mary y Tom Poppendieck [[Poppendieck & Poppendieck, 2003]] fueron quienes lo acuñaron. Gracias a sus aportes y los de la comunidad ágil, Lean Software Development está desarrollando un inventario de prácticas útiles para el desarrollo ágil de software.
Se basa en 7 principios:


Está basado en 7 principios que son aplicables en distintos ambientes para mejorar el desarrollo del software:


====1.Eliminar el desperdicio====
====1.Eliminar el desperdicio====
 
Las actividades que no crean valor no sirven y deben ser eliminadas. Algunos ejemplos:  
Todas las actividades que no crean valor no sirven y deben ser eliminadas. Por ejemplo: cuando se desarrollan tareas que no fueron solicitadas por el cliente, cuando existe una sobre documentación del proyecto, cuando el proceso de desarrollo se cumple sin analizar su nivel de eficiencia o vigencia.
*Tareas que no fueron solicitadas por el cliente.
Respecto del código se debe tener en cuenta que mayor cantidad de código no siempre es mejor, ya que en general requiere un mayor esfuerzo de testeo y de mantenimiento.
*Sobre-documentación del proyecto.
Por otro lado todos los errores, bugs y fallos del software son verdadero desperdicio que debe ser minimizado y eliminado.
*Procesos de desarrollo que se ejecutan sin analizar su nivel de eficiencia o vigencia.
*Un mayor número de líneas de código no siempre es mejor, y además requiere mayor esfuerzo de testeo y de mantenimiento.
*Los errores, bugs y fallos del software son verdadero desperdicio que se debe reducir.


====2.Construir con calidad====
====2.Construir con calidad====
Incluir en el procedimiento prácticas para mejora de la calidad en el producto (traslación de prácticas “poka-yoke” y “andon” al desarrollo de software).


La calidad debe ser vista tanto desde el proceso como desde el producto.
Un procedimiento que respeta la calidad es aquel que es conocido, entendido y mejorado por los propios participantes. Para lograrlo es necesario compromiso y respeto.
Un proceso que respeta la calidad es aquel que es conocido, entendido y mejorado por sus propios participantes. Para ello se necesita un importante nivel de compromiso y respeto.
Para desarrollar productos con calidad se pueden tener en cuenta elementos como:
a. Técnicas como TDD (Test Driven Development) permiten que usuarios (clientes), programadores y tester definan claramente los requerimientos y confeccionen pruebas de aceptación antes de escribir el código. Ayuda a la comprensión de los programadores y mejora el entendimiento de los requerimientos.
b. El programador es responsable de su propio desarrollo. No debe esperar a que Testing o QA descubra los errores.
c. Fomentar el desarrollo de pruebas automatizadas.
d. Refactorizar el código, buscando que no existan duplicaciones.


====3.Crear conocimiento====
Algunos ejemplos de prácticas que se deben contemplar al hacer software.
*Técnicas como [[TDD]] (Test Driven Development) permiten que usuarios (clientes), programadores y tester definan claramente los requerimientos y confeccionen pruebas de aceptación antes de escribir el código. Ayuda a la comprensión de los programadores y mejora el entendimiento de los requerimientos.
*El programador es responsable de su propio desarrollo. No debe esperar a que las pruebas o los procedimientos de aseguramiento de calidad descubran los errores.
*Fomentar el desarrollo de pruebas automatizadas.
*Refactorización del código, para lograr simplicidad y eliminar duplicidades.


Llegar al conocimiento de lo que necesita el cliente requiere de mucha dedicación y esfuerzo y debe convertirse en el aspecto principal a tener en cuenta, ya que el desarrollo de un producto que no es útil termina siendo un desperdicio.  
====3.Compartir conocimiento====
El proceso de desarrollo de software es un proceso de aprendizaje: hay que entender qué es lo que el cliente quiere y cómo podemos hacerlo lo mejor posible. El desarrollo iterativo incremental nos permite repetir muchas veces el proceso de aprendizaje para que podamos crear el conocimiento necesario.  
Conocer lo que necesita el cliente requiere dedicación y esfuerzo, y debe convertirse en el aspecto principal, porque desarrollar un producto que no es útil, es el mayor desperdicio.  
Hacer software implica un proceso de aprendizaje: entender qué es lo que el cliente quiere y cómo entregar la mejor solución posible. El desarrollo incremental proporciona cuantiosa y frecuente retroinformación.


====4.Diferir el compromiso====
====4.Diferir el compromiso====
 
En los proyectos ágiles que parten con una visión que evoluciona con el desarrollo, el compromiso con el cliente se asienta y evoluciona en la misma medida que se van concretando y comprometiendo los incrementos del producto.
Lean sostiene que el compromiso (básicamente con los requisitos del cliente) no puede hacerse hasta que los mismos no estén claramente expresados y entendidos. En muchos proyectos se hace un compromiso inicial con requisitos incompletos, inestables e incoherentes, siendo esto un detonante del fracaso del proyecto.
No todos los requisitos tienen la misma importancia para el cliente, por ello se recomienda tomar compromiso respecto del análisis de aquellos que se merecen esta inversión de tiempo y esfuerzo. Lo mismo sucede con qué requisitos pueden ser diseñados, codificados y testeados.


====5.Entregar rápido====
====5.Entregar rápido====
 
La gestión evolutiva realiza entregas rápidas a los clientes, que se encuentran con código operativo desde etapas tempranas. Dicho código debe ser desarrollado con calidad ya que no se puede mantener una velocidad importante de entrega si no se cuenta con calidad y un equipo disciplinado, comprometido y confiable.
El desarrollo iterativo permite realizar entregas rápidas a los clientes, quienes se encuentran con código funcionando desde etapas tempranas. Dicho código debe ser desarrollado con calidad ya que no se puede mantener una velocidad importante de entrega si no se cuenta con calidad y un equipo disciplinado, comprometido y confiable.
La entrega rápida permite a la organización ser competitiva respecto a otras, posicionarse en el mercado, y obtener ingresos de manera más temprana.


====6.Respetar a las personas====
====6.Respetar a las personas====
Lean se basa en el respecto por las personas que son el elemento único y diferenciador de cada organización.
Deben estar suficientemente capacitadas y ser responsables de los procesos en los que intervienen, de modo que cuando resultan necesarios cambios y mejoras, cada persona colabora en su desarrollo.


Tal como la agilidad, Lean se basa en el respecto por las personas. Las mismas son el elemento único y diferenciador por excelencia de la organización.
====7.Optimizar el todo====
Lean invita a contemplar el proceso completo, es decir todo el flujo de valor, en lugar de hacerlo en cada etapa. El problema de optimizar cada fase por separado es que genera inventarios grandes en los puntos de transición. En el mundo del software, estos "inventarios" representan al trabajo parcialmente terminado (por ejemplo, requisitos completos, pero sin diseñar, codificar o probar). Lean demostró que un flujo de "una pieza" (por ejemplo, enfocarse en construir un ítem de manera completa) es un proceso más eficiente que concentrarse en construir las partes separadas de forma rápida.


Se busca capacitarlas y hacerlas responsable de los procesos en los que interviene, de modo que si son necesarios cambios y mejoras, cada persona puede colaborar en el desarrollo de las mismas. Las técnicas como el análisis de problemas, y la responsabilidad que se proyecta en todos los actores es esencial para asegurar la participación y respeto de todos los involucrados.
====7.Optimizar el todo====


Lean nos invita a focalizarnos en el proceso completo, es decir todo el flujo de valor, en lugar de hacerlo en cada etapa. El problema con optimizar cada paso es que genera inventarios grandes entre los pasos. En el mundo del software, estos "inventarios" representan al trabajo parcialmente terminado (por ejemplo, requerimientos completos, pero sin diseñar, codificar o probar). Lean demostró que un flujo de "una pieza" (por ejemplo, enfocarse en construir un ítem de manera completa) es un proceso mucho más eficiente que concentrarse en construir todas las partes más rápido.


[[Category:Glosario de términos]][[Category:Temario Kanban y lean para la gestión ágil de proyectos TIC]]
[[Category:Glosario de términos]]
[[Category:Metodologías ágiles]]

Revision as of 12:12, 26 April 2021


Este término se refiere a la aplicación de los principios la manufactura lean o producción lean en el desarrollo del software. Mary y Tom Poppendieck Poppendieck & Poppendieck, 2003 fueron quienes lo acuñaron. Gracias a sus aportes y los de la comunidad ágil, Lean Software Development está desarrollando un inventario de prácticas útiles para el desarrollo ágil de software. Se basa en 7 principios:


1.Eliminar el desperdicio

Las actividades que no crean valor no sirven y deben ser eliminadas. Algunos ejemplos:

  • Tareas que no fueron solicitadas por el cliente.
  • Sobre-documentación del proyecto.
  • Procesos de desarrollo que se ejecutan sin analizar su nivel de eficiencia o vigencia.
  • Un mayor número de líneas de código no siempre es mejor, y además requiere mayor esfuerzo de testeo y de mantenimiento.
  • Los errores, bugs y fallos del software son verdadero desperdicio que se debe reducir.

2.Construir con calidad

Incluir en el procedimiento prácticas para mejora de la calidad en el producto (traslación de prácticas “poka-yoke” y “andon” al desarrollo de software).

Un procedimiento que respeta la calidad es aquel que es conocido, entendido y mejorado por los propios participantes. Para lograrlo es necesario compromiso y respeto.

Algunos ejemplos de prácticas que se deben contemplar al hacer software.

  • Técnicas como TDD (Test Driven Development) permiten que usuarios (clientes), programadores y tester definan claramente los requerimientos y confeccionen pruebas de aceptación antes de escribir el código. Ayuda a la comprensión de los programadores y mejora el entendimiento de los requerimientos.
  • El programador es responsable de su propio desarrollo. No debe esperar a que las pruebas o los procedimientos de aseguramiento de calidad descubran los errores.
  • Fomentar el desarrollo de pruebas automatizadas.
  • Refactorización del código, para lograr simplicidad y eliminar duplicidades.

3.Compartir conocimiento

Conocer lo que necesita el cliente requiere dedicación y esfuerzo, y debe convertirse en el aspecto principal, porque desarrollar un producto que no es útil, es el mayor desperdicio. Hacer software implica un proceso de aprendizaje: entender qué es lo que el cliente quiere y cómo entregar la mejor solución posible. El desarrollo incremental proporciona cuantiosa y frecuente retroinformación.

4.Diferir el compromiso

En los proyectos ágiles que parten con una visión que evoluciona con el desarrollo, el compromiso con el cliente se asienta y evoluciona en la misma medida que se van concretando y comprometiendo los incrementos del producto.

5.Entregar rápido

La gestión evolutiva realiza entregas rápidas a los clientes, que se encuentran con código operativo desde etapas tempranas. Dicho código debe ser desarrollado con calidad ya que no se puede mantener una velocidad importante de entrega si no se cuenta con calidad y un equipo disciplinado, comprometido y confiable.

6.Respetar a las personas

Lean se basa en el respecto por las personas que son el elemento único y diferenciador de cada organización. Deben estar suficientemente capacitadas y ser responsables de los procesos en los que intervienen, de modo que cuando resultan necesarios cambios y mejoras, cada persona colabora en su desarrollo.

7.Optimizar el todo

Lean invita a contemplar el proceso completo, es decir todo el flujo de valor, en lugar de hacerlo en cada etapa. El problema de optimizar cada fase por separado es que genera inventarios grandes en los puntos de transición. En el mundo del software, estos "inventarios" representan al trabajo parcialmente terminado (por ejemplo, requisitos completos, pero sin diseñar, codificar o probar). Lean demostró que un flujo de "una pieza" (por ejemplo, enfocarse en construir un ítem de manera completa) es un proceso más eficiente que concentrarse en construir las partes separadas de forma rápida.