Il mio approccio allo sviluppo agile è costruire "sezioni verticali". Raccolgo una storia dall'interfaccia utente per conservarla e implementarla. Ho alcuni strumenti leggeri che uso per aiutare questo processo (come un semplice framework IRepository / UnitOfWork con adattatori per In Memory (di solito per test), Entity Framework e NHibernate. A questo punto non penso ci sia molto di un argomentazione sull'opportunità o meno di utilizzare un O / RM ma piuttosto quale usare. E per me dipende dall'ambiente.
Ho scoperto che questo approccio conquista gli oppositori per quanto riguarda lo sviluppo agile perché riescono a vedere il software di lavoro più rapidamente rispetto a quando spendo un sacco di tempo per creare un core. In combinazione con Domain Driven Design e alcune altre tecniche che uso, di solito sono in grado di ottenere molte funzionalità di lavoro di fronte agli utenti molto rapidamente.
Il TDD o anche il collaudo post-hoc delle unità è importante perché parte del mantenimento della velocità man mano che la tua applicazione cresce sta avendo quella rete di sicurezza fornita da una suite di test unitaria completa. "Ho bisogno di fare un cambiamento in questa classe, come faccio ad essere sicuro di non aver infranto nulla?" Con una buona suite di test unitari, è semplice come eseguire quella suite di test. Senza, diventa questione di eseguire manualmente la tua app per verificare. Non è affatto divertente.