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 una casetta da giardino. È una piccola, utile piccola applicazione che fa molto bene il suo lavoro.
Il cliente quindi ritorna dal tuttofare, soddisfatto del proprio lavoro, e chiede loro di cambiare il software per fare un'altra cosa. Molte volte, questa nuova funzionalità non ha molto a che fare con la richiesta originale, quindi è quasi come se ti stessero chiedendo di costruire un'altra stanza sul retro del giardino con un ingresso separato.
Quindi vogliono mettere una luce all'interno del capannone, quindi hanno il tuttofare indietro, e gestisce un singolo circuito dal pannello principale della casa, installa un interruttore della luce a catena nel soffitto di ogni stanza e li collega al circuito .
Il cliente decide quindi di voler utilizzare alcuni elettroutensili, ma continua a far saltare l'interruttore, quindi richiamano la persona e deve effettivamente strappare il singolo circuito che correva verso il pannello principale e installare un conduttore più grande e un pannello secondario nel capannone. Ha dovuto far passare il filo due volte e pagare due permessi elettrici, ecc. Questo è inefficiente.
Quindi il cliente chiede qualcosa di assurdo: puoi trasformare la mia casetta da giardino in un garage? Non voglio che tu faccia di nuovo qualsiasi cosa tu abbia fatto ... Voglio solo che tu lo ingrandisca, così posso parcheggiare la 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 termina cedimento perché non è costruito correttamente, ecc.
Quindi il cliente non è più così colpito, ma vogliono ancora di più. Chiedono al tuttofare più e più volte di aggiungere solo un'altra stanza, o cambiare questa stanza esistente per fare questo, ecc. Ti ritrovi con qualcosa che assomiglia a The Burrow ed è quasi 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 una casetta da giardino davvero piacevole non è necessariamente qualificata per costruire una casa.
Se sapessi in anticipo che avresti costruito una casa in più fasi, ma sarebbe solo iniziato come una casetta da giardino, avresti fatto le cose in modo diverso e la casetta sarebbe costata molto di più (avresti versato un pad molto spesso, assicurati di avere un conduttore abbastanza grande per il pieno carico 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 sembri.
Nel mondo dell'edilizia, 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 l'analogia software / costruzione è rotta. Cose come i test unitari automatizzati e i cicli di rilascio iterativo non hanno parallelismi nella costruzione. Queste cose sfruttano il costo quasi zero di passare dalla progettazione al prototipo (lo chiamiamo compilazione o costruzione).