Durante la reunión que tuvimos ayer con el consultor de calidad de la ISO se planteó la estandarización del proceso de desarrollo de software en Media Net de cara a obtener la certificación de calidad ISO 9001:2000.
El consultor explicó como la norma 9000-6 define los estándares de calidad a seguir por un proceso de desarrollo de software gestionado por la ISO 9001:2000 (¡o al menos eso entendí yo!). Posteriormente pasó a explicar muy por encima como esta norma definía que todo desarrollo pasaba por las fases de especificación de requisitos, diseño, construcción de componentes, testing, y despliegue e implantación; y como íbamos a tomarla como base para definir un estándar de desarrollo de software. Escuchar esto me generó cierta inquietud: no pude evitar quedarme con la sensación de que la norma proponía un modelo de desarrollo clásico en cascada sin considerar otras alternativas.
Normalmente estas normas tienden a emplear este tipo de modelos de gestión de proyectos de software por similitud a los modelos de gestión de proyectos de otras disciplinas ingenieriles más tradicionales, dejando de lado los modelos de gestión más recientes, como pueden ser Extreme Programming, Scrum, y otras metodologías ágiles.
Mi opinión en particular es que cada tipo de metología tiene su espacio. Recordemos que las metodologías de gestión de proyectos tradicionales implican normálmente el planteamiento de un conjunto inicial de requisitos inamovible que definen el alcance de todo el proyecto; mientras que las metodologías ágiles definen un alcance abierto e incremental. Flexibilidad VS determinismo… esta es la cuestión.
¿En que casos emplearía una u otra?. Mi criterio es emplear una metodología tradicional (o pesada) si se cumplen todos y cada uno de los siguientes puntos:
- Los requisitos son estables y completos. Es decir, se definen al comienzo del proyecto y no varían a lo largo del mismo. Esto implica que el cliente sabe perféctamente lo que quiere, y que son lo suficientemente completos como para que no aparezcan nuevos requisitos importantes a lo largo del proyecto.
- Los desarrolladores están familiarizados con la plataforma, el proyecto, el area de negocio, y la tecnología. Esto permite que no aparezcan problemas ocultos a lo largo del proceso de desarrollo.
- El proyecto es de alcance limitado (hasta unos cinco meses-hombre como límite).
- El coste de cambio de requisitos sale caro, sea en material, equipos, o tiempo.
- El proyecto no tiene riesgos asociados; ni tecnológicos, ni por el entorno.
Un ejemplo de proyectos en los que un procedimiento en cascada es recomendable podrían ser los proyectos relacionados con aplicaciones de control, aplicaciones de software empotrado, desarrollo de drivers, aplicaciones de misión crítica, de tiempo real, etc…
Por otro lado, ejemplos de aplicaciones en los que es recomendable el uso de metodologías ágiles son las aplicaciones empresariales en general: sitios web, aplicaciones de gestión, aplicaciones de integración de procesos de negocio, workflows, etc…
¿Alguien tiene algo que agregar?… 