Faccio parte di un team di progetto composto da 4 sviluppatori, me compreso. Abbiamo discusso a lungo su come gestire il lavoro extra che si presenta nel corso di un singolo oggetto di lavoro.
Questo lavoro extra di solito è qualcosa che è leggermente correlato all'attività, ma non è sempre necessario per raggiungere l'obiettivo dell'oggetto (che può essere un'opinione). Gli esempi includono ma non sono limitati a:
- refactoring del codice modificato dall'elemento di lavoro
- codice di refactoring vicino al codice modificato dall'elemento
- riprogettare l'area di codice più ampia attorno al ticket. Ad esempio, se un elemento ti sta modificando una singola funzione, ti rendi conto che l'intera classe ora potrebbe essere rifatta per adattarsi meglio a questa modifica.
- migliorare l'interfaccia utente su un modulo appena modificato
Quando questo lavoro extra è piccolo non ci dispiace. Il problema è quando questo lavoro extra provoca un'estensione sostanziale dell'articolo oltre la stima del punto di funzionalità originale. A volte un oggetto a 5 punti impiegherà effettivamente 13 punti di tempo. In un caso avevamo un oggetto di 13 punti che in retrospettiva avrebbe potuto essere di 80 punti o più.
Ci sono due opzioni in giro nella nostra discussione su come gestirlo.
Possiamo accettare il lavoro extra nello stesso oggetto di lavoro e scriverlo come una stima errata. Gli argomenti per questo hanno incluso:
- Abbiamo in programma "imbottitura" alla fine dello sprint per tenere conto di questo genere di cose.
- Lascia sempre il codice in una forma migliore di quello che hai trovato. Non fare il check in a metà lavoro.
- Se lasciamo il refactoring per dopo, è difficile da pianificare e potrebbe non essere mai fatto.
- Sei nel miglior "contesto" mentale per gestire questo lavoro adesso, poiché sei già nel profondo del codice. Meglio toglierlo di mezzo ora ed essere più efficienti che perdere quel contesto quando torni più tardi.
Tracciamo una linea per l'oggetto di lavoro corrente e diciamo che il lavoro extra va in un biglietto separato. Gli argomenti includono:
- Avere un biglietto separato consente una nuova stima, quindi non stiamo mentendo a noi stessi su quanti punti sono realmente le cose, o dobbiamo ammettere che tutte le nostre stime sono terribili.
- La "imbottitura" sprint è pensata per sfide tecniche inaspettate che sono barriere dirette al completamento dei requisiti del biglietto. Non è destinato agli oggetti secondari che sono solo "simpatici".
- Se si desidera pianificare il refactoring, basta inserirlo nella parte superiore del backlog.
- Non c'è modo per noi di spiegare correttamente queste cose in una stima, dal momento che sembra un po 'arbitrario quando si presenta. Un revisore del codice potrebbe dire "quei controlli dell'interfaccia utente (che in realtà non hai modificato in questo oggetto di lavoro) sono un po 'confusi, puoi risolvere anche questo?" che è come un'ora, ma potrebbero dire "Bene, se questo controllo ora eredita dalla stessa classe base degli altri, perché non spostare tutto questo (centinaia di righe di) codice nella base e ricablare tutta questa roba , i cambiamenti a cascata, ecc.? " E ci vuole una settimana.
- "Contamina la scena del crimine" aggiungendo lavoro non correlato al ticket, rendendo insignificanti le stime dei nostri punti di funzionalità originali.
- In alcuni casi, il lavoro extra rimanda un check-in, causando il blocco tra gli sviluppatori.
Alcuni di noi stanno ora dicendo che dovremmo decidere di tagliarli, come se la roba aggiuntiva sia inferiore a 2 FP, va nello stesso biglietto, se è di più, lo rende un nuovo biglietto.
Dato che impieghiamo solo pochi mesi ad usare Agile, qual è l'opinione di tutti i veterani Agile più esperti qui su come gestirlo?