febrero 26, 2009

Lean: Crear Conocimiento

Este principio -verdad subyacente que no cambia con el tiempo o el espacio- trata sobre la importancia del aprendizaje. El desarrollo de software es radicalmente distinto a los procesos de producción. La creación de software es un ejercicio de descubrimiento, mientras que la producción intenta limitar las variaciones entre elementos. Para mejorar este ejercicio debemos maximizar el aprendizaje en cada etapa.
Las herramientas propuestas para maximizar el aprendizaje son:

  • Feedback: Cualquier ciclo que termina con una evaluación de su desarrollo y resultado proporciona una oportunidad inmejorable para el aprendizaje. Las metodologías tradicionales plantean pocos puntos para el feedback, por que parece que cuestionan la planificación o el saber-hacer de la gestión de proyectos.
  • Iteraciones: Las iteraciones permiten aprender poco a poco sobre el proyecto, de manera incremental, probando y desarrollando sobre lo que se va aprendiendo.
  • Sincronización:Es imprescincible una buena sincronización entre las partes involucradas en desarrollos complejos. Se debe fomentar compartir el conocimiento entre las personas. Muchas metodologías ágiles comparten la idea de la propiedad del código compartida.
  • Desarrollo basado en conjuntos: Para aprender bien las cosas debes probarlas, hacerlas, ofrecer un rango de soluciones que podrían funcionar. Hay que ser capaz de desarrollar un conjunto de pruebas que muestren qué hipótesis eran las correctas sobre la solución de un problema.
El aprendizaje por tanto puede ser visto desde dos puntos de vista: el equipo que aprende a desarrollar software cada vez mejor, y el equipo que aprende cada vez más sobre el proyecto (funcionalidades, lógica) que está construyendo. Es importante que se crea en el concepto de mejora continua, de lo contrario, estas tareas de retrospectivas, feedback,... puede acabar quemando a gente que hubiese preferido un entorno más conocido (¿hay de esos por ahí?). Debe ser una situación gradual, de aprendizaje continuo, pero relajado.

febrero 16, 2009

Lean: Eliminar la basura

Este principio -verdad subyacente que no cambia con el tiempo o el espacio- trata sobre la necesidad de eliminar los elementos que producimos y que no son realmente necesarios para crear el producto software que necesitamos hacer, que no le añaden valor.
El primer punto por tanto es averiguar qué es lo que da valor y lo que no. Identificar los procesos, artefactos o tiempos que no añaden nada a lo que el cliente necesita. Algunos ejemplos [1] de basura dentro de un proyecto pueden ser:
  • Requerimientos que no se van a utilizar. Recordemos siempre la regla de Pareto. El 20% de las funcionalidades proporcionarán el 80% del valor del producto.
  • Complicaciones de diseño/interfaz que no eran necesarias.
  • Esperas entre etapas:
    • Tiempo desde que se obtiene la información hasta que se usa.
    • Tiempo desde que alguien necesita información hasta que la obtiene
    • Tiempo desde que se crea un error hasta que se detecta/corrige.
  • Otro tipo de esperas muy peligrosas, las producidas por la multitarea (o la procrastinación)
  • Escribir demasiado código. Puede estar relacionado con el tema de la complejidad, o quizás simplemente es que no se supo hacer de una manera más sencilla. Pero si algo lo puedes hacer con la mitad de código, estás creando basura.
  • Trabajo a medio hacer, sin terminar. Equivalente al inventario en sistemas de producción.
  • Errores, cada bug creado en el desarrollo es un desperdicio. Suena obvio, pero a veces ponemos más enfasis en encontrar la basura que en no generarla.
  • Actividades de gestión. Estas actividades no aportan valor directo a los productos, y aunque obviamente son muy importantes para el correcto funcionamiento de organizaciones y equipos, hay que vigilarlas para que no se conviertan en focos de desperdicio. Lo más típico: la burocracia.
