La causa principale della tua frustrazione per la situazione è probabilmente quella della percezione e dei termini fuorvianti / errati utilizzati dal cliente. Il cliente di solito non viene da te con un elenco di requisiti , ma una lista dei desideri di ogni singola cosa a cui potrebbero pensare potrebbe essere utile per loro. Questi non sono tutti requisiti perché il cliente non ha ancora trascorso il tempo a pensare davvero se ogni funzionalità è 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 e reali che ha il cliente, 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 alla fine non avrà successo per il cliente (anche se è un successo finanziario per te come sviluppatore). È anche ad alto rischio perché probabilmente finirai con un progetto a costo fisso con molta incertezza, ed è davvero un problema valutare erroneamente il rischio su grandi progetti.
E se fosse un problema?
Supponiamo che non ti trovi 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 di sviluppo di un elenco così ampio di requisiti, quindi è improbabile che tu ottenga il contratto per la quantità di denaro effettivamente necessaria per farlo.
- È improbabile che questa lista dei desideri descriva accuratamente e sinteticamente il vero problema che il cliente ha e vuole risolvere.
Nella mia esperienza, devi risolvere il problema 2 per risolvere il problema 1. Analizzare il problema reale significa che tu, lo sviluppatore, ora hai l'input necessario per fare passi da gigante nella risoluzione del problema in modi a cui il cliente stesso non ha nemmeno pensato. È probabile che queste soluzioni siano molto più economiche e veloci rispetto all'implementazione della lista dei desideri completa.
Come lo risolvi?
Come afferma Matthew Flynn nella sua risposta, iniziare dando al cliente la priorità dei requisiti. Questo non è sempre facile, ma costringerli a farlo. Se necessario, usa la frase "Se qualcuno ti tenesse una pistola alla testa, quale requisito unico manterresti?". Durante questo processo, spesso scoprirai che il cliente non ha davvero un'idea chiara del significato dei singoli requisiti. In tal caso, fai ciò che Peter Rowell suggerisce e fai lavorare il cliente attraverso User Stories. Tu e il cliente inizierete a comprendere molto meglio il problema e i requisiti, quindi potrete tornare alla definizione delle priorità. Ripeti questi passaggi tutte le volte che è necessario fino a quando non ti senti a tuo agio da conoscere abbastanza per risolvere il problema del cliente .
In che modo risponde alla domanda sullo sviluppo di una soluzione?
Una volta che hai un elenco prioritario di requisiti, hai l'input necessario per suggerire un processo di sviluppo incrementale al tuo cliente. Non devi chiamarlo Agile, ma puoi suggerire di suddividere il contratto in pezzi più piccoli per ogni requisito (o serie indivisibile di requisiti) e consegnarli uno per uno con la convalida da parte del cliente. Oppure puoi fare tutto e usare le molte risorse disponibili online e offline per convincere il cliente che è nel loro interesse collaborare in uno degli stili di sviluppo Agile. In ogni caso, puoi fornire la proposta di contratto / 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 davanti al cliente,