Sviluppo software: il ruolo del cliente
Uno dei miei primi acquisti online fu un notebook che ordinai dal sito di un’azienda famosa per assemblare i prodotti direttamente alla richiesta di acquisto del cliente. Dopo l‘acquisto non mi sono interessato ai processi che avrebbero guidato l’assemblaggio del mio notebook. Perché avrei dovuto? Avevo pagato per ottenere un prodotto di cui avevo letto tutte specifiche e che avevo espressamente scelto e perciò sapevo cosa aspettarmi. Diverso sarebbe stato se avessi voluto realizzare un abito su misura. In quel caso si che avrei avuto un ruolo attivo nella creazione del mio prodotto: il sarto mi avrebbe chiesto di scegliere il tessuto, avrebbe preso le mie misure, mi avrebbe fornito alcune opzioni tra cui scegliere riguardo le caratteristiche che avrebbe dovuto avere il mio abito. Mi avrebbe poi comunicato una data per la consegna e io sarei andato a ritirarlo. Tutto questo per assicurarsi che ciò che avrebbe confezionato si sarebbe adattato perfettamente a me.
La differenza tra i due esempi è fin troppo banale, ma mette in luce una realtà comune: a volte siamo portati ad accettare di essere coinvolti nella realizzazione di alcuni tipi di prodotto per il quale stiamo pagando e altre volte invece no.
Perché questo accade e quale strada dovresti seguire come cliente di un progetto di sviluppo software?
Il coinvolgimento del cliente in un processo di sviluppo software
Potrebbe essere allettante immaginare che assumere un team di sviluppo per realizzare un software personalizzato ricada nel primo dei due casi sopra citati. Purtroppo, la brutta notizia è che non è affatto così. In un progetto di sviluppo software è necessario che, come cliente, tu sia coinvolto in maniera attiva durante tutte le sue fasi o rischierai di ottenere un prodotto zoppo, che non ti soddisfa come avresti voluto. Che si tratti di sviluppare un software che rappresenta il cuore del tuo business o che serva ad automatizzare alcune funzioni aziendali, instaurare un rapporto di collaborazione continua con il tuo fornitore è l'unico modo che hai per garantirti un ritorno dell’investimento e aumentare l'efficienza dell’intero processo di sviluppo del software.
La verità è che se tenderai a disinteressarti dei passaggi intermedi (e sono tanti) che intercorrono tra la firma del contratto e la consegna del software, arriverai a fine lavoro senza avere la consapevolezza del perché certe decisioni sono state prese (ad esempio perché si è scelto di sviluppare alcune funzionalità piuttosto che altre), ti mancherà il quadro d’insieme e non sarai soddisfatto del risultato finale. I passaggi intermedi in questo caso rappresentano le implementazioni delle singole funzionalità, la raccolta di feedback da parte tua su ciò che deve essere implementato e i cambi di direzione dovuti alle tue esigenze aziendali. Questi step noi li affrontiamo attraverso gli sprint di sviluppo tipici della metodologia agile per lo sviluppo software. Purtroppo capita che il cliente preferisca non partecipare in maniera costante durante questi passaggi intermedi o deleghi questo compito a persone, interne o esterne alla propria azienda, che non hanno le competenze o l’autorità per prendere decisioni di questo tipo. Questo porta, nel medio termine, a non essere allineati sugli obiettivi attesi e ad un’insoddisfazione del cliente data dalla mancanza di una chiara visione e del perché sono state prese certe decisioni piuttosto che altre.
In questo articolo ti spiego perché tu non dovresti essere quel tipo di cliente.
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.
Le persone tendono a dare più importanza al proprio lavoro di routine piuttosto che al tempo utilizzato per seguire lo sviluppo del software. Le normali attività dell’azienda cliente devono comunque svolgersi parallelamente allo sviluppo e alcune parti interessate potrebbero non essere disponibili durante il normale orario lavorativo.
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.
I vantaggi di questo approccio allo sviluppo software
Questo modo di lavorare dà diversi vantaggi ad entrambe le parti coinvolte nello sviluppo del software. Quelli che seguono sono solo alcuni dei benefici che questo approccio si porta dietro:
Decisioni tempestive: Le parti interessate sono preparate e condividono le conoscenze aziendali con il team di sviluppo software con grande velocità. Di conseguenza diminuisce il rischio che il team prenda la decisione sbagliata.
Minor spreco finanziario e di risorse: Assicurandoti che il team di sviluppo riceva sempre un feedback tempestivo sui requisiti, risparmi tempo e denaro consentendo agli sviluppatori di concentrarsi solo su ciò di cui hai bisogno.
Feedback frequenti: potrai interagire con le nuove funzionalità nel momento in cui vengono sviluppate invece che aspettare che tutto sia finito. Confronti frequenti ti aiutano a riconoscere le funzionalità mancanti dovute a incomprensioni o a identificare esigenze che non avevi ancora considerato.
Fiducia reciproca: tu sei l’esperto del tuo business, ma l'implementazione è il dominio degli sviluppatori. Capirai qual è il contesto tecnico del tuo software e che quindi è nel tuo interesse seguire i loro consigli sul modo più semplice per adattare le soluzioni alle tue esigenze.
Per concludere
Come ho già detto esiste un grado di incertezza nei progetti di sviluppo software che non potrà mai essere del tutto azzerato. Esistono però dei rischi che possono essere minimizzati se tutte le parti in gioco applicano metodo e disciplina. Se tutto viene fatto correttamente, i rischi che il progetto fallisca si riducono drasticamente, riducendo tutte quelle difficoltà tipiche di ogni progetto di sviluppo software.
Se vuoi assicurarti di ottenere il massimo ritorno sull'investimento, assicurati di lavorare con un team di sviluppo che dia la priorità al coinvolgimento stretto del cliente durante l'intero progetto e che sia disposto a considerarti parte integrante di tutto il processo di sviluppo del software.
Davide Leoncino
Co-founder di BitBoss | Head of Marketing