En DSDM estamos ante otra metodología de naturaleza iterativa e 
incremental y es considerada la primera metodología ágil (su primera 
versión es del año 1995 y desde entonces se han realizado diversas 
actualizaciones de la misma).
DSDM está orientada a combatir los principios de la 
crisis del software,
 de manera que se puedan realizar proyectos de desarrollo de software en
 tiempo y presupuesto, verificando las expectativas del usuario 
(mediante la existencia de requisitos cambiantes que se tratan en las 
diferentes evoluciones del producto).
Antes de analizar brevemente las fases que componen el ciclo de vida 
DSDM, es importante repasar los nueve principios en los que se basa la 
metodología, ya que delimitan la naturaleza de la misma:
1.- Para llevar a cabo un proyecto eficiente y efectivo es necesario 
que el grupo de usuarios que participan en su definición estén 
implicados.
2.- El equipo de proyecto debe tener la capacidad de tomar decisiones
 importantes para que el proyecto siga avanzando sin necesidad de 
esperar la aprobación de niveles superiores de la jerarquía.
3.- Orientado a la existencia de frecuentes iteraciones, de manera 
que entregar algo bueno pronto es siempre mejor que esperar a entregar 
algo perfecto más tarde. El hecho que desde muy pronto se tenga la 
oportunidad de utilizar el producto, permite que desde etapas muy 
tempranas comience el continuo proceso de revisión que permita que en 
cada paso el producto además de ir asumiendo nuevas funcionales se 
acerque cada vez más a las expectativas del usuario.
4.- Se parte de lo más crítico y esa es la base para definir las 
características de las entregas, es decir, una entrega debe satisfacer 
unas serie de funcionalidades que son importantes o críticas en el 
sistema. No se trata de cubrir todas las necesidades del sistema (lo 
cual iría en contra de la naturaleza de este tipo de metodologías) sino 
de centrarse en las que resultan más necesarias, para que el proceso 
continuo de revisión empiece desde lo que resulta más importante que 
funcione de forma adecuada. Se trata de ir al grano, ya tocará en un 
futuro desarrollar y perfeccionar funcionalidades accesorias.
5.- La estrategia de desarrollo, por tanto, es iterativa e incremental y guiada por las necesidades de los usuarios.
6.- Cualquier cambio realizado en el proceso de desarrollo es 
reversible. Esto es muy importante. Un usuario se ha podido equivocar al
 especificar una funcionalidad o la forma en que debe operar la misma, 
si es así no se debe continuar con el error sino rehacer completamente 
la funcionalidad si fuera preciso.
7.- Los objetivos y requisitos de alto nivel del proyecto han debido 
ser pactados y aceptados entre las partes que participan en el proyecto,
 antes de que el proyecto comience.
8.- Las pruebas se realizan a lo largo de todo el ciclo de vida del 
proyecto, no solo se realizan entre iteración e iteración sino que están
 presentes en los diferentes entregables. Esto se realiza para la 
detección temprana de errores, ya que sabemos que cuánto más se tarde en
 corregirlos, más costoso resulta.
9.- Resulta fundamental la comunicación y cooperación de todas las partes implicadas en el proyecto.
Considero importante indicar los principios y asunciones antes que la
 metodología en sí, ya que son la base no solo de la misma, sino de 
prácticamente cualquier metodología de desarrollo que tenga una 
orientación iterativa e incremental.
Si no se cree en ellos, no se creerá en este tipo de metodologías. 
Como ya sabéis por los artículos que llevo escritos sobre la materia, 
considero que proyectos desarrollados de esta manera tienen un 
porcentaje de éxito mayor que otros desarrollados con metodologías más 
tradicionales como las basadas en el 
ciclo de vida clásico o cascada.
Las asunciones son las siguientes:
- Los sistemas no se construyen perfectamente en una solo intento. Sin embargo siguiendo el 
Principio de Pareto,
 el 80% de los objetivos de una solución perfecta se puede desarrollar 
en el 20% del esfuerzo que se requeriría para obtenerlos. Por tanto, la 
realización de un desarrollo rápido debería centrarse en priorizar 
funcionalidades importantes para la cobertura de las funcionalidades de 
negocio dejando con las mismas satisfechos al conjunto de usuarios. Esto
 debería ser posible ya que la metodología requiere una implicación real
 de los usuarios.
