Mostrando entradas con la etiqueta Agile. Mostrar todas las entradas
Mostrando entradas con la etiqueta Agile. Mostrar todas las entradas

DSN_XP y los métodos ágiles

 ¿Metodologías ágiles realmente diferentes?


Documento de posición para el taller OOPSLA 2003
Jens Coldewey
Consultoría Coldewey
correo electrónico: jens_coldewey@acm.org 
http://www.coldewey.com

Enfoques de una metodología

Además de considerar los procesos que una metodología supone utilizar, otro tema de interés para estudios es el modelo que subyace a la metodología. Aunque esto está estrechamente relacionado con el valor del sistema, el modelo no soporta juicio ético, como lo hace un sistema de valores.

Hay dos modelos populares para proyectos: el modelo de control y el modelo sistémico.  El modelo de control asume que hay roles de dirección centralizados en un proyecto, individuos capacitados que planifican y gestionan el proyecto. Estos roles incluyen el gerente de proyecto, el arquitecto, el jefe de programación, etc. Con este enfoque, el éxito y el fracaso del proyecto depende principalmente del desempeño de estos roles de control. Me referiré a estos roles como los "gerentes", aunque esto incluye todo tipo de gestión y control. 

Metodologías que utilizan este enfoque usualmente se concentran en los elementos que apoyan esta estructura:
  • Mejorar la comunicación entre los gerentes y los miembros del equipo operativo, como programadores.
  • Proporcionar estructuras de control y presentación de informes para permitir que los gerentes obtengan una buena imagen del estado del proyecto.
  • Asegurar que el trabajo operativo se realice de la manera más uniforme posible para facilitar la planificación, la predicción y control. Se supone que los miembros del equipo desempeñan determinados roles y se intercambian "recursos" capaces.
  • Clara separación de responsabilidades.
El último extremo de esta apreciación es Frederick Taylors, Scientific Management que estableció el terreno para el impulso económico del siglo pasado. La mayoría de los procesos tradicionales siguen este modelo.

Un enfoque alternativo es ver un proyecto como un sistema complejo. Los sistemas complejos tienen algunas características que las estructuras de comando y control no tienen: Su comportamiento es difícil de predecir y son muy flexibles. Controlar un sistema complejo no significa predecir y controlar cada acción única en él. Más bien significa comprender la estructura y las interrelaciones del sistema y configurarlos para que el sistema se adapte a las necesidades. 

El pensamiento sistémico proporciona el conjunto de herramientas apropiado para este tipo de enfoque.
Metodologías basadas en el pensamiento sistémico, ya sea de forma consciente o no, muestran algunas propiedades típicas:
  • Pocas reglas. La mayoría de las reglas establecen circuitos de retroalimentación y comunicación para asegurar que todas las partes del proyecto todavía se dirigen hacia el objetivo del proyecto.
  • La retroalimentación y la comunicación están diseñadas para ser lo más eficientes posible, en lugar de ser rastreable o controlable.
  • Pocos o ningún rol centralizado o jerárquico. Se asume que los miembros del equipo están bien capacitados, personas responsables que sean capaces de organizarse.

Comparación de los enfoques de las metodologías ágiles

La siguiente lista comprueba a qué enfoque pertenecen las diferentes metodologías ágiles:

Desarrollo de software adaptativo: ASD 

Es la única metodología que se basa explícitamente en la teoría de los sistemas adaptativos complejos, se limita a establecer un circuito de retroalimentación. ("Especular, colaborar, aprender") y configurar el entorno para un trabajo de proyecto eficiente. Un representante clásico del enfoque sistémico.

Metodologías Crystal:

El principal punto en común de todas las metodologías Crystal es un taller de verificación de los procesos al menos dos veces por incremento. Además, Cockburn ofrece siete principios a observar en un proyecto. Los roles y las organizaciones solo se proporcionan como sugerencias. Otro ejemplo de enfoque de sistemas

Método de desarrollo de software dinámico: DSDM

Define roles y responsabilidades explícitos como núcleo de la metodología. Se provocan bucles de retroalimentación para la entrega (entrega frecuente, todos los cambios son reversibles) pero no a nivel de proceso. Por tanto, DSMD utiliza un sistema de enfoque para dejar crecer el software pero un modelo de control para gestionar el proyecto.

Programación extrema: XP

Usa solo unas pocas reglas para configurar un entorno en el que el software puede crecer. Por tanto, la parte técnica utiliza claramente un enfoque de sistemas. En cuanto a la metodología XP mostró un desarrollo interesante en los últimos años. Aunque la metáfora de Kent Beck de "Aprender a conducir" apuntaba hacia un modelo de sistemas, declaraciones iniciales como "O haces todo como está escrito o no haces XP" a menudo se interpretaba como una señal para un modelo de control. Al darse cuenta de que estas declaraciones llevaron a XP en una dirección no deseada, la comunidad ahora acuerda la adaptación regular del proceso. Por lo tanto, XP puede ser considerada una metodología de sistemas en la actualidad.