Uno de las dificultades de este principio es discernir qué factores se pueden reducir o aligerar para eliminar basura. Identificar qué pasos en los procesos no producen valor para el cliente. No siempre valen las mismas conclusiones para todos los entornos. En algunos proyectos algunos tipos de documentación pueden ser un desperdicio, pero en otros, que por ejemplo ya sabes que después los vas a ceder a otro equipo o van a tener un mantenimiento muy prolongado, puede ser vital documentar exhaustivamente.
La herramienta propuesta por Lean[2] para la identificación de la "basura" es la creación de mapas de cadenas de valor, para analizar el flujo de aporte de valor de los procesos utilizados por el equipo para la creación del producto, desde su concepción hasta que llega al cliente. Los mapas ayudan a visualizar los tiempos que se pierden de manera gráfica.
Debes trabajar para poder ver las pérdidas de tiempo en un desarrollo de software. Determinadas veces serán obvias (burocracia, procesos de documentación que generan artefactos que nadie usa ni usará,...), pero otras no son tan claras, o lo que es peor, pueden no ser bien aceptados los cambios que necesitarías llevar a cabo para eliminarlos. La burocracia y las costumbres pueden ser dificiles de erradicar por que dan (falsa) seguridad y confianza[3].
Por lo tanto, ¿es este principio beneficioso para el desarrollo del software? Sin duda. Aporta mejoras en dos de las areas que comentamos en el primer post sobre Lean:
  • Mejora la productividad de la "tubería-desarrollo". Hacemos más eficaz los equipos y la organización por que dejamos de realizar tareas que no aportan valor al cliente, que al final, es quien determina nuestro éxito o fracaso.
  • Mejora las interacciones entre desarrollo y el resto de la organizacion. Recordemos que Lean se centra en la organización global. No debes dibujar un mapa de creación de valor para el departamento de desarrollo, si no para la organización completa! Seguro que salen muchas ineficiencias interdepartamentales.
Bibliografía:
[1] Implementing Lean Software Development
[2] Lean Software Development: An Agile Toolkit
[3] Eliminando obstáculos
[4] Gestionando la recesión con Lean, Agile y Scrum
[5] Los Poppendieck


febrero 10, 2009

Tres preguntas

Acabo de leer un post sobre Agile: ¿la evolución de las metodologías tradicionales? En general hace una comparativa sobre los métodos tradicionales y los ágiles de desarrollo de software. Expone algunos problemas que tienen las metodologías ágiles desde su punto de vista, que me han resultado interesantes por la experiencia en testeo del autor.
Pero lo que me han interesado han sido las tres preguntas con las que acaba el post:

  • ¿Existe la evolución de las metodologías Agiles?
  • Aquí creo que el autor se refiere a preguntar por si las siguientes generaciones de metodologías ágiles van a ser más formales, con un enfoque más tradicional. Creo que podrá haber dos evoluciones hasta que llegue la revolución. La primera, miles de equipos adaptando sus propias metodologías, y variantes de las definidas actualmente. Y la segunda, las que provengan basadas en el concepto de Lean Development. Estas evoluciones especificadas más formalmente basadas en Lean, proveerán el marco más ágil visto nunca para el desarrollo de software, plasmando los principios en procesos.
    Después vendrá la revolución en el desarrollo de software, pero de eso todavía no tengo pistas.

  • ¿Surgieron por si solas o son adquiridas y formadas en reacción a la complejidad propuesta por las metodologías tradicionales?

  • Yo no tengo duda que actualmente se han formalizado como reacción a las tradicionales, pero que no han surgido en su concepto de ellas. Antes se empezó a desarrollar software, cada uno haciendo las cosas como podían. Una serie de gente formalizó los procesos de creación de software basándose en las teorías clásicas de gestión de proyectos industriales, y de ahí surgieron las metodologías formales. El resto estuvieron callados hasta que vieron que la presión de las mismas era demasiado negativa. Y volvieron a los orígenes.

  • ¿Las metodologías Agiles de alguna nueva generación no serán en si mismas las adaptaciones y evoluciones de metodologías tradicionales?

  • No lo creo. Puede haber una síntesis de las mismas, de las dos corrientes, que quizás nos lleve a un mejor sitio del que nos encontramos ahora, o quizás no. Pero los principios en los que cree cada tipo de metodologías son básicamente contrarios. Se podrían reconciliar prácticas o procesos, pero reconciliar principios que das como intrínsecamente ciertos es más dificil.



