- OnceDev
CONTRATOS ÁGILES
Actualizado: 4 abr 2019
November 23, 2018| Vinicio Bolaños Puente | vinicio.bolanos@oncedev.com.ec
Uno de los elementos de mayor fricción o entendimiento entre ambas partes (cliente y proveedor) es sin dudas el Contrato para Desarrollo de Software. La mayoría de las compañías tratan de generar contratos de forma tradicional y cuando se realiza la ejecución empieza a existir muchas divergencias, cambios, desacuerdos entre las partes debido a la naturaleza de los contratos tradicionales basados en Alcance, Tiempo y Costo más las cláusulas relacionadas a los famosos y siempre complicados “Controles de Cambio”, pero cuando hablamos de Contratos Ágiles, por lo general se trata de hacer un contrato de un Equipo por meses, por iteración.
Pero dadas las circunstancias y mayoría de veces por la forma financiera de trabajar las compañías, se puede plantear un modelo de contrato híbrido, en el cual el cliente pide que se mantenga Alcance, Tiempo y Costo, y el proveedor en base a una negociación y entendimiento con el cliente se realizan acuerdos con cláusulas específicas de Cambios de Requerimientos (cambio de prioridad, actualizaciones o incorporación de nuevas funcionalidades) y Finalización Anticipada de Contrato. En el caso de esta última cláusula se trata de generar un ganar-ganar entre cliente y proveedor en términos económicos: el cliente puede ahorrar dinero y el proveedor ver premiada su productividad.
A continuación, vamos a ejemplificar como sería el contrato, para esto como punto base es importante que se elabore el Listado de Requerimientos Priorizados (Product Backlog).
Proceso de control y seguimiento del proyecto
Control y seguimiento del proyecto basado en objetivos
El proyecto se ejecutará en iteraciones incrementales con una demostración del producto al finalizar cada iteración. De esta manera se podrá conocer de forma objetiva 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), con lo que <<el cliente>> podrá tomar decisiones informadas.
Los requisitos se desarrollarán priorizados por el valor aportado a <<el cliente>>, de modo que en las primeras iteraciones se obtendrán los objetivos más importantes del proyecto y se podrán realizar ajustes al respecto con la suficiente antelación.
El control y seguimiento del proyecto se basará en los requisitos completados en cada iteración. Se entenderá un requisito como completado si incluye todos los entregables asociados realizados (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. Por esta razón, cada requisito deberá ser:
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
Duración: <<Tiempo Duración Iteración que puede ser de 2 a 8 semanas, o dependiendo del proyecto y necesidad>>.
Objetivos:
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.
Actividades
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ón 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 <<Tiempo Duración Iteración que puede ser de 2 a 8 semanas, o dependiendo del proyecto y necesidad>>.
Entregables
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 esfuerzo 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 o sean similares en esfuerzo.
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% del esfuerzo pendiente 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 excluidos del cómputo de esfuerzo 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.).
[2] En el caso de proyectos de desarrollo de software, para ayudar y guiara conseguir este objetivo, en la iteración 0 ser interesante realizar una primera versión de muy alto nivel de los siguientes modelos:
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).
Esto NO implica realizar un análisis funcional y/o un diseño técnico del proyecto en la iteración 0. Si en el proyecto es necesario realizar un análisis funcional o un diseño técnico, también se elaborará de manera incremental, iteración a iteración: “se entenderá un requisito como completado si incluye todos los entregables asociados realizados (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.
También puede ser conveniente realizar las siguientes actividades:
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.
[3] En el caso de proyectos de desarrollo de software, para ayudar a reducir la incertidumbre de la iteración, minimizar la dependencia de <<el cliente>> durante ella y garantizar la usabilidad de la solución, puede ser necesario aprobar previamente a cada iteración el prototipo navegable de la interfase de usuario (GUI) que se desarrollará en esa iteración y acompañarlo de una descripción de comportamiento, redactada como pruebas de aceptación asociadas a cada requisito. Es de especial importancia que este prototipo lo validen tanto el responsable funcional del proyecto en representación de los promotores del proyecto como una muestra representativa de los usuarios finales (con los objetivos de obtener su feedback y de garantizar su productividad de trabajo con la herramienta).
[4] En el caso de proyectos de desarrollo de software, <<el proveedor>> deberá entregar el código fuente, scripts de instalación y la batería automatizada de pruebas (unitarias, de integración, de rendimiento, funcionales, de regresión, etc.), de manera que sea sencillo auditarlas y repetirlas, tanto por <<el cliente>> como por el proveedor que se encargará del mantenimiento evolutivo y correctivo del sistema.
[5] En lugar de perder el 100% del coste del esfuerzo pendiente en requisitos que no le aportan suficiente valor, a <<el cliente>> le resulta más conveniente abonar un 20% del esfuerzo a <<el proveedor>> para así ahorrarse un 80%. Cuanto mejor se haga agilismo, más salen ganando ambas partes: el cliente, por no dedicar más dinero del necesario al proyecto, y el proveedor, por recibir un pago final (y aumentar su margen) sin dedicar ningún recurso.
Para más información:
Documento Original https://proyectosagiles.org/2008/11/16/contrato-agil-scrum/
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/