domingo, 15 de diciembre de 2019

¿Existe un mapa de metodologías y métodos?

Juan Palacio de Scrum Manager creó un mapa de metodologías que me parece interesantísimo y quiero compartir en este post, pone de relieve las dimensiones que son clave para entender las diferentes formas de afrontar un proyecto.

Desde los 80 se han desarrollado tantos modelos de procesos, marcos y prácticas de trabajo para mejorar la calidad y eficiencia en los proyectos de software, que resulta útil trascender las etiquetas y llegar a la base de los principios que subyacen, y las estrategias con las que los desarrollan; de forma que usando como coordenadas tres conceptos: “desarrollo, trabajo y conocimiento”, y dos modelos de gestión: “predictiva y evolutiva” se despeja y simplifica el aparente laberinto de modelos de procesos, marcos o prácticas de trabajo a los que nos referimos: CMM-SW, CMMI, PMBOK, DSDM, Crystal, ISO 15504, RUP, XP, Scrum, ITIL, ASD, PRINCE 2, Lean, Kanban, TDD, etc..

Las diferentes prácticas y metodologías responden a combinaciones de tres conceptos y dos patrones de gestión de proyectos.
Diagrama de conceptos de la gestión de proyectos - cortesía de Scrum Manager
Conceptos

1.- Desarrollo

Completo: La descripción de lo que se desea obtener está disponible al inicio del proyecto, es completa y detallada, sirve de base para estimar el plan del proyecto: tareas, recursos y agenda de trabajo. Durante la ejecución se gestiona su cumplimiento.

Incremental: La descripción de lo que se desea obtener no está disponible de forma completa y detallada al inicio: se complementa y evoluciona en paralelo al desarrollo, que genera el resultado de forma incremental y que se puede gestionar con dos tácticas diferentes:
  • Desarrollo incremental continuo: Empleando técnicas para lograr un flujo continuo de desarrollo de las funcionalidades o partes del producto, que se entregan de forma continua al cliente.
  • Desarrollo incremental iterativo: Empleando técnicas de tiempo prefijado o timeboxing para mantener la producción de incrementos del producto de forma cíclica y continua. Este es el marco de producción empleado al aplicar el marco estándar de Scrum, que define como sprint a cada iteración de desarrollo, al final de la cual se produce un incremento del producto.
2.- Trabajo

Secuencial (cascada): Divide el trabajo en fases, que comienzan al terminar la anterior. El ejemplo más habitual es el ciclo de cascada definido en Ingeniería del software con las fases de requisitos, análisis, diseño, codificación, pruebas e implementación.

Concurrente: Solapa en el tiempo las diferentes fases. Siguiendo con el ejemplo de ingeniería de software, la definición de requisitos, el análisis, la codificación y el despliegue del resultado se realiza y revisa de forma simultánea y continua.

3.- Conocimiento

¿Dónde se encuentra el principal conocimiento empleado, en la correcta ejecución del proceso o en el saber hacer de la persona que lo realiza?

Producción basada en procesos: El conocimiento o know-how, responsable de la calidad del resultado se encuentra en mayor medida en los procesos y la tecnología empleada: “La calidad del resultado depende de la calidad de los procesos empleados“.

Producción basada en personas: El conocimiento o know-how responsable de la calidad del resultado se encuentra en mayor medida en el “saber hacer” tácito de las personas que lo construyen.

Patrones de gestión del proyecto

Gestión predictiva

Modelo de gestión cuyo objetivo es ofrecer resultados predecibles: desarrollo del producto previsto, en el tiempo previsto, e invirtiendo los recursos previstos. Emplea una estrategia de desarrollo completo con prácticas de planificación tradicional. Los principales referentes en el desarrollo de conocimiento para este tipo de gestión son PMI e IPMA y los modelos de procesos CMMI, ISO 15504, SPICE, entre otros, que emplean ingeniería secuencial y producción basada en procesos.

Gestión evolutiva

