Di recente mi sono interessato alle pratiche agili nello sviluppo del software e da allora ho visto molti articoli sottolineare che queste pratiche consentono di ridurre i costi complessivi.
La logica alla base di solito va così: se i tuoi requisiti cambiano, puoi riflettere questo cambiamento nel prossimo backlog dello sprint e questo porterà a costi ridotti, perché la progettazione della nuova funzionalità e l'implementazione è ravvicinata in termini di tempo, quindi il il costo diminuisce, secondo la famosa regola secondo cui in seguito è necessario apportare una modifica alle proprie esigenze, maggiore sarà il costo per soddisfare tale requisito.
Ma i progetti software medio-grandi sono complessi. Un'improvvisa modifica dei requisiti non significa che non dovrai toccare altre parti del tuo sistema per soddisfare tale requisito. In molti casi l'architettura dovrà essere modificata in modo molto significativo, il che significa anche che dovrai implementare nuovamente tutte le funzionalità che si basavano sull'architettura precedente. Quindi l'intero punto di riduzione dei costi in un certo senso scompare qui. Naturalmente se un nuovo requisito richiede una nuova parte indipendente del sistema, questo non è un problema, la vecchia architettura cresce, non ha bisogno di essere ripensata e reimplementata.
E il contrario. Se stai usando la cascata e improvvisamente ti rendi conto che deve essere introdotto un nuovo requisito, puoi andare e cambiare il tuo design. Se richiede che l'architettura esistente venga modificata, la riprogetti. Se in realtà non si scherza, ma introduce solo una nuova parte del sistema, allora vai e fai tutto il lavoro, nessun problema qui.
Detto questo, mi sembra che l'unico vantaggio di uno sviluppo agile sia la creazione di funzionalità complete tra gli sprint, e per molte persone e gli articoli non è fondamentale. Inoltre, l'agile sembra comportare una cattiva architettura del software in generale, poiché le caratteristiche sono un po 'schiaffeggiate l'una sull'altra, i team agili si preoccupano solo che una funzione funzioni, non come funziona. Questo sembra che quando i sistemi crescono in complessità con il tempo, le pratiche di sviluppo agili aumentano effettivamente il caos nell'architettura generale del prodotto, con conseguente conseguente aumento dei costi, dal momento che sarà sempre più difficile introdurre cambiamenti, mentre la cascata ti consente di perfezionare la tua architettura prima di rilasciare qualcosa.
Qualcuno può indicarmi dove sto andando storto qui, perché ovviamente molte persone usano agile in ambienti di produzione, quindi devo sbagliarmi da qualche parte.