Un saludo a Javo, me ha gustado mucho su blog. No todo va a ser leer bonanzas sobre "las ágiles" ;)

febrero 08, 2009

Desarrollo software Lean

Uno de los temas en los que estoy más interesado ultimamente en este mundo del desarrollo de software es el "Lean Development". Es un conceto que surgio de la adaptación del modelo de Toyota de fabricación al software. Orginariamente parece que fueron "los Poppendieck" los inventores del término, en un par de libros que no te puedes perder:
Lo importante de Lean, es que se basa en unos principios, adaptados del TPS. Y esto es una de las claves para su futuro éxito, que no son herramientas, no son pasos a dar o procesos a seguir. Son principios cuyo valor reside en su aplicabilidad independientemente del "estado del arte" en el que te encuentres. Las medidas las decides tú, los cambios guiados por principios son efectivos si los principios son adecuados. Así que llegamos a la cuestión, ¿son los principios Lean acertados para lograr un mejor desarrollo de software? (Ahí es nada, definimos mejor como de mejor calidad, mejor satisfacción del cliente, mejor ganancias para el proveedor,... mejor lo que quieras!)
¿Cuales son estos principios? (el orden no importa)
  • Eliminar la basura
  • Crear conocimiento
  • Construir calidad inherente en el producto
  • Retrasar el compromiso
  • Entregar rápidamente
  • Respetar a las personas
  • Mejorar el sistema global
Iremos viendo cada uno, intentando adivinar si son beneficiosos para el desarrollo de software. (!me acabo de obligar a escribir al menos 7 posts!).
Otra pregunta que te sueles hacer cuando empiezas a conocer Lean es su relación con las metodologías ágiles. Básicamente creo que hablan de lo mismo, pero Lean está un paso por encima a nivel organizativo. Las metodologías ágiles (XP y Scrum al menos, que son las que más conozco, no olvidemos que existen otras) se focalizan en el equipo que desarrolla un proyecto. Lean complemente esa visión con principios aplicables a la organización que soporta los equipos, y que debe gestionar un portfolio de proyectos y equipos. Hay cuatro cuestiones que se deben lograr:
  • Seleccionar las cosas adecuadas en las que currar (Lean Management). ¿te interesan todos los proyectos?
  • Ajustar la carga de trabajo a la capacidad. Muchas veces ni siquiera conoces tu capacidad.
  • Mejorar la productividad de la "tubería-desarrollo" (Lean-Scrum). Aumentar la capacidad del sistema.
  • Mejorar las interacciones entre desarrollo y el resto de la organizacion. Recordemos que Lean se centra en mejorar el sistema global.
Recapitularemos tras ver los principios, y volveremos sobre estas cuatro cuestiones. Si quieres ir adelantando las ideas, aquí tienes una pequeña recapitulación de los principios.

P.1 Eliminación de la basura.
P.2 Creando conocimiento
P.3 Construir con Calidad

febrero 02, 2009

Aprendizaje como mejora continua - Retrospectivas

Las retrospectivas son una de cuestiones en las metodologías ágiles más útiles. Una pieza clave en la mejora continua que se espera de un equipo ágil (bueno, se esperará de cualquiera, ¿no?). Pero lo realmente fundamental es el aprendizaje continuo, que lleva a una evolución mucho más profunda que una simple mejora de los procesos.
La rotación de las personas que asimilan el aprendizaje continuo entre diferentes equipos, puede enriquecer cada uno de los diferentes proyectos en los que participen. Es dificil elevar los procesos entre diferentes equipos, cada uno puede mejorar a su ritmo, o ir en direcciones diferente. Pero el conocimiento se queda en cada una de las personas que participan. Esa es la mejor manera de que la organización adquiera el conocimiento en la creación de software. Puedes crear wikis, blogs y usar twitter para registrar toda la información, pero nunca podrás replicar la experiencia de haber participado en un proceso de mejora continua, de ver los porqués de los procesos, de los cambios, de las ideas.