Ho usato questa analogia ... molti progetti software iniziano perché la persona che ha bisogno di software conosce l'equivalente di un "tuttofare", e assumono questa persona per costruirli l'equivalente software di un capanno da giardino. È una piccola, utile piccola applicazione che fa il suo lavoro molto bene.
Il cliente torna quindi al tuttofare, soddisfatto del loro lavoro, e chiede loro di cambiare il software per fare ancora una cosa. Un sacco di volte, questa nuova funzione non ha molto a che fare con la richiesta originale, quindi è quasi come se ti chiedessero di costruire un'altra stanza sul retro del capannone con un ingresso separato.
Poi vogliono mettere una luce all'interno del capannone, così hanno il retro del tuttofare, e gestisce un singolo circuito dal pannello principale della casa, installa un interruttore della catena di trazione nel soffitto di ogni stanza e li collega al circuito.
Il cliente decide quindi di voler utilizzare alcuni utensili elettrici, ma continua a far saltare l'interruttore, quindi chiama la persona indietro e in realtà deve strappare il circuito singolo che ha eseguito al pannello principale, e installare un dispositivo più grande conduttore e un sotto-pannello nel capannone. Ha dovuto eseguire il filo due volte e pagare per due permessi elettrici, ecc. Questo è inefficiente.
Quindi il cliente chiede qualcosa di assurdo: puoi trasformare il mio capanno da giardino in un garage? Non voglio che tu rifacci tutto quello che hai fatto ... voglio solo che tu lo ingrandisca, così posso parcheggiare la mia macchina lì dentro. Quindi, in molti casi, il tuttofare pensa "il cliente ha sempre ragione" e procede a costruire aggiunte su 3 lati del capannone per renderlo più grande, abbatte il muro tra le pareti divisorie, ecc. Naturalmente, il tetto finisce su cascante perché non è costruito bene, ecc.
Quindi il cliente non è più così colpito, ma vuole ancora di più. Chiedono al tuttofare più e più volte di aggiungere solo un'altra stanza, o di cambiare la stanza esistente per farlo, ecc. Finisci con qualcosa che assomiglia a The Burrow ed è architettonicamente valido.
Ora la maggior parte delle persone non è abbastanza sciocca da provare questo nel mondo delle costruzioni, ma succede sempre nel mondo del software, perché le persone non fanno queste connessioni:
-
Una persona qualificata per costruire un capanno da giardino davvero carino non è necessariamente qualificata per costruire una casa.
-
Se sapessi in anticipo che stavi per costruire una casa in più fasi, ma sarebbe solo iniziato come un capanno da giardino, avresti fatto le cose in modo diverso e il capannone sarebbe costato molto di più (versavi un pad molto spesso, assicurati di avere un conduttore abbastanza grande per il carico completo di una casa finita, ecc.)
-
In molti casi, l'aggiornamento da una fase all'altra comporta l'annullamento di gran parte del lavoro svolto in precedenza, rendendolo più costoso di quanto dovrebbe sembrare.
-
Nel mondo della costruzione, possiamo dare al cliente una buona idea di come sarà il risultato durante la fase di progettazione, ma non abbiamo questa capacità nel mondo del software. Se sei arrivato a quel punto, hai praticamente scritto una parte significativa del software.
Il Manifesto Agile è il risultato del riconoscimento che il software / analogia di costruzione è rotto. Cose come test unitari automatizzati e cicli di rilascio iterativi non hanno paralleli nella costruzione. Queste cose si avvantaggiano del costo quasi nullo di passare dalla progettazione al prototipo (lo chiamiamo compilazione o costruzione).