Has definido una situación sin escapatoria.
Estoy seguro de que hay situaciones de la vida real en las que tienes un bloque de funcionalidad complicada que no se puede dividir. Pero el caso habitual es que puede dividir un requisito en requisitos secundarios que sí tienen algún beneficio.
Digamos, por ejemplo, que mi requisito es validar las direcciones de facturación de tarjetas de crédito del Reino Unido. Esto es bastante complicado, queremos asegurarnos lo mejor posible de que la dirección sea la dirección residencial de la persona nombrada en la tarjeta para que, si no cumplen con el pago, podamos perseguirla.
Hay potencialmente cientos de validaciones y verificaciones que podemos hacer para mejorar la confiabilidad de la verificación, pero cada una de ellas individualmente es comprobable y ofrece una disminución real en el riesgo de fraude.
- la dirección tiene un número de casa y un código postal
- el código postal es un formato válido
- La búsqueda de código postal con API externa tiene éxito
- código postal es un código postal geográfico
- la dirección se valida con el proveedor de la tarjeta de crédito, etc.
Si llegara el momento, el cliente podría ganar dinero con solo un subconjunto de las reglas implementadas. Se podría aceptar el riesgo adicional o se podrían agregar soluciones manuales al flujo de trabajo para mitigar la situación.
Las metodologías Scrum y ágil están diseñadas teniendo esto en cuenta. Intentan evitar el fracaso de todo el proyecto asegurándose de que algunos requisitos faltantes no causen que toda la solución sea inútil.
Pero no pueden cambiar la realidad, si tienes un cohete espacial que definitivamente necesita X, Y y Z para volar. ¡Entonces necesitas los tres!
El truco es reconocer que, en general, en línea de aplicaciones comerciales, este no es el caso, a pesar de lo que el cliente pueda decir.