Intentar construir un sistema perfecto es una utopía e intentar 
aproximarse demasiado pronto a esa idea de sistema es una pérdida de 
energía que además pone en riesgo al propio sistema de información, ya 
que como consecuencia de ello muchos de los inconvenientes de la 
crisis del software
 habrán impactado en el proyecto. Si intentamos subir una cuesta a 
máximo rendimiento desde el principio probablemente tardemos más en 
alcanzar la cima (si es que llegamos a ella).
- No se puede quitar la vista del objetivo de conseguir proyectos con calidad y dentro de los plazos y presupuestos.
Y añado yo, que satisfaga al usuario (eso debería estar ya implícito 
en el concepto de calidad, pero nunca está de más tener siempre presente
 que los proyectos y que nuestro trabajo (en la mayoría de los casos) 
está orientado a informatizar procesos que utilizan personas y que si 
las mismas no se sientes cómodas y no le sacan rendimiento no serán 
eficientes en el uso de la aplicación y se resentirá la productividad y 
la calidad de los datos que se graban.
- Pueden desarrollarse simultáneamente varios incrementos siempre y cuando no se entorpezcan entre sí.
- La metodología es válida más allá de desarrollos que comiencen 
desde cero. Es igualmente aplicable para mantenimientos incluso de 
proyectos no desarrollados siguiendo esta metodología o una similar.
¿Por qué no iba a serlo? La clave está en definir adecuadamente los 
incrementos (aunque sea más o menos difícil). Si estamos ante el 
mantenimiento de un sistema gigantesco que tiene incendios por todos 
lados resultará más complicado priorizar y se tardarán bastantes 
iteraciones en conseguir una cierta estabilidad.
Las bases de la metodología o la metodología en sí no constituyen una
 piedra filosofal para que todos los proyectos tengan éxito. Esta forma 
de entender los proyectos de desarrollo de software marcan un camino que
 desde mi punto de vista es el adecuado, pero generalmente la vía es tan
 ancha y hay tantas nubes que es fácil perderse.
La metodología está compuesta por tres fases que se realizan de forma secuencial:
Preproyecto. Se define el alcance global, quiénes son los 
departamentos y personas implicadas, los compromisos de las distintas 
partes y quién o quienes financiarán el proyecto.
Ciclo de vida del proyecto. Está compuesto por cinco fases:
- Estudio de la viabiliadad (Feasability study). Se estudia la 
adecuación de DSDM al proyecto y se identifican los riesgos del mismo. 
En esta fase se realiza un informe de viabilidad, un prototipo de 
viabilidad (el prototipo tiene sentido si se quieren evaluar algunos 
aspectos técnicos o funcionales y se puede utilizar para obtener 
información adicional del proyecto) y plan general del proyecto (plan de
 desarrollo + registro de riesgos).
- Estudio del negocio (Business study). Si DSDM se ha considerado 
adecuado para el proyecto, el siguiente paso consiste en realizar un 
análisis más en profundidad del proceso o procesos de negocio que se van
 a informatizar. La participación e implicación del usuario resulta 
fundamental en esta fase, si en la misma no se consigue, habría que 
replantear la realización del proyecto siguiendo DSDM o con cualquier 
otra metodología. 
En esta fase se obtiene un modelo de procesos identificando los 
usuarios clave en cada uno de ellos, un catálogo de requisitos 
priorizado (algo lógico para una metodología iterativa e incremental), 
la arquitectura del sistema y el plan de prototipado.
- Iteración del modelo funcional (Functional Model Iteration). Se 
divide en 4 fases: Identificación del prototipo funcional (se definen 
las funcionalidades que cubrirá el prototipo y se elabora un modelo 
funcional del mismo), Definición del calendario (se acuerda el plan de 
trabajo para la realización de este modelado funcional), Obtención del 
prototipo funcional y Revisión del prototipo funcional (se determina el 
grado de aceptación del prototipo desarrollado, mediante pruebas 
realizadas por el usuario y/o la revisión de documentación, es muy 
importante la obtención del feedback del usuario para que las 
especificaciones del producto a obtener con esta iteración se acerquen 
lo máximo posible a las necesidades del usuario).
- Iteración del diseño y de la construcción (Design and Build 
Iteration). Se divide en 4 fases: Identificación del prototipo de diseño
 (se determinan los requisitos funcionales y no funcionalidades que 
cubrirá el prototipo), Definición del calendario (se acuerda el plan de 
trabajo para la construcción de este prototipo), Construcción del 
prototipo de diseño (será un producto utilizable para los usuarios, 
tratándose por tanto de un producto finalista en el sentido de que ya 
podría ser usado para realizar el trabajo cotidiano sobre las 
funcionalidades implementadas), Revisión del prototipo de diseño.
- Implementación (Implementation). Se divide en 4 fases: Aprobación 
del usuario (el usuario realiza la aprobación del producto a entregar), 
Formación (se forma a los usuarios finales de la aplicación), 
Implementación (se instala el producto en las instalaciones del 
cliente), Revisión de negocio (se revisa la adecuación del sistema a las
 necesidades del negocio y a los objetivos iniciales que se habían 
establecido para el mismo, en función de lo que se decida en esta fase 
se irá a la fase de Postproyecto o a una de las fases anteriores del 
ciclo de vida).
Si falta o se detecta algún nuevo aspecto funcional relevante se 
vuelve a la fase de Estudio del Negocio, si no es relevante se vuelve a 
la fase de Iteración del modelo funcional, si falta o se detecta algún 
nuevo aspecto técnico se vuelve a la fase de Iteración del diseño y la 
construcción.
Postproyecto. Tiene como objetivo la continuidad del sistema en el 
sentido de que siga siendo útil a las necesidades de los usuarios, 
comprendería por tanto el mantenimiento del sistema que se realizaría 
(si se estima conveniente siguiendo el ciclo de vida DSDM).
Es importante señalar que DSDM permite trabajar con varios prototipos
 simultáneamente siempre y cuando “no se molesten” entre sí, esto 
permite reducir el tiempo necesario para que los usuarios tengan en 
producción las distintas evoluciones del producto.
Si se hace una lectura al pie de la letra sí que puede parecerlo, 
pero hay que tener en cuenta que básicamente lo que se obtiene en cada 
fase es:
Preproyecto. ¿Qué se pretende conseguir y quiénes van a participar para conseguirlo?
Ciclo de vida del proyecto.
- Estudio de la viabiliadad (Feasability study). Lo que se pretende 
conseguir, ¿se puede obtener realmente con los recursos con los que se 
van a contar?, ¿es DSDM una metodología adecuada para llevarlo a cabo?, 
¿qué problemas pueden provocar que el proyecto no evolucione 
adecuadamente?.
- Estudio del negocio (Business study). ¿Qué procesos se van a 
informatizar?, ¿qué requisitos se deben cumplir en los mismos (no se 
requiere entrar en detalle)?, ¿cuáles son más prioritarios?, ¿cuál se el
 plan de desarrollo iterativo e incremental?.
- Iteración del modelo funcional (Functional Model Iteration). En 
esta fase se perfeccionan y cierran los requisitos. Se puede apoyar en 
la realización de un prototipo. Se define una calendario para la 
realización de las distintas tareas que comprenden la fase.
- Iteración del diseño y de la construcción (Design and Build 
Iteration).  Se realiza el proceso de diseño y construcción. Se define 
una calendario para la realización de las distintas tareas que 
comprenden la fase.
- Implementación (Implementation). Se realiza la aceptación del 
sistema, formación, la implantación y se realiza un análisis sobre la 
evolución e impacto del sistema, condicionando las próximas iteraciones a
 desarrollar.
Postproyecto. Comprendería lo que es la fase posterior a la entrega 
de un producto finalista (resultado de sucesivas iteraciones), de manera
 que haría referencia al mantenimiento del sistema de información que se
 puede hacer siguiendo DSDM o no.
Por tanto, la metodología, vista desde más arriba no tiene por qué resultar pesada.
http://jummp.wordpress.com/2011/04/13/desarrollo-de-software-metodo-de-desarrollo-de-sistemas-dinamicos-dsdm-i/ 
http://jummp.wordpress.com/2011/04/14/desarrollo-de-software-metodo-de-desarrollo-de-sistemas-dinamicos-dsdm-ii/
http://jummp.wordpress.com/2011/04/15/desarrollo-de-software-metodo-de-desarrollo-de-sistemas-dinamicos-dsdm-iii/
http://jummp.wordpress.com/2011/04/16/desarrollo-de-software-metodo-de-desarrollo-de-sistemas-dinamicos-dsdm-iv/