"il software è fatto quando è fatto, non prima, non più tardi."
Questo è vero, ma per ogni attività su cui i tuoi sviluppatori iniziano a lavorare, tutti nella tua organizzazione comprendono la Definizione di Fine per ogni attività?
Sembra che uno dei tuoi maggiori problemi sia la stima , ma gli sviluppatori possono fornire una stima realistica solo quando hanno una "definizione del fatto" chiara e chiara. (Che include problemi relativi ai processi aziendali, ad esempio documentazione per l'utente, pacchetti di lavoro su una versione formale, ecc.)
Non sorprende che l'eccessiva stima stia causando un problema, dato che la maggior parte degli sviluppatori vede che stimare il tempo necessario per completare un'attività è il più difficile che venga loro richiesto.
Tuttavia, la maggior parte degli sviluppatori tende ad avere una ragionevole (sebbene ottimistica ) gestione della quantità di sforzo che sono in grado di fare, per un determinato periodo di tempo.
Il problema è spesso che gli sviluppatori hanno difficoltà a creare una relazione tra un'attività e la quantità totale di sforzo richiesto quando hanno a che fare con informazioni incomplete, in particolare se sono spinti a fornire tutte le risposte in anticipo a un compito davvero enorme .
Ciò porta naturalmente a stime del tempo disconnesse dalla realtà e perdono di vista cose come il processo di compilazione e la documentazione per l'utente.
La disconnessione tende a iniziare all'inizio quando viene descritta l'attività; ed è solitamente composto da una persona non tecnica che redige un elenco di requisiti senza avere la minima idea dello sforzo necessario.
A volte le persone nel senior management specificano le attività e ignorano completamente i problemi dei processi aziendali; non è raro che il senior management pensi che cose come la definizione di test, la creazione di una build ufficiale rilasciata o l'aggiornamento di un documento utente avvengano magicamente senza tempo o fatica. necessario.
A volte i progetti falliscono prima che uno sviluppatore abbia persino scritto una riga di codice perché qualcuno, da qualche parte non sta facendo il proprio lavoro correttamente.
Se il team di sviluppo non è coinvolto nel concordare i requisiti o nel catturare i criteri di accettazione, allora questo è un fallimento della gestione, perché significa che qualcuno che ha una comprensione insufficiente del codice e dei problemi tecnici ha impegnato l'azienda a un insieme incompleto di requisiti, e ha lasciato il progetto aperto a interpretazioni errate, creep di portata, dorature, ecc.
Se il team di sviluppo è coinvolto nell'acquisizione e nel concordare i requisiti, potrebbe trattarsi di un fallimento del team, che è responsabile della chiarificazione dei dettagli (e dei criteri di accettazione - ovvero "Che aspetto ha il deliverable? Quando viene fatto ?" ). Il team di sviluppo è anche responsabile di dire NO quando ci sono altri problemi di blocco o se un requisito non è realistico.
Quindi, se gli sviluppatori sono coinvolti nell'acquisizione dei requisiti:
- Il team ha l'opportunità di sedersi con il product manager per chiarire i requisiti / la definizione di done?
- Il team pone domande sufficienti per chiarire i requisiti impliciti / presunti? Ogni quanto viene data una risposta soddisfacente a queste domande?
- Il team richiede criteri di accettazione (definizione di done) prima di fornire un preventivo?
- In che misura vengono generalmente acquisiti i criteri di accettazione per ciascuna attività? È un documento vago con dettagli sparsi o descrive funzionalità tangibili e una formulazione che uno sviluppatore potrebbe tradurre inequivocabilmente in un test?
È probabile che la produttività della tua squadra non sia un problema; la tua squadra probabilmente sta facendo tutto lo sforzo che è in grado di fare per quanto riguarda lo sviluppo. I tuoi veri problemi potrebbero essere uno o più dei seguenti:
- Requisiti incompleti e vaghi.
- Requisiti / compiti che sono troppo grandi in primo luogo.
- Scarsa comunicazione tra il team di sviluppo e la direzione.
- Mancanza di criteri di accettazione chiaramente definiti prima che i compiti vengano consegnati al team.
- Specifica incompleta o vaga / ambigua dei test di collaudo. (ovvero definizione di fatto)
- Tempo insufficiente assegnato alla definizione / approvazione dei criteri di accettazione.
- Gli sviluppatori non hanno considerato il tempo per testare il codice di base esistente o correggere i bug esistenti
- Gli sviluppatori hanno testato il codice di base esistente ma non hanno sollevato i bug come Problemi di blocco prima di fornire stime sui requisiti
- La direzione ha riscontrato i problemi / i bug e ha deciso che non è necessario correggere i bug prima di scrivere un nuovo codice.
- Gli sviluppatori sono sotto pressione per rappresentare il 100% del loro tempo, anche se probabilmente il 20% (o un numero simile) del loro tempo è probabilmente occupato da riunioni, distrazioni, e-mail, ecc.
- Le stime sono concordate al valore nominale e nessuno regola spazio per errori o imprevisti (ad esempio "Abbiamo deciso che questo dovrebbe richiedere 5 giorni, quindi ci aspettiamo che sia fatto in 8.").
- Le stime sono trattate da tutti (sviluppatori e dirigenti) come numeri singoli anziché numeri "a intervallo" realistici, ad es
- Migliore stima del caso
- Stima realistica
- Stima peggiore
... l'elenco potrebbe andare molto più a lungo di così.
Devi fare qualche "accertamento dei fatti" e capire esattamente perché le stime sono costantemente disconnesse dalla realtà. Il software di base esistente è difettoso? Manca la copertura del test unitario? I tuoi sviluppatori evitano la comunicazione con il management? Il management evita la comunicazione con gli sviluppatori? Esiste una disconnessione tra le aspettative di gestione e le aspettative degli sviluppatori quando si tratta di "Definition of Done" ?