Desarrollo impulsado por Funcionalidades: FDD 

Instala el rol de programador jefe y utiliza diseños basados en actualizaciones de frente al usario. Por lo tanto, FDD en mi percepción claramente utiliza un enfoque de control en lugar de utilizar una visión sistémica, aunque definitivamente es un proceso ligero.

Desarrollo Lean: 

La mayoría de las prácticas técnicas de LD son similares a lo que XP encontró útil, así que técnicamente LD también se basa en un modelo de sistemas. La gestión está muy centrada en auto organización y retroalimentación: indicadores para un modelo de sistema también.

Scrum: 

Define un ciclo de retroalimentación central como instrumento de control principal  que identifica a Scrum como metodología sistémica. Esto se suma al hecho de que scrum define pocos roles con el papel central del "Scrum Master" quien tiene la responsabilidad principalmente de facilitar el proceso en lugar del entregable.

Una conclusión sugerente

Sugiero definir el desarrollo ágil como una metodología basada en una visión sistémica del desarrollo de software. Esta visión conduce a los principios ágiles, así como a muchas metodologías ágiles.

Usar esta definición significaría reevaluar la comprensión actual de qué las metodologías son ágiles y las que no lo son. Según la lista anterior, esto reduciría el "completamente ágil" a metodologías como ASD, Crystal, XP en su forma actual, Lean Development y Scrum. DSDM se considerarían una metodología "técnicamente ágil" y la FDD se consideraría un proceso tradicional pesado.

DSN_XP y su base de conocimientos

Base de conocimientos DSN_XP

DSN_XP.BaseKnow

Nuestra base de conocimientos se establece gracias a las siguientes fuentes de información DSN_XP que son:

  • Biblioteca que contiene todos los libros que se han buscado en la red sobre un contexto específico de apoyo teórico para una investigación DSN_XP.
  • Investigaciones que son aquellos temas que debemos consultar para lograr definir un contexto apropiado para una intervención en la cual aplicaremos DSN_XP en cualquiera de sus versiones.
  • Actores que son aquellos personajes que hemos investigado como proponentes de una teoría o escuela de pensamiento que estamos consultando para describir un escenario de uso o experimentación con DSN_XP.

Conocimiento base

El primer nivel de conocimiento describe los principios básicos de un arte, ciencia o técnica, esto nos llevó a profundizar en aquellos aspectos académicos con los cuales podíamos contar como plataforma de conocimientos en aquel entonces.  

El conocimiento científico

Estudio inverso del método con DSN_XP
DSN_XP es una metodología para desarrollar conocimiento, como metodología posee la facultad de estudiar el método, por lo tanto, dicho estudio implica el uso de la técnica de observación y experimentación, este razonamiento es la fuente principal de conocimiento que aplica DSN_XP para conceptuar un modelo como artefacto, bajo esta premisa, DSN_XP está en la capacidad de definir lineamientos para una lectura adecuada y un uso apropiado del modelo.

Academia

Nuestra base de conocimientos estaba determinada tanto por nuestra formación académica como analista programador para pasar luego a formarnos como ingeniero en sistemas y finalmente como consultor técnico.

Nuestra base de conocimientos se conformaría inicialmente entre:

  • Técnicas de modelado, modelos y métodos en la historia del software. 
  • Herramientas y buenas prácticas referidas en los contextos de desarrollo de software.

Base de conocimientos DSN_XP

Conocimientos académicos

DSN_XP conceptúa como núcleo de su marco de trabajo, al desarrollo de una base de conocimientos que fueron obtenidos durante nuestra formación como Tecnólogo analista programador y luego como Ingeniero en sistemas.  

Estos conocimientos que forman nuestra base de conocimientos académicos, junto con las investigaciones temáticas desarrolladas, son referidos en cualquier intervención técnica que requiera de las recomendaciones de DSN_XP, así como el estudio y actualización constante de nuestros propios conocimientos para el modelado avanzado de software y el desarrollo de investigaciones temáticas

Escuelas de pensamiento

La información está disponible en cualquier parte, es preciso entonces su interpretación para comenzar a definir un conocimiento como la facultad de entender y juzgar una cosa. Bajo este razonamiento, se entiende entonces que son necesarias diversas áreas de conocimiento para conceptuar de forma holística todo el proceso de desarrollar software.

