El desarrollo de software lean

Con el ánimo de tener herramientas para mejorar en la orientación de las actividades de mi equipo me he enfocado recientemente en estudiar una metodología de desarrollo de software llamada Lean Software Development.

Lean (que se puede traducir como austero o eficiente) tiene su origen en el sistema de producción de Toyota. Desarrollado entre los años 30 y 80 del siglo pasado que buscaba tener un nivel de manufactura similar al de los EEUU sin contar con el mismo número de partes disponibles. Para lograrlo implementaron un sistema de mejora continua y optimización en la línea de producción y el manejo del inventario entre otras muchas cosas.

El mundo del software comenzó a transportar ideas de este sistema a principios de este siglo. Debido a la intangibilidad del producto (no hay algo material al final de la línea) se ha tenido que adaptar a una mentalidad y prácticas con herramientas y técnicas que la soportan.

El eje

La idea principal del desarrollo de software lean es mantener todo el enfoque en el cliente, maximizando el valor entregado y minimizando el desperdicio.

Se busca optimizar el flujo de desarrollo: invertir menos tiempo, necesitar el menor número de personas, minimizar los costos y entregar el producto con el menor número de defectos posible.

Los principios

El desarrollo de software lean se basa en siete principios.

Los siete principios del desarrollo de software lean

Eliminar los desperdicios

Dado que nuestro objetivo es el valor que el cliente obtiene al usar nuestro software todo aquello que no produce valor es considerado un desperdicio. Por ejemplo:

  • Defectos.
  • Código y funcionalidades innecesarias.
  • Optimización prematura.
  • Documentación innecesaria.
  • Tiempo de espera: retrasos en la entrega del software, falta de información, falta de instrucciones claras.
  • Procesamiento sin estandarización. Utilizar diferentes pasos cada vez que se completa la misma tarea.
  • Subutilización de la capacidad intelectual de los miembros del equipo.

Incrementar los resultados de cara al cliente requiere invertir los recursos, principalmente nuestro tiempo, de la mejor manera. Es importante ser capaces de observar los procesos y las técnicas con que desarrollamos y tratar de encontrar los desperdicios en nuestras actividades.

La aplicación y mejora continua de este principio es lo que determinará el índice del éxito en la aplicación de la metodología.

Amplificar el aprendizaje

Debemos incrementar la habilidad de aprender rápida y efectivamente acerca de las necesidades del usuario o del software que debemos desarrollar.

Es bastante común en el desarrollo del software encontrarse con interrogantes acerca de la mejor solución para el cliente. La mejor opción para tratar de resolver dichas interrogantes se encuentra en implementar un ciclo continuo:

  1. implementar una solución
  2. medir su impacto
  3. aprender al respecto

Mientras más rápido completemos dicho ciclo se incrementará nuestra efectividad para proveer valor al cliente.

Existen dos formas principales de aplicar este principio:

  • Ciclos de desarrollo corto que culminan en entrega de software.
  • Sincronización continua con el cliente.
    • Mostrarles la aplicación antes de liberarla para validar la implementación.
    • Desarrollar flujos e interfaces en colaboración con el cliente.
    • Liberar versiones sólo para un número reducido de usuarios y obtener retroalimentación.

Aplazar las decisiones

Es la habilidad de tomar decisiones respecto a la funcionalidad del software tan tarde como sea posible cuando no se cuenta con la información apropiada. Al igual que el anterior este principio trata de combatir la incertidumbre que rodea al desarrollo de software.

Puede ser logrado mediante:

  • Un diseño de software que permita cambios en su implementación de forma fácil.
  • Realizar un desarrollo que involucre diseño e implementación a la par.
  • Entregas rápidas de software.

Aplazar las decisiones implica una planeación alrededor de lo que nos permitirá adaptar el software rápidamente conforme se va obteniendo más información acerca de lo que otorga valor al cliente.

Entregar rápidamente

Se debe buscar reducir el tiempo del ciclo de liberación del software.

Este principio puede ser aplicado mediante:

  • La reducción en el tiempo invertido en la liberación del software.
  • Minimizar el tamaño o la magnitud de los elementos a implementar para la siguiente versión.
  • Evitar elementos que no pueden ser completados por falta de información.
  • Permitir a los miembros del equipo establecer un mecanismo de auto-asignación de trabajo con el objetivo de lograr óptima utilización de su tiempo.

