AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

L'impatto dell'incertezza nello sviluppo software

Ieri sera ho partecipato alla cena DDD organizzata in Managed Designs, è stata una piacevole serata in cui abbiamo fatto quattro chiacchiere sulla nostra amata professione. Si sono toccati molti argomenti non solo il DDD.

C'è un punto emerso tagliando una gustosa cotoletta che mi piacerebbe approfondire qui: l'incertezza intrinseca del nostro mestiere. Fare previsioni affidabili è una necessità, prima di tutto economica, perchè i budget si devono organizzare prima e perchè il progetto sia redditizio per chi lo sviluppa.

Una cosa che ci viene naturale come essere umani è quella di cercare di incanalare il progetto in un binario già noto da cui il nascere di definizioni come l'applicazione è datacentrica, gestiamo tutto nel modo x, ecc. Si cerca cioè di proiettare nel futuro una cosa già vista nel passato (si chiama ragionamento induttivo, leggetevi la storia del tacchino su questo articolo di wikipedia).

Questa logica soffre IMHO di alcune debolezze. Se ho commesso un errore nel passato di cui non sono consapevole lo commetterò di nuovo nel futuro. Inoltre in questo modo sono tendenzialmente chiuso a provare strade nuove perchè non conoscendo a priori il risultato temo che sarà peggiore.

Ed è proprio questo secondo me quello che si chiama paura e dove ci vuole coraggio.

Un altro luogo comune che vorrei sfatare è: più tempo dedico a fare una stima, migliore sarà la stima. Risponderò a questo con un esperimento che è stato fatto su due gruppi di persone. Ad entrambi i gruppi veniva mostrato una fotografia sfuocata di un idrante, al primo si passava alla versione non sfuocata in dieci passi, mentre al secondo in cinque.

Nel momento in cui entrambi i gruppi vedevano la stessa immagine si chiedeva di dire cosa c'era nella fotografia. Ebbene il gruppo che aveva visto meno immagini rispondeva molto più velocemente. Cosa significa questo? Se si hanno più informazioni si devono valutare molte più alternative e si rischia di scambiare il rumore per informazione utile.

Come possiamo quindi mitigare, visto che non si può eliminare, l'effetto dell'incertezza?

Tenendo conto di alcuni fattori. Primo: l'effetto delle previsioni degrada velocemente nel tempo, cioè pianificare la prossima settimana è più facile che pianificare i prossimi due mesi. Secondo: Non si può sapere a priori quali siano gli eventi che cambieranno il piano che abbiamo fatto e quindi occorre essere sufficientemente flessibili da permettere il cambiamento.

Come raggiungere il secondo obiettivo? Un modo è quello di gestire tutto il progetto come se i tutti i requisiti fossero frutto di un cambiamento. In questo modo l'architettura diventerà sufficientemente malleabile da accettare più facilmente i cambiamenti.

Lo scopo di questo post è fornire spunti di riflessione non quello di dispensare ricette precotte che vi faranno diventare ottimi sviluppatori in 28 giorni. Non esistono soluzioni semplici per affrontare la complessità e il cambiamento, ma IMHO ci sono modi che funzionano meglio di altri.

Se vi interessa approfondire l'argomento vi consiglio la lettura del libro: The Black Swan.

Print | posted on mercoledì 8 settembre 2010 13:52 |

Feedback

Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

> sono proprio

E' proprio ...

-LV
09/09/2010 01:42 | LudovicoVan
Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

Scusa, aggiungo che questo e' fra l'altro in linea con un'idea dell'ingegneria come pratica e non come scienza. Ovviamente cerchiamo di rendere i nostri processi il piu' possibile prevedibili, ovviamente *usiamo* la scienza dove e' applicabile, ma resta il fatto che fondamentalmente non c'e' nulla di "automatico".

Al limite, l'ingegneria e' una scienza sociale...

-LV
09/09/2010 01:48 | LudovicoVan
Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