SWEBOK (IEEE)

Base de conocimientos sobre la ingeniería software


Las diversas áreas de conocimiento que estudiamos del SWEBOK son:
  • Requisitos del software
  • Diseño de software
  • Construcción de software
  • Pruebas de software (testing)
  • Mantenimiento de software
  • Administración de la configuración del software
  • Administración de la ingeniería software
  • Procesos de ingeniería software
  • Herramientas y métodos de la ingeniería software
  • Calidad del software

PMBOK (PMI)

Base de conocimientos sobre gestión de proyectos


Las diversas áreas de conocimiento que estudiamos del PMBOK son:
  • Gestión de la integración
  • Gestión del alcance
  • Gestión del tiempo
  • Gestión de la calidad
  • Gestión de costos
  • Gestión del riesgo
  • Gestión de recursos humanos
  • Gestión de la comunicación
  • Gestión de las compras y adquisiciones

BABOK (IIBA)

Base de conocimientos sobre el análisis de negocios


Las diversas áreas de conocimiento que soporta el BABOK son:
  • Análisis empresarial
  • Planificación de requerimientos y gestión
  • Elicitación de requerimientos
  • Análisis de requerimientos y documentación
  • Aseguramiento de la solución y validación

AGILE/LEAN/ADAPTIVE 

Base de conocimientos sobre gestión de proyectos ágiles

DSN_XP reconoce que todo proyecto software intrínsecamente contiene un factor de riesgo el cual debe ser gestionado adecuadamente, por ello, adopta la filosofía propuesta por el movimiento ágil.
Valoramos al equipo y su interacción, por encima de los procesos y las herramientas.
(TeamView)

El software que funciona, por encima de la documentación exhaustiva. 
(SoftwareView)

La colaboración con el cliente, por encima de la negociación contractual. 
(BusinessView)

La respuesta al cambio, por encima del seguimiento de un plan.
(Adaptive Framework)
El marco adaptativo requiere necesariamente de stakeholders participativos e involucrados en el proyecto, el riesgo al igual que el éxito o el fracaso de un proyecto es de responsabilidad compartida entre los miembros del equipo asignado a este. Pese a ello, el fracaso de un proyecto es de utilidad para el entorno ya que genera un aprendizaje de la cultura y el proceso se mejora continuamente.

Estudio de artefactos y métodos

Base de conocimientos sobre metodologías y marcos de trabajo

DSN_XP como metodología estudia al método, artefacto, modelo, etc., que es recomendado como buena práctica para el desarrollo de software. Esto involucra el estudio en la práctica de las siguientes escuelas de diseño:
  • Ciclos de vida para el desarrollo de software.
  • Modelos para la abstracción de diseños.
  • Técnicas de comunicación entre equipos.
  • Patrones de diseño y marcos de trabajo para el desarrollo de software.
  • Aspectos legales detrás del diseño y propiedad intelectual.
  • Documentación del software

Estudio de escuelas de diseño

Base de conocimientos sobre diseño de software

DSN_XP por principio adopta los lineamientos de la escuela de orientación a objetos, sin embargo puede adaptarse a otras escuelas de diseño bajo su noción de perspectivas de uso y escenarios.
  • Programación orientada a objetos.
  • Programación orientada a aspectos.
  • Diseño de base de datos.
  • Diseño por contrato.
  • Diseño de código abierto.
  • Arquitecturas software y lenguajes de programación.

Estudio de personal humano

Base de conocimientos sobre la interacción con personas

DSN_XP como metodología estudia al ser humano y su comportamiento, para lo cual recurre a las siguientes escuelas de pensamiento:
  • Cuarto camino (integración del pensamiento fragmentado)
  • Filosofía (definición de modelos de pensamiento)
  • Psicología (definición del posible comportamiento humano)
  • Danzas y movimientos (para el equilibrio del ser humano)
  • Neurolingüística (para el uso adecuado del lenguaje corporal y hablado)
  • Mentoring, coaching, training de equipos multidisciplinares.

Estudio del entorno y la naturaleza

Base de conocimientos sobre la interacción entre el producto y su entorno

DSN_XP como metodología estudia al entorno para respetar su estatus, para ello recurre a las siguientes escuelas de pensamiento:
  • Permacultura (como adaptarse al entorno natural con cultura permanente)
  • Marco de trabajo adaptativo (para adaptarse al entorno del negocio).
  • Comportamiento organizativo (para la definición de un lenguaje apropiado para el entorno)
  • Marketing (para alinearse a los objetivos comerciales del cliente)
  • Bases de conocimientos (para el continuo aprendizaje del entorno)
  • Administración de riesgos (para el uso adecuado de los recursos del entorno)