Acho que a primeira coisa a perceber é que há uma diferença entre ser ágil e ser ágil. A implantação lenta de técnicas e características ágeis - equipes multifuncionais, planejamento adaptativo, entrega evolutiva / incremental, iterações com intervalos de tempo e até a introdução de conceitos do Lean são muito diferentes de introduzir a Programação Extrema, Scrum ou Crystal.
Você mencionou explicitamente o envolvimento do cliente. Sim, muitas das metodologias ágeis exigem o envolvimento do cliente, mas não é necessário ser ágil. Em todos os programas relacionados ao governo / defesa, sempre tive um gerente de programa ou projeto que era o ponto de contato com o cliente. Essa pessoa se torna a "voz do cliente". Pode ser mais lento quando eles teleconferem, enviam e-mails ou telefonam e esclarecem, mas você pode ter uma única pessoa (ou um grupo, se também tiver vice-diretores), que é o representante do cliente da sua equipe. É certo que não é exatamente o mesmo. Mas não é ser ágil sobre ser flexível e responder às mudanças?
Você também menciona alguns conceitos-chave: requisitos predefinidos, solicitações de recursos "descartadas", falta de priorização porque "todas são importantes" e projetos de custo fixo e / ou cronograma fixo. Cada um deles pode ser tratado de maneiras diferentes.
Se você acha que tem todos os seus requisitos antecipadamente, é provável que não tenha. Os requisitos mudam. Só porque você tem uma especificação "finalizada e desconectada" não significa que ela esteja definida. Dado o documento de requisitos que você possui, capture-os como se sentir confortável e / ou da maneira especificada no contrato e entregue os requisitos, o design e a arquitetura. Além disso, veja se você pode tratar esses documentos vivos (um documento de design que vi hoje no trabalho é rotulado como Revisão G, o que significa que está na 8ª atualização). Pergunte sobre o quanto você pode deixar como TBD em qualquer iteração e quanto precisa ser corrigido agora - pode haver alguma coisa para dar e receber.
Seja ágil com sua documentação. Não duplique esforços entre "o que sua equipe deseja" e "o que o cliente deseja". Por exemplo, se seu cliente deseja uma especificação de requisitos de software tradicional e sua equipe deseja usar histórias de usuário, tente se adaptar a um SRS tradicional e use itens de ação e uma lista de itens de ação contínua em vez de histórias de usuário para que você não perca tempo formular "o sistema deve ..." e "deve poder fazê-lo porque". Isso exige disciplina da equipe, no entanto, para se adaptar às diferenças entre os projetos. Capture problemas nas reflexões.
Após o desenvolvimento, você pode executar 5 ou 6 iterações e convidar seu cliente para o seu estabelecimento para ver um subconjunto de sua implementação. Enxágue e repita esse processo. Não é o envolvimento constante exigido por algumas metodologias, mas você tem a vantagem da alta visibilidade. Se o seu cliente recusar, pelo menos você tentou. Se eles dizem que sim, você pode esclarecê-los sobre a agilidade. Em um projeto em que participei, o cliente visitava o site a cada poucos meses (3-5 meses, geralmente). Eles nos assistiam ao teste de controle de qualidade, discutiam preocupações com engenheiros e negociavam com o escritório do programa / projeto. Foi uma oportunidade para todos chegarem à mesma página.
Testes e manutenção acontecem da mesma forma que em outros projetos ágeis. Crie seus procedimentos de teste e documente defeitos da maneira apropriada, acompanhe métricas por obrigações contratuais e documente os resultados dos testes. Se você deseja seguir o TDD, vá em frente. A integração contínua é outra boa ideia. Durante as reuniões de status do projeto, seu gerente de projeto pode usar essas informações para dizer "implementamos requisitos de N, temos testes M, testes X aprovados" e atualizamos a saúde e o status do projeto para as pessoas com o dinheiro.
Falando em dinheiro, temos o problema de custo fixo e / ou horário fixo.
Lidar com um horário fixo é bastante simples. Dado seus requisitos, você sabe quantas iterações pode ser concluída. Sua carga de trabalho para cada iteração é praticamente definida em termos de recursos para implementar, testar e integrar. Pode ser difícil, mas não é impossível interromper os recursos e atribuí-los às iterações com antecedência. Isso remonta ao meu argumento sobre convidar o cliente - se você tiver um ano e estiver usando iterações de duas semanas, talvez convide o cliente trimestralmente (e convide-o a cada trimestre) e mostre a eles os resultados do trabalho anterior. Deixe que eles vejam sua priorização de requisitos, seus planos futuros e como você está agendando.
Lidar com um orçamento fixo é semelhante. Você sabe quanto tempo tem, quantos recursos possui para o projeto, quanto custam e, portanto, quantas horas todos podem trabalhar por iteração. É apenas uma questão de garantir que todos os acompanhem com cuidado. Se sua empresa pode consumir o custo de horas extras, faça isso. Caso contrário, certifique-se de que todos trabalhem por um período de tempo apropriado e use boas habilidades de gerenciamento de tempo e tempo para manter todos produtivos. Horas mais produtivas é o que você precisa para manter os custos baixos - entregue mais documentos e software de valor agregado, sem o custo de reuniões e despesas gerais.
Por fim, não se trata necessariamente de ser ágil, mas de aplicar as coisas que tornam o ágil bom e ser ágil. Seja capaz de responder a mudanças nos requisitos, seja capaz de fornecer software frequente, mesmo que o cliente não o deseje, apenas produza documentação de agregação de valor (junto com o que você é contratualmente obrigado a produzir) e assim por diante.