Modelo de gestión cuyo objetivo es entregar lo antes posible un Mínimo Producto Viable, e incrementar su valor de forma continua. Emplea una estrategia de solapamiento de las fases de trabajo, y desarrollo incremental, que se puede obtener manteniendo un ritmo de iteraciones breves y cíclicas o un flujo de desarrollo constante. Puede llevarse a cabo con producción basada en procesos (ingeniería concurrente) o con producción basada en personas (Agilidad).

Es importante esta distinción porque sin ella se generan situaciones confusas que llegan a considerar Agilidad a la simple aplicación de las reglas estándar de Scrum (ciclo de incremento iterativo con roles y artefactos definidos), o al simple uso de técnicas de gestión visual Kanban para mantener un flujo continuo de tareas.

Extraído del guía de estudio de Scrum Manager

6 comentarios:

  1. Gracias por esta magnífica entrada.
    Tras su lectura detallada nos ha surgido una duda sobre la diferencia entre "Desarrollo incremental continuo" y "Desarrollo incremental iterativo".
    ¿Podrías ponernos algún ejemplo más concreto de cada tipo?
    ¿Podríamos encontrar ejemplos de los dos tipos dentro de Github?

    Un saludo
    Carlos López

    ResponderEliminar
    Respuestas
    1. Hola Carlos,

      Voy a intentar traer claridad sobre ambos conceptos.

      Desarrollo incremental continuo: Construimos funcionalidades completas (de principio a fin y terminadas al 100%, que sean desplegables en producción) una detrás de otra (de forma continua), y no empezamos hasta la siguiente hasta haber terminado al 100% la anterior. Puede que el equipo trabaje en "n" cosas a las vez, pero se establece que está prohibido superar las "n", donde "n" representa una limitación a las unidades en curso, se conoce como límite WIP. Por ejemplo, si el equipo ha decidido trabajar en no más de 3 funcionalidades, no empieza una funcionalidad nueva hasta que al menos una de las 3 en curso esté terminada al 100% (y recalco al 100%). Esa forma de limitar el trabajo en curso imprime foco, flujo y calidad. El método ágil que trata esta manera de trabajar se llama Kanban.


      Desarrollo incremental iterativo: Construimos funcionalidades completas (de principio a fin y terminadas al 100%, que sean desplegables en producción) en incrementos delimitados por una caja de tiempo (iteraciones o sprints), usualmente de 2 semanas. En este tipo de desarrollo el equipo planifica 2 semanas de trabajo para focalizarse en esas 2 semanas a construir esas funcionalidades y poder entregarlas al final de la iteración, y de nuevo, terminadas al 100%. Eso se llama cadencia y uno de los aprendizajes duros para equipos y todo lo que les rodea, incluida la empresa, es aprender a empezar y terminar cosas al 100% con ese ritmo. Una vez conseguido ese aprendizaje ganaremos foco, flujo y calidad. El método ágil que trata esta manera de trabajar se llama Scrum.

      Encontrarás recursos de desarrollo ágil (busca Scrum y Kanban) aquí: https://github.com/lorabv/awesome-agile#the-fundamentals

      OpenProject es un gestor de proyectos que te permitirá gestionar proyectos con "Desarrollo incremental continuo" o Kanban, y "Desarrollo incremental iterativo" o Scrum: https://github.com/opf/openproject

      Espero haberte ayudado, gracias por escribir,

      Alex

      Eliminar
  2. Gracias por tu respuesta clarificadora Alexander. No solo me has ayudado a mi, también a mi equipo de estudiantes de la UBU.

    ResponderEliminar
  3. Gracias por la respuesta Alexander (y a Carlos por plantear mi duda aquí) Me estoy acercando por primera vez a este mundo y ha sido de gran ayuda.

    Saludos.

    Rodrigo

    ResponderEliminar
    Respuestas
    1. Hola Rodrigo,

      Mi recompensa es que mi blog sea de utilidad :-) Gracias por leer y mucho éxito.

      Saludos,

      Alex

      Eliminar