x Ludovico:
Più che altro sopravvalutiamo troppo le nostre esperienze passate tirando fuori "teorie" da troppe poche osservazioni.
09/09/2010 11:33 | Antonio Ganci
Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

Grazie per la spiegazione, adesso e' tutto perfetto.

-LV
09/09/2010 14:24 | LudovicoVan
Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

Sono molto interessanti le considerazioni che fai, però mi sono sempre chiesto perchè nell'ingegneria edile si riescono a fare progetti faraonici definendo una pianificazione a lungo termine, una analisi dei requisiti precisa e un disegno altrettanto preciso mentre invece nel software non ci riusciamo. La risposta che mi sono dato bene o male è che nel mondo dell'ingegneria edile si accettano le seguenti condizioni: contingency economica elevata, costi di cambiamento elevati (quindi il committente cerca di evitare le variazioni in corso d'opera)
Ovvero in generale il rischio d'impresa è contingentato nel progetto stesso.
Nel nostro mondo (quello del software) invece tutto ciò non lo si accetta ed in generale non si accetta che il software costa produrlo e che il software è un oggetto industriale soggetto a rischio di impresa (ovvero può anche non funzionare) e soprattutto, che un cambio in corso d'opera non è gratuito.
Quanto si sono sentiti dire: ma su dai fai questa modifica cosa vuoi che impatti sui tempi/costi.
E pensare che invece nell'ingegneria del software c'è una grande letteratura che affronta il problema degli impatti sulle variazioni in corso d'opera (change request) ma sembra che dagli anni '80-'90 con la massificazione degli sviluppi software: ovvero chiunque può sviluppare da casa sul proprio PC (cosa che apprezzo tantissimo), questa cosa si sia ignorata, mentre resta ancora vera sui vecchi mainframe o le piattaforme applicative legacy (leggi SAP)....

Grazie per gli spunti di riflessione
09/09/2010 15:00 | Roberto
Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

x Roberto:
> nell'ingegneria edile si riescono a fare progetti faraonici definendo una pianificazione a lungo termine, una analisi dei requisiti precisa e un disegno altrettanto preciso

Questo è un luogo comune, mi vengono in mente almeno due esempi che smentiscono tale affermazione: l'opera house di Sydney e L'aeroporto progettato da Renzo Piano.
La grossa differenza con il mondo delle costruzione è il tempo dedicato alla progettazione rispetto alla costruzione. Nel software le progettazione è il 99,99% del tempo mentre la costruzione si tratta semplicemente di fare una build del software. Mentre nelle costruzioni il tempo di realizzazione non è sicuramente trascurabile, ma la costruzione contiene spesso bug che rimangono irrisolti a causa dei costi elevati per metterli a posto.
09/09/2010 16:50 | Antonio Ganci
Gravatar

# re: L'impatto dell'incertezza nello sviluppo software

Roberto:

> mi sono sempre chiesto perchè nell'ingegneria edile si riescono a fare progetti faraonici definendo una pianificazione a lungo termine, una analisi dei requisiti precisa e un disegno altrettanto preciso mentre invece nel software non ci riusciamo.

> non si accetta che il software costa produrlo e che il software è un oggetto industriale soggetto a rischio di impresa

Due osservazioni che essenzialmente condivido, e per le quali penso che occorra tenere conto principalmente di due fattori: 1) la complessita' intrinseca all'ingegneria informatica, che e' *incomparabilmente* maggiore di qualunque altra ingegneria; il waterfall tout-court per noi semplicemente non puo' funzionare, se non nei casi davvero banali; 2) il contesto socio-culturale in cui ci muoviamo: il nostro committente non e' piu' l'industria ed i suoi investimenti a lungo termine, bensi' il commercio e le sue speculazioni a brevissimo: per questo, nonche' per motivi legati al caos e alla speculazione che regnano ormai nel nostro stesso settore, siamo visti e trattati tendenzialmente come operatori di fast-food.

-LV
10/09/2010 00:10 | LudovicoVan
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET