Lean Software Development: Difference between revisions
No edit summary |
|||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
'''''Lean Software Development''''' se refiere a la aplicación de los principios la [[manufactura lean]] o [[producción lean]] en el desarrollo del software. | |||
==Origen== | |||
Mary y Tom Poppendieck<sup>1</sup> 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. | |||
==Principios== | |||
Se basa en 7 principios: | 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. | *Tareas que no fueron solicitadas por el cliente. | ||
*Sobre documentación del proyecto | *Sobre-documentación del proyecto. | ||
*Procesos de desarrollo que se ejecutan sin analizar su nivel de eficiencia o vigencia. | *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 debe | *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. | |||
*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. | Algunos ejemplos de prácticas que se deben contemplar al hacer software: | ||
*El programador es responsable de su propio desarrollo. No debe esperar a que | *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. | *Fomentar el desarrollo de pruebas automatizadas. | ||
Refactorización del código, para lograr simplicidad y eliminar duplicidades. | *Refactorización del código, para lograr simplicidad y eliminar duplicidades. | ||
===3.Compartir conocimiento=== | |||
Conocer | 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. | |||
En los proyectos ágiles que parten con una visión | |||
===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. | 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. | 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. | 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. | ||
==Véase también== | |||
*[[Lean]]. | |||
*[[Manufactura lean]]. | |||
*[[Lean inception]]. | |||
*[[Kanban: origen y definición]]. | |||
==Referencias== | |||
*<sup>1</sup>Poppendieck, M.; Poppendieck, T. (2003) ''Lean Software Development: An Agile Toolkit for Software Development Managers'', Addison Wesley. | |||
[[Category:Glosario de términos]] | [[Category:Glosario de términos]] | ||
[[Category: | [[Category:Metodologías ágiles]] |
Latest revision as of 10:56, 19 December 2023
Lean Software Development se refiere a la aplicación de los principios la manufactura lean o producción lean en el desarrollo del software.
Origen
Mary y Tom Poppendieck1 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.
Principios
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.
Véase también
Referencias
- 1Poppendieck, M.; Poppendieck, T. (2003) Lean Software Development: An Agile Toolkit for Software Development Managers, Addison Wesley.