Agile è molte cose per molte persone e alcuni si sentono strongmente su queste cose rispetto ad altre. Leggi il manifesto Agile. Questa è solo la mia opinione, ma alla fine della giornata Agile si occupa di fare ciò che è giusto con una quantità minima di spese generali e di usare qualsiasi metodo / tecnica valida e comprovata (cioè TDD ...) che abbia senso per la tua situazione specifica. p>
Come altri hanno già menzionato, i team più agili si sforzano di fornire piccoli incrementi in piccole iterazioni. E quando possibile dovresti fare la stessa cosa. Allo stesso tempo, paga per avere il giusto design fatto in anticipo. Se la tua applicazione richiede un framework, devi assolutamente andare avanti e mettere in atto il framework. Sì, non sarai in grado di consegnare nulla che funzioni per diverse settimane e forse di più, ma se tu e il tuo team sentite di averne bisogno, fatelo. La pietra angolare di Agile è che riguarda le persone, fa ciò che le persone credono che tu debba fare e loro ti daranno le spalle e saranno conferite al prodotto. Abbiamo forzato i vincoli che hanno reso l'intera squadra strana e imbarazzante e questo è solo pessimo.
Allo stesso tempo, tieni presente che puoi trattare il tuo framework come un deliverable separato che deve essere consegnato a un "team di sviluppo" in modo che il team possa consegnare il prodotto finale. La maggior parte delle volte dopo che è stata stabilita la base minima, è possibile lavorare su framework in incrementi proprio come si farebbe sul prodotto reale. Decidi il minimo assoluto di cui avresti bisogno dal framework per fare in modo che il prodotto faccia qualcosa e concentrati su quello.
Anche IMHO, prendi l'espressione "nessun grande progetto in anticipo perché sei agile" con un pizzico di sale. Anche se non è assolutamente necessario entrare nei dettagli e passare 6 settimane a scrivere documenti di design, per un progetto su larga scala vale ancora la pena dedicare un po 'di tempo a pensare all'architettura generale e al design di alto livello. Metti i pezzi grossi al loro posto giusto in modo che la tua squadra abbia una chiara roadmap in cui vuoi finire. Poiché si esegue solo la progettazione di alto livello, se la direzione cambia, è necessario aggiornare solo la documentazione di alto livello (non dovrebbe essere molto). Non farei mai affidamento sul solo refactoring per dettare la struttura finale di una grande applicazione. Il tuo obiettivo è di fare il minimo design NECESSARIO, non il minimo assoluto in un punto in cui virtualmente non esiste alcun design in anticipo e i requisiti guidano l'evoluzione dei tuoi moduli.
Infine, solo perché non puoi consegnare nulla che funzioni effettivamente fino a quando l'intero framework non è a posto, non significa che non puoi tagliare la struttura in più parti e concentrarti su ognuna individualmente insieme a TDD. Puoi astrarre le interfacce SOA, il database, le comunicazioni di rete, qualche altra logica di back-end e anche se tutto ciò deve essere nel framework, puoi scrivere ognuna usando TDD e prendere in giro tutte le interfacce con cui parleranno queste parti. Alcuni membri del tuo team possono iniziare a lavorare sull'effettivo codice dell'applicazione utilizzando le classi di simulazione che fanno finta che il tuo framework finale sia a posto.
Quindi dimentica la metodologia, fai un passo indietro e chiediti a te stesso (e al team), la SOA è l'approccio giusto per questa applicazione? Se lo è, puoi sicuramente farlo funzionare con agilità.