Le difficoltà del cliente durante il progetto di sviluppo
Perché i clienti delle software house tendono spesso a evitare il coinvolgimento attivo nel processo di sviluppo di un software e a delegare le decisioni importanti? Ci sono tre motivi principali che potrebbero portarti a voler soprassedere alle fasi intermedie che caratterizzando lo sviluppo di un software:
Complessità: lo sviluppo di un software è estremamente complesso e il processo è lungo e difficile. Molte persone pensano di non essere in grado di gestire questa complessità, soprattutto perché mancano delle competenze tecniche per dialogare con il team di sviluppo. In fondo questo non fa parte del lavoro del cliente, ma del reparto IT.
Le persone fanno fatica a definire ciò che vogliono: Non siamo molto bravi a definire, in particolare nei dettagli, ciò che vogliamo. Gli scenari cambiano, le esigenze mutano ed è difficile orientarsi in progetti così lunghi e complessi. Si tratta di prendere decisioni che avranno un’impatto importante, ma sulle quali non abbiamo certezze ed una chiara visione, per questo tendiamo erroneamente a delegare la decisione e a fidarci.
Tutto questo porta a non sentirsi sufficientemente coinvolti nel progetto e questo può portare ad errori e incomprensioni tra le parti. Come cliente devi capire che il software andrà inevitabilmente a influire in maniera molto forte sul tuo business, per cui è normale e auspicabile che dovrai prendere decisioni complesse e che il tempo utilizzato nel seguire il progetto è di fondamentale importanza per lo sviluppo non solo del software ma di tutte quelle aree aziendali che esso andrà a influenzare.
Come affrontare le difficoltà
Presenza costante
Esistono molti modi per arrivare ad un’obiettivo e qualunque decisione venga presa per raggiungerlo si porta con sé costi e benefici. È necessario comprendere perché vengono fatte alcune scelte piuttosto che altre e l’unico modo per farlo è partecipare attivamente ad ogni fase del progetto. Ciò potrebbe richiedere molto del tuo tempo e delle tue energie, ma farà sì che tu possa essere parte attiva delle decisioni che vengono prese, delle scelte sullo sviluppo di certe funzionalità piuttosto che di altre e della direzione da dare all’intero progetto di sviluppo software. Solo così potrai arrivare alla fine con la consapevolezza di aver contribuito al raggiungimento del risultato finale e potrai motivare tutte le scelte intraprese nel corso dello sviluppo.
Sicuramente ci saranno dei compromessi: lo sviluppo di una funzionalità importante potrebbe precludere lo sviluppo di un’altra, proprio come nell’esempio del sarto in cui la scelta di un particolare tessuto condizionerà magari il colore o il tipo di vestibilità. Queste decisioni saranno sempre prese in concerto tra te e il team di sviluppo.
Dare priorità ai problemi
Fornitore e cliente devono lavorare insieme per stabilire la priorità dei problemi, in modo da decidere quali debbano essere risolti per primi e quali possono essere messi in coda.
Suddividere i problemi in base alle loro priorità significa dare una direzione e di conseguenza una visione a medio-lungo termine all’intero progetto. Significa non navigare a vista e non farsi guidare dalle urgenze, ma dalla lucida consapevolezza di quali sono gli ostacoli bloccanti per passare alla fase successiva. Ciò permette di darsi un traguardo finale e una serie di obiettivi intermedi da raggiungere strada facendo.
Ownership del progetto
Così come chi realizza il software è tenuto a fornire un project manager che guidi il progetto, anche da parte del cliente sarà necessaria la presenza di un referente e di tutte le persone ritenute utili alla buona riuscita del progetto. Ricordati che un’azienda è fatta di tante teste pensanti e uno stesso problema può essere percepito e declinato in tanti modi diversi. Come cliente dovresti scegliere una persona o un gruppo di persone all’interno della tua organizzazione che abbia il compito di interagire con il team di sviluppo, che abbia il potere e la facoltà di prendere decisioni.
In altre parole è necessaria una figura che divida la ownership del progetto con il team di sviluppo, che si prende la responsabilità di declinare il problema e interagire con il reparto tecnico. Questa persona dovrà contribuire a identificare i problemi e a dare loro una priorità e dovrà interessarsi al progetto in ogni singola fase. D’altra parte, un buon team di sviluppo non è un mero esecutore, ma avrà il compito di non assecondare in maniera acritica i desideri del cliente nel caso in cui questi mettano in discussione la possibilità di arrivare alla meta.
Creare fiducia
Esiste sempre un grado di incertezza in un progetto di sviluppo software, ma questa può essere limitata e gestita se viene sviluppato un rapporto di fiducia tra cliente e fornitore. Le persone non sono molto brave a definire, in particolare nei dettagli, ciò che vogliono, ma sono abbastanza brave a indicare il quadro generale di ciò che vogliono. Quando vengono loro presentate delle opzioni poi, sono in grado di definire cosa piace loro e cosa no.
In altre parole cliente e team di sviluppo devono lavorare insieme per identificare ciò si pensa di volere, produrre qualcosa che rifletta tale comprensione, ottenere feedback dal cliente e quindi aggiornare la soluzione per rifletterne una migliore comprensione. L'implicazione è che bisogna lavorare in modo evolutivo e collaborativo per fornire soluzioni che riflettano le reali esigenze dei clienti.