La causa principale della tua frustrazione per la situazione è probabilmente quella della percezione e dei termini fuorvianti / errati usati dal cliente. Di solito il cliente non viene da voi con una lista di requisiti , ma una lista di desideri di ogni singola cosa che potrebbero pensare a potrebbe essere utile a loro. Questi non sono tutti requisiti perché il cliente non ha ancora impiegato il tempo per pensare veramente se ogni funzione è veramente richiesta .
Questo non è necessariamente sempre un problema
Se il tuo cliente ha i soldi per tutte quelle funzionalità ed è disposto a separarsene, e non ti interessa davvero risolvere i problemi reali, reali che il cliente ha, allora questo potrebbe essere un progetto molto redditizio. Succede, molto, molto raramente, e per la maggior parte degli sviluppatori è un lavoro che uccide l'anima perché puoi sentire in anticipo che il progetto non avrà successo per il cliente alla fine (anche se ha successo finanziario per te come sviluppatore). È anche ad alto rischio perché è probabile che tu finisca con un progetto a costi fissi con molta incertezza, ed è davvero un problema per valutare male il rischio su progetti di grandi dimensioni.
Che cosa succede se si tratta di un problema?
Supponiamo che tu non sia in quella situazione rara. In questo caso dovrai affrontare le due principali carenze della lista dei desideri come indicato:
- È improbabile che il cliente abbia un'idea corretta dei costi per lo sviluppo di un elenco così ampio di requisiti, quindi è improbabile che tu possa ottenere il contratto per la quantità di denaro effettivamente necessaria per farlo.
- È improbabile che questa lista di desideri descriva in modo preciso e sintetico il vero problema che il cliente ha e vuole risolvere.
Secondo la mia esperienza, devi risolvere il problema con 2 per risolvere il problema. 1. Drillare fino al problema effettivo significa che tu, lo sviluppatore, ora hai l'input necessario per fare passi da gigante creativi nel risolvere il problema in modi che il cliente stesso non ha mai nemmeno pensato. È probabile che queste soluzioni siano molto più economiche e più veloci rispetto all'implementazione della lista dei desideri completa.
Come lo risolvi?
Come dice Matthew Flynn nella sua risposta, inizia facendo in modo che il cliente dia priorità ai requisiti. Questo non è sempre facile, ma costringili a farlo. Se necessario usa la frase "Se qualcuno ti ha puntato una pistola alla testa, quale requisito singolo vorresti mantenere?".
Durante questo processo troverai spesso che il cliente non ha un'idea molto chiara di cosa significano le esigenze individuali. In tal caso, fai ciò che Peter Rowell suggerisce e invita il cliente a lavorare su User Stories. Tu e il cliente inizierete a capire molto meglio il problema e i requisiti, quindi potrete tornare alle priorità. Ripeti questi passaggi tutte le volte che è necessario finché non ti senti a tuo agio che ne sai abbastanza per risolvere il problema del cliente .
In che modo risponde alla domanda sullo sviluppo di una soluzione?
Una volta che hai un elenco di requisiti prioritari, hai l'input necessario per suggerire un processo di sviluppo incrementale al tuo cliente.
Non è necessario chiamarlo Agile, ma è possibile suggerire di suddividere il contratto in pezzi più piccoli per ogni esigenza (o una serie indivisibile di requisiti) e consegnarli uno per uno con la convalida da parte del cliente.
Oppure puoi andare avanti e utilizzare le molte risorse disponibili online e offline per convincere il cliente che è nel loro migliore interesse collaborare in uno degli stili di sviluppo Agile.
In ogni caso, è possibile fornire il proprio contratto / proposta di progetto in una forma che suggerisca chiaramente questi elementi costitutivi dei requisiti in ordine di priorità, ciascuno con i propri costi e conclusioni. Tieni quella carota di fronte al cliente e potrebbero anche pensare che fosse la loro idea decidere se continuare dopo l'incremento:).