Uso una metodologia agile (SCRUM) da circa tre anni e ne vedo alcuni vantaggi, in particolare nel feedback a breve termine a molti livelli (dai clienti che hanno accesso anticipato alle funzionalità implementate, dai tester che possono testare funzionalità come non appena vengono implementati, da altri sviluppatori che possono fornire feedback molto precoci sul nuovo codice tramite revisione, ecc.).
D'altra parte, ho due problemi aperti, il primo dei quali cercherò di spiegare in questa domanda.
Problema: difficoltà a ottenere un buon design
Provo a fare il refactoring non appena il codice diventa confuso, scrivo unit test quanto più possibile (il che aiuta a prevenire i bug in generale e quando refactoring in particolare). D'altra parte, sviluppare alcune funzionalità complesse in piccoli incrementi, con impegni quotidiani e ripensare continuamente il codice quando non è strutturato, non mi consente di produrre un design davvero buono.
L'unico modulo ben progettato che ho potuto produrre di recente ho ottenuto adottando un approccio diverso: ho analizzato il problema per alcuni giorni (in realtà avevo avuto il problema che mi passava per la testa per un paio di mesi prima di iniziare a lavorarci seriamente ), ha abbozzato un disegno piuttosto dettagliato di tutte le classi coinvolte e le loro relazioni per un altro paio di giorni, poi mi ha rinchiuso nel mio ufficio e ha scritto l'intero codice lavorando senza interruzioni per circa tre settimane. Il risultato è stato la cosa migliore che ho prodotto da un po 'di tempo, con pochissimi bug che sono stati piuttosto facili da individuare e correggere e con un design molto chiaro, che da allora non ha richiesto alcuna modifica rilevante.
Quindi fino ad ora ho trovato molto più efficace ottenere un quadro generale di ciò che voglio fare in anticipo rispetto a iniziare a scrivere codice con piccoli incrementi nella speranza che il quadro generale emerga magicamente nel processo. Con il mio massimo sforzo, l'approccio di sviluppo a piccoli incrementi mi ha sempre portato a progettare peggio.
Domanda : qualcuno ha avuto un'esperienza simile? Sto applicando SCRUM nel modo sbagliato o a cosa dovrei prestare attenzione se voglio svilupparmi in piccoli incrementi e finire ancora con un software ben progettato? O dovrei pianificare una storia utente di progettazione prima di iniziare la codifica effettiva? È considerata una buona pratica, almeno per le funzionalità più complesse della media?
MODIFICA - NOTA
Sono consapevole del fatto che un buon design non è qualcosa di assoluto e non ha un valore in sé, ma dipende dal contesto e che si dovrebbe mirare a un design che sia abbastanza buono per il problema in questione.
Ad esempio, non mi interessa (troppo) una buona progettazione se devo implementare un componente semplice che (1) deve essere pronto il prima possibile, (2) verrà utilizzato solo una volta, (3) non è utilizzato da altre parti del sistema (YAGNI).
Mi interessa la buona progettazione quando un componente (1) verrà utilizzato più volte e in diverse versioni di un prodotto, (2) deve essere mantenuto ed esteso nel tempo, (3) ha molti altri componenti a seconda di esso .
The only well-designed module I could produce recently I obtained by taking a different approach
- Hai risposto alla tua domanda. Hai ancora bisogno di un design iniziale; non puoi aspettarti che un buon design cresca semplicemente organicamente dal refactoring. Non funziona così.