viernes, 22 de enero de 2010

Agile y CMMI, ¿enemigos o aliados?

Las metodologías de desarrollo Agile y las mejores prácticas de los modelos CMMI son frecuentemente percibidas como opuestos. 

El origen de esta situación se presenta en principio por los resultados que se han presentado de casos exitosos, en el caso de Agile asociado a proyectos pequeños, con equipos de trabajo integrados, alta volatilidad de los requerimientos, dentro de un único ambiente de desarrollo; mientras que los proyectos de CMMI se han asociado con proyectos grandes, críticos, con alta exposición a riesgos y una gran estructura de gestión. Por otra parte la imprecisión de la información que manejan los defensores y detractores de una u otra, ya sea por mal uso, carencia de información, dificultades con la terminología o enfoques para su aplicación. En la realidad ambos enfoques se pueden usar en conjunto y pueden ser de beneficio para las organizaciones. 

El Software Engineering Institute (SEI) está interesado en el desarrollo de métodos Agile y en ampliar la aplicación y experiencias de uso de Agile y CMMI en conjunto. La base de las metodologías Agile parte del Método de Diseño y Desarrollo Incremental e Iterativo (IIDD por sus siglas en inglés) utilizado desde mediados del siglo XX. A principios del año 2001 se establece el Manifiesto para el Desarrollo de Software Agile (Manifesto for Agile Software Development) con la filosofía y principios que guían el conjunto de metodologías existentes. Posteriormente en el 2005 se crea la Declaración de Interdependencia para la Gestión de Proyecto (PM Declaration of Interdependence) con los seis principios de gestión asociados con la gestión de proyectos. 

CMMI tiene sus bases en el modelo CMM que es parte de los proyectos que desarrolla el SEI a petición del Departamento de Defensa (DoD) para trabajar en atender los problemas en la entrega y calidad del software a finales de los noventa. Después de 10 años se inicia el proyecto de creación de CMMI como un modelo que integrara todos los modelos existentes. 

Las ideas y prácticas de los modelos iniciales han sido reformadas e incorporadas en la estructura actual del modelo. Agile ofrece un enfoque particular para las actividades de desarrollo que contrasta con otros enfoques para el desarrollo. Muchas veces el Manifiesto es usado como justificación para no tener procesos, para no documentar el trabajo y para no tener planes lo cual es una interpretación incompleta y equivocada. 

Por su parte CMMI es un modelo, no un estándar, es un ideal del cual se puede aprender y utilizar de acuerdo con la situación existente o necesidad. Las metas son el único componente requerido del modelo, las prácticas son sugeridas, y el uso del modelo considerando todo lo que aparece en él como obligatorio es un error. Ambos enfoques son útiles, pueden co-existir, siempre y cuando se utilicen adecuadamente. 

CMMI se enfoca, a un alto nivel, en qué es lo que hace un proyecto no en qué metodología utiliza, mientras que los métodos Agile se enfocan en cómo el proyecto desarrolla los productos. De esta forma los métodos Agile proporcionan el conocimiento en el desarrollo del software, especialmente para proyectos pequeños, que CMMI no considera en sus mejores prácticas. Mientras que CMMI proporciona las prácticas de ingeniería de sistemas que facilitan el uso de los métodos Agile en proyectos grandes, así como las prácticas de gestión de procesos y soporte que ayudan a establecer y mantener la mejora continua con el enfoque Agile en una organización. 

Utilizar los principios de Agile en el diseño y selección de las prácticas de CMMI permite que las actividades de definición de procesos sean más apropiadas y con mejor aceptación. 

Referencia: CMMI or Agile: Why not Embrace Both. CMM/SEI-2008-TN-003