El ejemplo de cláusulas que se muestra a continuación permite formalizar, en una petición de ofertas a proveedores (RFP, Request For Proposals) o en un contrato, cómo deberá de ser la relación entre cliente y proveedor en la ejecución de un proyecto ágil utilizando Scrum.
Aunque el lugar natural de Scrum es el contrato de un equipo por meses (pago por iteración), en muchos casos el cliente prefiere o necesita que tanto el alcance como el coste como la fecha de entrega del proyecto se fijen de antemano (ver Triángulo de Hierro). En estas situaciones, para no perder los beneficios que aporta Scrum respecto a flexibilidad y adaptación y gestión del Retorno de Inversión (ROI), se pueden definir cláusulas específicas de Cambios de requisitos y de Finalización anticipada del contrato. Con esta última en especial tanto el cliente como el proveedor ganan en términos económicos: el cliente puede ahorrar dinero y el proveedor ve premiada su productividad.
- Independiente del resto de requisitos, en la medida de lo posible.
- Demostrable, de manera que sea claro cómo comprobar con <<el cliente>> que el requisito está completado y que se cumplen sus expectativas.
- De un grado de esfuerzo para ser completado semejante al del resto de requisitos, de manera que <<el cliente>> pueda realizar una extrapolación del progreso del proyecto.
Iteración 0 – Elaboración de la lista de objetivos/requisitos y planificación
- Planificar y distribuir los objetivos y alcance del proyecto en iteraciones, de manera que los requisitos estén priorizados balanceando el beneficio que aportan a <<el cliente>>, su coste de desarrollo y los riesgos del proyecto. De esta manera, las primeras iteraciones del proyecto podrán acomodar los requisitos más importantes y mitigar los riesgos más altos.
- Identificación de los objetivos del proyecto y de los requisitos iniciales de alto nivel que permiten la consecución de estos objetivos. [2]
- Priorización de los requisitos en iteraciones y entregas considerando los siguientes criterios:
- El valor aportado por cada requisito para <<el cliente>>. Deberá ser explícito quien es el actor o usuario beneficiario de cada requisito y qué valor le aporta.
- El esfuerzo necesario para desarrollar cada uno de los requisitos, de manera que en las primeras iteraciones se desarrollen los requisitos que proporcionen el máximo valor con el mínimo esfuerzo y que puedan encajar en la periodicidad de las iteraciones.
- Las dependencias inevitables entre requisitos.
- Minimizar los riesgos del proyecto respecto a desarrollo de los requisitos, disponibilidad y grado de implicación de los actores y beneficiarios implicados, interacción con otros equipos (proyectos en paralelo, compras de material e infraestructura, encargados de entregar el proyecto a los usuarios finales), etc.
- Maximizar la cohesión del contenido de cada iteración, identificando los puntos de acoplamiento y las dependencias entre los diferentes incrementos de manera que sean mínimos, para poder dar por realmente completados los requisitos desarrollados en cada una de las iteraciones.
- Calcular la duració de cada uno de los incrementos desarrollados de manera que puedan encajar en la periodicidad de las iteraciones (que deberán ser de la misma duración de <<1 mes>>.
Entregables
- Completar un incremento de producto que sea demostrable a <<el cliente>> al finalizar la iteración, de manera que pueda tomar decisiones informadas y objetivas sobre el estado del proyecto (si el desarrollo de los requisitos cumple con las expectativas de <<el cliente>>, si la calidad es la esperada o si hay retrasos).
En el inicio de cada iteración:
- <<El cliente>> y <<el proveedor>> mantendrán una reunión para consensuar los objetivos y contenido de la iteración, en función de los criterios de priorización indicados anteriormente, así como para dar detalle a los requisitos seleccionados en la medida en que cada una de las dos partes necesiten. De manera general, cada requisito deberá tener asociado un conjunto de condiciones de aceptación para poder considerar que el requisito ha sido completado. [3]
Al finalizar cada iteración:
- <<El proveedor>> deberá hacer a <<el cliente>> una demostración de los requisitos completados. En esta demostración participaran los interesados que <<el cliente>> designe; entre ellos se podrá encontrar, por ejemplo, a los promotores del proyecto, al responsable funcional, al responsable técnico, a usuarios finales seleccionados, etc. <<El cliente>> hará una aceptación de estos requisitos realizando las comprobaciones de calidad oportunas.
- <<El cliente>> podrá repriorizar el conjunto de requisitos del proyecto y consensuará con <<el proveedor>> el contenido de las siguientes iteraciones según lo estipulado en la clausula de «Cambio de requisitos» << dado que además de ser fijos el alcance y el tiempo del proyecto también es fijo el su coste para el cliente (y por tanto lo que va a cobrar el proveedor)>>. En particular, los elementos que se repriorizarán serán: requisitos inicialmente identificados del proyecto, modificaciones a estos requisitos, nuevos requisitos que aparezcan durante el proyecto, problemas de calidad detectados, etc.
- El producto desarrollado hasta ese momento, incluyendo todos los entregables asociados completados (documentación, etc. [1]) e integrados con los entregables de las iteraciones anteriores, de manera que el producto sea susceptible de ser entregado a <<el cliente>> con el mínimo esfuerzo. [4]
Cambios de objetivos/requisitos
Para que esta cláusula sea efectiva, <<el cliente>> se compromete a colaborar con <<el proveedor>> en todas las iteraciones y, especialmente, en las reuniones de recogida de requisitos (como, por ejemplo, las reuniones de planificación de iteración) y en las reuniones de demostración.
- Los cambios en prioridades de la lista de requisitos no implicarán ningún coste adicional a <<el cliente>> siempre que se mantenga el cómputo total de horas del contrato.
- La adición de nuevos requisitos (tras las demostraciones) no implicará ningún coste adicional a <<el cliente>>, siempre que se retiren del contrato requisitos no iniciados que computen las mismas horas.
- No se consideran cambios las subsanaciones por parte de <<el proveedor>> de los defectos de calidad del producto.
Finalización anticipada del contrato
- Con el objetivo de mantener un Retorno de Inversión (ROI) aceptable en cada iteración, <<el cliente>> podrá finalizar el contrato en cualquier momento siempre que abone a <<el proveedor>> un 20% de las horas de proyecto pendientes de realizar. [5]
- Los requisitos que previamente fueron acordados por las dos partes para ser entregados con anterioridad al momento de la finalización del contrato y que estén sufriendo un retraso de entrega atribuible a <<el proveedor>> quedan excluídos del cómputo de horas pendiente a realizar y deberán ser entregados por <<el proveedor>> sin incurrir en ningún pago adicional por parte de <<el cliente>>.
- Sea como fuere, <<el proveedor>> se compromete a entregar un 80% de los requisitos del proyecto en la fecha inicial de entrega, cumpliendo los criterios definidos en las condiciones de aceptación para poder considerar que los requisitos han sido completados, siempre que no se produzca alguna desviación por causas que estén fuera de la responsabilidad de <<el proveedor>>.
[1] En el caso de proyectos de desarrollo de software: análisis funcional, diseño técnico, código, pruebas (unitarias, de integración, de rendimiento, funcionales, de regresión, etc.).
- Modelo de actores, procesos y flujo de información.
- Modelo de Casos de Uso (funcionalidades).
- Modelo de Dominio (entidades de información y sus relaciones).
- Modelo de interfase de usuario (GUI), línea de diseño gráfico, hojas de estilo, guía de usabilidad y diseño de interacción, etc.
- Modelo de arquitectura y de componentes (solución tecnológica), identificando componentes de uso común y reutilizables.
- Modelo de seguridad (autenticación y autorización para acceder a las funcionalidades).
- Modelo de gestión de cambios de la configuración.
- Modelo de control de la calidad.
- Modelo de gestión del cambio (comunicaciones a beneficiarios, formaciones y soporte).
- Identificar el grado de configuración y parametrización del producto para cubrir las necesidades de <<el cliente>>, así como los mecanismos para conseguirlo.
- Definir los patrones de diseño, estándares de codificación, guías de uso de los componentes de infraestructura tecnológica a utilizar o cualquier herramienta a utilizar en el desarrollo.
- Para reducir el riesgo tecnológico lo antes posible, realizar una prueba de concepto de arquitectura, componentes tecnológicos más arriesgados, infraestructura, GUI, etc. en la iteración 0 o en la primera iteración de desarrollo.
- Cómo cocinar tu contrato ágil
– Visión estructurada de diferentes modalidades de contratos ágiles (desde contratos cerrados hasta Time & Materials o servicios, pasando por diferentes posibilidades de pago).
- Conceptos de «Money for Nothing» y «Change for Free» para la finalización anticipada del contrato y el cambio de requisitos – Jeff Sutherland.
- Cómo vender Agile: https://proyectosagiles.org/beneficios-de-scrum/