Come misurare la produttività nello sviluppo software

metriche per misurare produttività softwareLe aziende che vogliono sviluppare software che soddisfi le esigenze dei clienti e che venga rilasciato in modo efficiente rispettando i tempi e costi concordati hanno bisogno di definire al loro interno le metriche con cui misurare la produttività dei team di sviluppo.

Applicando tali metriche a diverse aree è possibile identificare dove è necessario intervenire per migliorare alcuni parametri come, ad esempio, il lead-to-market.

Se dotato di dati pertinenti, il management può identificare tempestivamente ed efficacemente i colli di bottiglia presenti nei progetti; ridurre i rischi ed eliminare gli inconvenienti.

Numerosi studi hanno dimostrato che più tempo ci vuole per scoprire un errore nel codice, più costoso sarà risolverlo.

Le misurazioni aiutano anche a individuare requisiti di progetto poco chiari o contrastanti e a comprendere come offrire ancora più valore all’utente finale.

I numeri relativi al tempo di uptime, alla disponibilità del servizio, all’adesione al budget sono importanti, ma non riescono a raccontare la storia completa delle prestazioni del team di progettazione e dell’integrità del prodotto.

Una metrica rappresenta un’area potenziale in cui la misurazione può essere efficacemente applicata a un determinato modulo software o alle sue specifiche.

In altre parole, una metrica presuppone che alcuni dati vengano estratti dal ciclo di vita dello sviluppo dell’applicazione e che vengano utilizzati per misurare la produttività degli sviluppatori di software.

La produttività nello sviluppo software può essere definita come il rapporto tra i valori funzionali del software prodotto (misurati, ad esempio, in function points) rispetto agli sforzi e alle spese necessarie per lo sviluppo.

Tipologia di metriche

Per misurare la produttività i manager possono utilizzare due tipi di metriche :

  • Metriche relative alle dimensioni dei risultati di un’attività. Ad esempio, le righe di codice sorgente prodotto.
  • Metriche relative alle funzionalità sviluppate durante un determinato periodo di tempo. I function points ed application points sono le metriche più comunemente utilizzate per lo sviluppo di software waterfall, mentre gli story points sono la metrica abituale per i progetti agili.

Le misure di produttività che si sceglie di tracciare dovrebbero essere:

  • Coerenti: descritte in modo chiaro affinché i valori misurati abbiano un significato immediatamente riconoscibile.
  • Verificabili: in modo che un auditor esterno al team possa assicurarne l’affidabilità.
  • Disponibili: in modo da poterle utilizzare per il benchmarking.
  • Ripetibili: in modo da assicurarne la consistenza..

Considerando che il team di sviluppo deve essere in grado di comprendere i criteri di monitoraggio e controllo, è opportuno utilizzare metriche facili da ottenere e comunicare.

Non è quindi opportuno tenere traccia di tutte le possibili metriche di sviluppo software ma è sufficiente individuare quelle che favoriscano il miglioramento delle prestazioni del team.

Come misurare la produttività del delivery

scrum sprint burndown chart

  • Tempo di ciclo indica il tempo totale che trascorre dal momento in cui il lavoro viene avviato su un determinato item (ad es. Ticket, bug, attività di sviluppo) fino al suo completamento.
  • Sprint Burndown è una delle metriche chiave nella gestione agile dei progetti di sviluppo software. Un rapporto di burndown comunica l’andamento del lavoro durante uno sprint. L’obiettivo del team è quello di consegnare regolarmente il lavoro. Tracciando questa metrica è possibile ottenere informazioni importanti:
    • il completamento prematuro di uno sprint può indicare la mancanza di lavoro programmato per lo sprint;
    • al contrario, le scadenze per gli sprint costantemente perse possono indicare una lacuna nella pianificazione e il fatto che al team viene chiesto di consegnare troppo lavoro;
    • il rapporto dovrebbe presentare una graduale riduzione dei “valori rimanenti”, piuttosto che un calo drammatico in quanto quest’ultimo segnalerebbe che il lavoro non è stato assegnato in blocchi granulari.
  • Velocità del team rappresenta la “quantità” di software che il team completa durante uno sprint. Può essere misurata in function points o story points ed è possibile utilizzare questa metrica per la stima e la pianificazione dello sprint. Misurando la velocità è possibile
    • definire in modo migliore le previsioni di consegna;
    • scoprire se il team è bloccato (velocità di caduta);
    • individuare le sfide impreviste che non sono state prese in considerazione durante la pianificazione dello sprint;
    • verificare se i cambiamenti introdotti nel processo di lavoro producono i risultati voluti (velocità stabile / aumentata).
  • Produttività indica l’output totale di lavoro a valore aggiunto prodotto dal team. In genere è rappresentato dalle unità di lavoro che la squadra ha completato entro un determinato periodo di tempo. È necessario allineare la metrica della velocità effettiva agli obiettivi aziendali attuali. Se l’obiettivo è di rilasciare nuovi moduli privi di bug in un determinato sprint, occorre rivedere gran parte dei ticket dei difetti che vengono risolti e così via. La misurazione della produttività aiuta anche a:
    • Rilevare quando il team viene bloccato quando la metrica della velocità effettiva diminuisce.
    • Capire quando il team è sovraccarico se si confronta il throughput medio con il carico di lavoro corrente.

Metriche per misurare la manutenibilità del software

  • Tempo medio di consegna: il tempo che intercorre tra la definizione di una nuova funzionalità e la sua disponibilità per l’utente/cliente.
  • Tempo medio di riparazione (MTTR): la velocità con cui è possibile distribuire le correzioni al cliente.
  • Copertura del codice: la quantità di codice coperta da test.
  • Percentuale di bug: numero medio di bug generati quando vengono distribuite nuove funzionalità.

Inoltre, può essere opportuno raccogliere alcune statistiche sull’integrità delle applicazioni per ottenere maggiori informazioni sulla loro qualità. In particolare:

  • Conteggio degli errori
  • Utilizzo CPU / memoria
  • Tempi di risposta
  • Numero di transazioni
  • Spazio occupato su disco
  • Conteggio dei reclami