Recentemente mi sono interessato alle pratiche agili nello sviluppo del software e da allora ho visto molti articoli che sottolineano che queste pratiche consentono di ridurre i costi complessivi.
La logica dietro di solito è questa: se le tue esigenze cambiano, puoi riflettere questo cambiamento nel prossimo backlog sprint e questo porterà a costi ridotti, perché progettare la nuova funzionalità e implementarla è vicina in termini di tempo , quindi il costo diminuisce, in base alla famosa regola secondo cui più tardi è necessario apportare una modifica alle proprie esigenze più costoso sarà soddisfare tale requisito.
Ma i progetti software da metà a grande sono complessi. Un cambiamento improvviso dei requisiti non significa che non dovrai toccare altre parti del tuo sistema per soddisfare questo requisito. In molti casi l'architettura dovrà essere modificata in modo molto significativo, il che significa anche che sarà necessario ri-implementare tutte le funzionalità che si basano sull'architettura più vecchia. Quindi l'intero punto dei costi ridotti va via qui. Naturalmente se un nuovo requisito richiede una nuova parte indipendente del sistema, non è un problema, la vecchia architettura cresce solo, non ha bisogno di essere ripensata e reimplementata.
E il contrario. Se stai usando waterfall e all'improvviso ti rendi conto che è necessario introdurre un nuovo requisito, puoi andare e cambiare il tuo design. Se è necessario modificare l'architettura esistente, la si riprogetta. Se non lo incasina, ma introduce una nuova parte del sistema, allora fai tutto il lavoro, nessun problema.
Detto questo, mi sembra che l'unico vantaggio che ha lo sviluppo agile sia la creazione di feature complete tra gli sprint, e per molte persone e gli scarti questo non è fondamentale. Inoltre, agile sembra che porti a una cattiva architettura del software nel suo complesso, perché le funzionalità vengono assegnate una all'altra su un altro, le squadre agili si preoccupano solo del fatto che una funzionalità funzioni, non di come funzioni. Questo sembra che quando i sistemi crescono in complessità con il tempo, le pratiche di sviluppo agili aumentano il caos nell'architettura generale del prodotto, portando quindi a costi più elevati, dal momento che sarà sempre più difficile introdurre cambiamenti, mentre waterfall ti consente di perfezionare la tua architettura prima di rilasciare qualsiasi cosa.
Qualcuno può indicarmi dove sto andando male qui, perché ovviamente molta gente usa agilmente in ambienti di produzione, quindi devo sbagliarmi da qualche parte.