lunes, 25 de enero de 2010

Comparación de CMMI y Agile

La siguiente tabla fue tomada de la nota técnica publicada por el SEI “CMMI or Agile: Why Not Embrace Both!” CMU/SEI-2008-TN-2003 y permite entender de manera resumida los dos enfoques, tanto de CMMI como de Agile, desde diferentes puntos de vista. Foco de atención organizacional

  • CMMI - Enfocado a la Organización. Los mayores beneficios se obtienen cuando se implementa a nivel organizacional de manera que todos los elementos que contribuyen al desarrollo de los productos y servicios están considerados en el proceso de mejora.
  • Agile - Enfocado en el proyecto y equipo de trabajo. Los métodos Agile pueden aislar al proyecto/equipo de la Organización y aún ser efectivos.
Gestión
  • CMMI - Juega un papel fundamental en el logro del éxito del proyecto. Mayor atención a la gestión del proyecto, asegurar que los planes que afectan al proyecto están integrados, las dependencias están gestionadas y los problemas de coordinación son solucionados, con una visión compartida sobre el trabajo y los riesgos controlados.
  • Agile - Es una función de apoyo que ayuda a eliminar barreras en el avance, en oposición a la tradicional función de mandato y control. Esta forma de gestión se puede extender en la medida que se amplia el alcance de aplicación del enfoque Agile.
Confianza
  • CMMI - Algunas prácticas asumen la necesidad de compensar un ambiente de baja confianza caracterizado por objetivos de seguridad y misión crítica, alto riesgo de falla o gran cantidad de involucrados que no pueden expresar libremente sus intensiones y compromisos.
  • Agile - Fomenta un ambiente de alta confianza. Reconoce que los equipos de trabajo se desempeñan mejor cuando están compuestos de tareas e individuos maduros operando en grupos con gran confianza.
Planificación
  • CMMI - Promueve la planificación con base al establecimiento de un proceso definido que permita alcanzar los objetivos del proyecto. Considera un horizonte a largo plazo. No se requieren planes detallados, aunque muchas implementaciones de CMMI trabajan en detallar la siguiente fase del proyecto. Hace énfasis en la re-planificación y cambios necesarios.
  • Agile - Existen múltiples niveles de planificación, incluye planes a alto nivel del producto y al inicio de cada iteración, hasta más detallados respecto a las funcionalidades en cada iteración. Fuerte énfasis en la flexibilidad y re-planificación como condición de cambio. No supone el uso de diagramas de tareas debido a que los requerimientos para las tareas cambian constantemente.
Supuestos del mercado/usuarios
  • CMMI - Ampliamente beneficioso cuando el mercado objetivo es maduro y la innovación en los procesos se convierte en un diferenciador para el éxito de la Organización.
  • Agile - Mayor beneficio en mercados emergentes y poco definidos.
Consideraciones del diseño
  • CMMI - Asume que la arquitectura del producto es seleccionada o creada en las etapas iniciales de un proyecto y es actualizada cuando no es válida o utiliza un ciclo iterativo.
  • Agile - Proyectos exitosos cuando los estándares de arquitectura se aplican con flexibilidad en la medida que el proyecto avanza. En algunos casos minimizan la importancia de la arquitectura sobre los principios generales que es especificada de manera prematura.
Aprendizaje
  • CMMI - Formación con base en el análisis de procesos y habilidades necesarias, así como el diseño de los mecanismos para formación. Durante la ejecución de las actividades del proyecto. Mediante la planificación y uso del proceso en los proyectos, las mediciones y lecciones aprendidas que son compartidas en la Organización. Como parte del análisis de causa de los procesos y del cumplimiento de los objetivos de calidad y desempeño del proceso.
  • Agile - Ocurre a nivel de proyecto durante las iteraciones, con un enfoque a nivel operativo y justo en el momento.
Perspectiva
  • CMMI - Considera una visión a largo plazo.
  • Agile - Considera una visión de corto a mediano plazo.
Evaluación
  • CMMI - SCAMPI compara los procesos en la organización contra las prácticas en el modelo para evaluar si la Organización cuenta con los procesos para cumplir las metas de CMMI.
  • Agile - El deseo de los que utilizan métodos Agile es que se revisen únicamente sobre los resultados (satisfacción del cliente o resultados del proyecto)
Desarrollo humano
  • CMMI - Enfoque limitado en la gente a nivel de proyecto. A nivel de la Organización no promueve heroísmos pero busca la creación de un ambiente que promueve la excelencia de la gente sin actos heroicos.
  • Agile - Enfoque en los equipos de trabajo y en las personas. Existe la tendencia a contratar buenos recursos hacía la formación de “héroes” en una cultura que balancea la vida personal con el trabajo.
Énfasis en el ciclo de vida
  • CMMI - Fuerte énfasis en la revisión en la medida que se avanza. Es consistente con ambientes donde existe un alto costo por falla y el objetivo es evitar proactivamente esos costos. Promueve la documentación, análisis y revisión antes de que el producto sea integrado, así como frecuentes validación para asegurar que se construye el producto correcto. Cada proyecto determina los tiempos para las actividades de revisión y pruebas.
  • Agile - Utiliza de manera concurrente el desarrollo, pruebas de iteración, revisiones entre pares según sea necesario. La tendencia es validar frecuentemente, sobre el uso, y verificar después. El desarrollo incremental asume un bajo costo de retraso y de falla. Tomar precauciones con los ciclos de tiempo controlados.
Predecible
  • CMMI - A nivel de proyecto en los subprocesos críticos mediante la gestión estadística y el monitoreo de su desempeño con los modelos de predicción para determinar si el proyecto alcanzará sus objetivos. A nivel de la Organización el conocimiento de la capacidad de los procesos con base en el desempeño de los proyectos y cuáles son candidatos de innovación.
  • Agile - Utilizando las iteraciones limitadas en tiempo, la evolución de las soluciones, identificar de defectos de manera temprana y corrección rápida se logra una velocidad de desarrollo predecible. Existen expectativas sobre el alcance y las entregas de las iteraciones para que sean predecibles.
Costo de falla
  • CMMI - Desarrollado para ambientes con alto costo por falla.
  • Agile - Prosperó en ambientes de bajo costo por falla o con incremento lineal.

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