Empoderar al equipo

Crear un ambiente apropiado para que el equipo de desarrollo sea capaz de resolver la incertidumbre y los problemas en el desarrollo de software requiere de la formación de un grupo con la habilidad de discutir y decidir acerca de los rumbos de acción a seguir.

Esta habilidad debe estar sustentada en la seguridad psicológica, la aceptación de la responsabilidad y el conocimiento apropiado acerca del contexto de cada uno de los miembros.

Desafortunadamente existe aún una mentalidad en el mundo de los negocios que mira al equipo de desarrollo como ejecutores de instrucciones y basa sus principios en la cadena de ensamblaje industrial donde las personas realizan sólo una labor repetitiva en el proceso. Desechar esta mentalidad incrementa las probabilidades de otorgar valor añadido para el usuario.

Empoderar al equipo permite resolver situaciones localmente, implicando que son aquellos que conocen el contexto quienes toman las decisiones necesarias.

Es este principio el que me guía en mi forma de liderar.

Internalizar la calidad y la integridad

La consideraciones respecto a la calidad y la integridad del producto no pueden ser tomadas a la ligera ni tardíamente.

Los defectos causan

  • Desperdicio de recursos.
  • Pérdida de interés en el usuario.
  • Incapacidad de corroborar el progreso real en nuestras entregas.

Este principio puede ser aplicado mediante

  • Definición de estándares.
  • Revisión de código entre los miembros del equipo.
  • Programación entre pares.
  • Pruebas automáticas del software.
  • Integración continua del software.
  • Desarrollo dirigido por pruebas (Test Driven Development).
  • Consciencia de cada miembro del equipo acerca de la importancia de la calidad en el software.

Optimizar en su totalidad

Las interacciones entre los miembros o componentes que permiten el desarrollo del software es comúnmente el lugar donde los retrasos y defectos son originados.

Se debe evitar intentar optimizar una parte del ciclo sin observar todo el conjunto para evitar crear problemas en otras áreas u optimizar una parte que no generaba tantos problemas.

Se debe también intentar sentar a la mesa a todos los involucrados en el ciclo de desarrollo para obtener retroalimentación y buscar soluciones en conjunto.

La Implementación

La estructura y objetivos de desarrollo de software lean en una empresa pueden variar dependiendo de su tamaño, naturaleza y situación. De forma general su implementación se puede comenzar mediante un tablero donde se listen las actividades que se están realizando en el ciclo de desarrollo.

A partir de ahí es responsabilidad del equipo observar, proponer y discutir formas de llevar a cabo las tareas efectivamente en el menor tiempo posible.

Es importante acompañar el tablero con métricas que nos ayuden a tomar decisiones durante el ciclo de desarrollo. Por ejemplo: cuántos elementos están en la cola, cuánta complejidad tienen cada uno de ellos, cuántas tareas podemos tener como máximo en cada estado, cuál es la capacidad actual para resolver tareas del equipo, cuál es el índice de entrega / defectos observado, etc.

Otra herramienta útil es tener actualizaciones constantes entre los miembros del equipo para poder alertar en caso de observar problemas en el flujo de las tareas.

Finalmente la retroalimentación es clave cuando tenemos como objetivo la mejora continua. Es importante tomar un momento cada cierto tiempo para tener una reunión que permita observar los avances o problemas en restrospectiva e idear mejoras en su conjunto.

Conclusión

El grado de éxito de un producto de software está determinado por el valor que sus clientes perciben al utilizarlo. La mejor forma de asegurar que se está entregando dicho valor es manteniendo el enfoque en el cliente, minimizando el desperdicio.

El desarrollo de software lean basa sus siete principios en esta idea. Nos insta a analizar y optimizar las actividades que llevamos a cabo para construir el software así como a validarlo lo antes posible con los clientes.

Recomendaciones

Lean Software Development en Coursera

Libro “The Lean Startup”

Libro “Leading Lean Software Development”

Comments:

Reseña – “The Lean Startup” de Eric Ries – Blog de Raymundo Vásquez Ruiz -

[…] un post anterior describí la metodología de desarrollo de software Lean y lo que conlleva para una organización […]