Questa settimana al lavoro mi sono agitato ancora una volta. Avendo attraversato l'agile standard, TDD, la proprietà condivisa, la metodologia di sviluppo ad hoc di non pianificare nulla al di là di poche storie utente su un pezzo di carta, masticare verbalmente la coccole sulle tecnicalità di un'integrazione di terze parti fino alla nausea senza mai fare alcun reale pensando o dovuta diligenza e abbinando architettonicamente tutto il codice di produzione al primo test che viene in mente a qualcuno negli ultimi mesi, raggiungiamo la fine di un ciclo di rilascio ed ecco che la principale caratteristica visibile esternamente che stiamo sviluppando è troppo lenta per uso, buggy, diventando labirinticamente complesso e completamente inflessibile.
Durante questo processo sono stati fatti "picchi" ma mai documentati e non è mai stato prodotto un singolo progetto architettonico (non c'erano FS, quindi che diavolo eh, se non sai cosa stai sviluppando, come puoi pianificarlo o ricercarlo ?) - il progetto è passato da coppia a coppia, ognuno dei quali si è sempre concentrato su una storia per singolo utente alla volta e il risultato è stato inevitabile.
Per risolvere questo, sono uscito dal radar, sono andato (la temuta) cascata, pianificato, codificato e fondamentalmente non ho scambiato la coppia e ho provato il più possibile a lavorare da solo - concentrandomi su solide architetture e specifiche piuttosto che su unit test che arriverà dopo che tutto sarà bloccato. Il codice ora è molto meglio ed è in realtà totalmente utilizzabile, flessibile e veloce. Alcune persone sembrano aver davvero risentito del fatto che io abbia fatto questo e si sono prodigate per sabotare i miei sforzi (forse inconsciamente) perché vanno contro il santo processo di agilità.
Quindi, come sviluppatore, come spieghi al team che non è "non agile" pianificare il proprio lavoro e come si adatta la pianificazione al processo agile? (Non sto parlando dell'IPM; sto parlando di sedermi con un problema e delineare un progetto end-to-end che dice come un problema dovrebbe essere risolto in modo sufficientemente dettagliato che chiunque lavori sul problema sa cosa architettura e schemi che dovrebbero usare e dove il nuovo codice dovrebbe integrarsi nel codice esistente)