Gestione di progetto
Progetto
Un progetto è un insieme di compiti da svolgere a fronte di un assignement. Alcune attività (intese come insiemi di compiti) possono essere svolte individualmente ma il progetto è sempre collaborativo. Tutti i compiti sono pianificati dall'inizio alla fine, secondo specifici obiettivi e vincoli; i vincoli sono dati dal tempo disponibile, le risorse utilizzabili e i risultati attesi.
Responsabile di progetto
La gestione di un progetto è compito del responsabile di progetto[1] e consiste di:
- istanziare processi nel progetto;
- stimare i costi e le risorse necessarie;
- pianificare le attività e assegnarle alle persone;
- controllare le attività e verificare i risultati.
Ruoli
Ogni persona, in un progetto, ha un ruolo (o funzione, in azienda[2]). Il ruolo può essere di quattro tipi:
- sviluppo (responsabilità tecnica e realizzativa);
- direzione (responsabilità decisionale);
- amministrazione (gestione dei processi);
- qualità (gestione della qualità).
Allocare le risorse per un progetto significa assegnare attività a ruoli e ruoli a persone.
Profilo professionale
Ogni persona ha un profilo professionale, cioè un insieme di competenze (tecnologiche e metodologiche) e un'esperienza (espressa in anni e partecipazione a progetti) che fanno da requisiti per l'assunzione di un ruolo in un progetto. Esistono vari profili professionali.
- Analista — a partire dal bisogno del cliente, individua il problema (di cui conosce il dominio) da fornire al progettista; solitamente non segue il progetto fino alla fine. In un certo senso, l'analista è la giuntura che collega gli utenti agli sviluppatori.
- Progettista — ha competenze tecniche e tecnologiche[3] aggiornate e ha vasta esperienza professionale; a partire dalle specifiche del problema fornitogli, sviluppa una soluzione e rimane finché la soluzione non è stata implementata; spesso si assume la responsabilità di gestione del progetto.
- Programmatore — implementa (una parte de) la soluzione del progettista; sta a lungo nel progetto poiché può essere coinvolto nella manutenzione. Ha competenze specifiche; visione e responsabilità circoscritte.
- Verificatore — verifica il lavoro prodotto dai programmatori.
- Responsabile di progetto — pianifica il progetto, assegna le persone ai ruoli giusti e rappresenta il progetto presso il fornitore e il committente.
- Amministratore di progetto — ruolo "orizzontale": deve controllare che ad ogni istante della vita del progetto le risorse (umane, materiali, economiche e strutturali) siano presenti e operanti; inoltre, gestisce la documentazione e controlla il versionamento e la configurazione.
- Controllore della qualità — funzione aziendale (e non ruolo di progetto) che accerta la qualità dei prodotti.
Pianificazione di progetto
Il ruolo più importante del responsabile di progetto è quello di pianificare. La pianificazione è l'identificazione del da farsi e di come farlo. È bene notare come lo stato di avanzamento di un prodotto sia rilevante solo se dà informazioni sulla pianificazione. Tre strumenti notevoli per la pianificazione di un progetto sono:
- I diagrammi WBS (Work Breakdown Structure) decompongono, in modo gerarchico, le attività in sottoattività; pur essendo fortemente coese, le sottoattività non sono necessariamente sequenziali.
- I diagrammi di Gantt sono ideali per rappresentare la durata, la sequenzialità e il parallelismo; si possono confrontare facilmente le stime con i progressi effettivi. Tuttavia, non sono particolarmente adatti per rappresentare le dipendenze tra attività.
- I diagrammi PERT (Project Evaluation and Review Technique) unificano le due tecniche precedenti e sono ideali per rappresentare le dipendenze temporali (e le criticità[4]) tra attività e, quindi, per ragionare sulle scadenze del progetto. Un tale diagramma è un grafo orientato dove gli archi rappresentano le attività, mentre i nodi sono degli eventi. Ogni evento ha una data minima a partire da cui può accadere e una data massima oltre la quale esso ritarda gli eventi successivi; la differenza tra questi due tempi è detta slack time[5].
Il primo passo da fare nel gestire un progetto dovrebbe essere la selezione di un modello di ciclo di vita per lo sviluppo del prodotto.
Stima dei costi di progetto
Un'altro compito importante del responsabile di progetto è quello di stimarne i costi. In particolare, il responsabile deve stimare il tempo/persona[6], unità di misura delle risorse umane. In questo, utile caveat è la legge di Parkinson, una critica alla regolamentazione fine a se stessa: Work expands to fill the time available
. Uno strumento per la stima del tempo/persona è CoCoMo (Constructive Cost Model), una funzione matematica che produce in uscita un valore in tempo/persona e prende in ingresso alcuni parametri relativi al progetto; tale funzione matematica è x = C ⋅ DS ⋅ M, dove x è misurato in mesi-persona e i parametri sono:
- fattore di complessità del progetto C;
- misura in KDSI[7] della dimensione stimata del prodotto software D;
- fattore di complessità S;
- moltiplicatori di costo M.
Rischi di progetto
I risultati di un progetto software possono portare costi eccessivi, non rispettare le scadenze o risultare insoddisfacenti. Un buon metodo per gestire i rischi è il seguente:
- identificazione dei rischi;
- analisi dei rischi (per ordinarli secondo una priorità);
- pianificazione di come evitare i rischi;
- monitoraggio dei rischi e, eventualmente, ritorno al punto 2 per aggiornare le strategie.