Creo que lo primero que debe darse cuenta es que hay una diferencia entre ser ágil y ser ágil. Desplegando lentamente técnicas y características ágiles: los equipos interfuncionales, la planificación adaptativa, la entrega evolutiva / incremental, las iteraciones cronometradas e incluso la introducción de conceptos de Lean son muy diferentes a la introducción de la Programación extrema, Scrum o Crystal.
Usted menciona explícitamente la participación del cliente. Sí, muchas de las metodologías ágiles requieren la participación del cliente, pero no es necesario que sea ágil. En cada programa relacionado con el gobierno / defensa, siempre he tenido un gerente de programa o proyecto que era el punto de contacto con el cliente. Esta persona se convierte en la "voz del cliente". Puede que se ralentice a medida que teleconferencia o correo electrónico o llamar y aclarar, pero puede tener una sola persona (o un grupo, si tiene PMs adjuntos también) que es el representante del cliente de su equipo. Es cierto que no es lo mismo. ¿Pero no es ser ágil para ser flexible y responder al cambio?
También menciona algunos conceptos clave: requisitos predefinidos, solicitudes de funciones "descartadas", falta de priorización porque "todas son importantes" y proyectos de costo fijo y / o de horario fijo. Cada uno de estos puede abordarse de diferentes maneras.
Si cree que tiene todos sus requisitos por adelantado, es probable que no los tenga. Los requisitos cambian. El hecho de que tenga una especificación "terminada y firmada" no significa que esté establecida en piedra. Dado el documento de requisitos que tenga, capture cómo se siente cómodo y / o de la manera especificada por el contrato y entregue los requisitos, el diseño y la arquitectura. Además, vea si puede tratar estos documentos vivos (un documento de diseño que vi hoy en el trabajo está etiquetado como Revisión G, lo que significa que está en su octava actualización). Pregunte cuánto puede dejar como TBD en una iteración dada y cuánto necesita confirmarse ahora; puede haber algo de toma y daca.
Sé ágil con tu documentación. No duplique los esfuerzos entre "lo que quiere su equipo" y "lo que quiere el cliente". Por ejemplo, si su cliente desea una especificación de requisitos de software tradicional y su equipo quiere usar historias de usuario, intente adaptarse a un SRS tradicional y use elementos de acción y una lista de elementos de acción continua en lugar de historias de usuario para que no pierda tiempo formulando "el sistema debe ..." y "debe poder hacerlo porque". Sin embargo, esto requiere disciplina por parte del equipo para adaptarse a las diferencias entre los proyectos. Captura problemas en reflexiones.
Una vez que llegue al desarrollo, puede ejecutar 5 o 6 iteraciones y luego invitar a su cliente a su instalación para ver un subconjunto de su implementación. Enjuague y repita este proceso. No es la participación constante exigida por algunas metodologías, pero sí tiene la ventaja de una alta visibilidad. Si su cliente dice que no, al menos lo intentó. Si dicen que sí, puedes iluminarlos para que sean ágiles. En un proyecto en el que estaba, el cliente visitaba el sitio cada pocos meses (generalmente de 3 a 5 meses). Nos verían pasar por las pruebas de control de calidad, debatirían inquietudes con los ingenieros y los negocios con la oficina del programa / proyecto. Fue una oportunidad para todos para estar en la misma página.
Las pruebas y el mantenimiento suceden igual que en otros proyectos ágiles. Cree sus procedimientos de prueba y documente los defectos de la manera adecuada, realice un seguimiento de las métricas según las obligaciones contractuales y documente los resultados de las pruebas. Si desea seguir TDD, hágalo. La integración continua es otra buena idea. Durante las reuniones de estado del proyecto, su gerente de proyecto puede usar esta información para decir "implementamos los requisitos de N, tenemos M pruebas, pasamos X pruebas" y actualizamos la salud y el estado del proyecto a las personas con el dinero.
Hablando de dinero, tenemos el problema de costo fijo y / o horario fijo.
Tratar con un horario fijo es bastante sencillo. Dados sus requisitos, sabe cuántas iteraciones puede completar. Su carga de trabajo para cada iteración está prácticamente establecida en términos de características para implementar, probar e integrar. Puede ser difícil, pero no es imposible dividir características y asignarlas a iteraciones por adelantado. Esto se remonta a mi punto de invitar al cliente: si tiene un año y está utilizando iteraciones de 2 semanas, quizás invite al cliente trimestralmente (e invítelo cada trimestre) y muéstreles los resultados del trabajo anterior. Permítales ver su priorización de requisitos, sus planes futuros y cómo va a programar.
Tratar con un presupuesto fijo es similar. Usted sabe cuánto tiempo tiene, cuántos recursos tiene para el proyecto, cuánto cuestan y, por lo tanto, cuántas horas pueden trabajar todos por iteración. Es solo una cuestión de asegurar que todos hagan un seguimiento de esto cuidadosamente. Si su empresa puede comer el costo de las horas extra, hágalo. De lo contrario, asegúrese de que todos trabajen el tiempo adecuado y use buenas habilidades de gestión del tiempo y boxeo de tiempo para mantener a todos productivos. Lo que necesita para mantener bajos los costos es horas más productivas: entregue más documentos y software que agreguen valor sin el costo de las reuniones y los gastos generales.
En última instancia, no se trata necesariamente de ser ágil, sino de aplicar las cosas que hacen que Agile sea bueno y ágil. Ser capaz de responder a los cambios en los requisitos, ser capaz de entregar software frecuente incluso si el cliente no lo desea, solo producir documentación de valor agregado (junto con lo que esté obligado por contrato a producir), y así sucesivamente.