Você definiu uma situação sem escapatória.
Tenho certeza de que existem situações da vida real em que você tem um bloco de funcionalidades complicadas que não podem ser divididas. Mas o caso usual é que você pode dividir um requisito em sub-requisitos, os quais têm algum benefício em si.
Digamos, por exemplo, que minha exigência é validar endereços de cobrança de cartão de crédito no Reino Unido. Isso é bastante complicado, queremos garantir, da melhor maneira possível, que o endereço seja o endereço residencial da pessoa nomeada no cartão, para que, se o pagamento for padrão, possamos persegui-lo.
Há potencialmente centenas de validações e verificações que podemos fazer para melhorar a confiabilidade da verificação, mas cada uma individualmente é testável e oferece uma redução real no risco de fraude.
- o endereço tem um número da casa e um código postal
- código postal é formato válido
- pesquisa de código postal com API externa é bem-sucedida
- código postal é um código postal geográfico
- endereço é validado com fornecedor de cartão de crédito etc etc
Se a pressão surgisse, o cliente seria capaz de ganhar dinheiro com apenas um subconjunto das regras implementadas. O risco extra pode ser aceito ou soluções alternativas manuais podem ser adicionadas ao fluxo de trabalho para atenuar a situação.
Metodologias Scrum e ágeis são projetadas com isso em mente. Eles tentam evitar a falha de todo o projeto, garantindo que alguns requisitos ausentes não façam com que toda a solução seja inútil.
Mas eles não podem mudar a realidade, se você tiver um foguete espacial que definitivamente precisa de X, Y e Z para voar. Então você precisa dos três!
O truque é reconhecer que, geralmente, na linha de aplicativos de negócios, esse não é o caso, apesar do que o cliente possa dizer.