Come stimare un task e farselo amico
sabato, 21 novembre 2020Dieci consigli per migliorare il modo in cui valuti un'attività prima di iniziarla
Foto di Estée Janssens su Unsplash
Come sviluppatore vi sarà di certo capitato che vi abbiano domandato quanto tempo sarebbe occorso per completare un’attività. In alcuni casi sono i vostri responsabili a decidere direttamente il tempo richiesto per un’attività ma, presto o tardi, tutti gli sviluppatori affrontano la sfida di stimare il proprio lavoro. Ecco quindi alcuni consigli che ho raccolta dalla mia esperienza che spero possano esserti utili.
1. Non posticipare i problemi
Se il tuo responsabile ti chiede qualcosa tendenzialmente vuole una risposta esatta e preferisce non dover tornare spesso sullo stesso argomento. Prima di dare una risposta quindi è meglio se ti prendi il tempo necessario per ragionarci e per risolvere eventuali dubbi. Il tuo capo sarà contento che prendi seriamente la cosa e in futuro verrà disturbato solo per motivazioni davvero valide. Evita quindi di posticipare i problemi dicendo “A questo ci penserò dopo” perché per poter fare una buona stima è bene avere una visione completa dell’attività. E’ preferibile che tu dica per esempio “Vorrei guardare il codice prima di darti una stima” oppure “Ne vorrei prima parlare con un collega” piuttosto che dichiarare una stima troppo approssimativa; in questo caso puoi rassicurare chi ti ha richiesto la stima dandogli un tempo massimo entro il quale avrà una risposta (“ti faccio sapere entro massimo un’ora”).
2. Chiarisci gli obiettivi
Assicurati di aver capito che cosa ti stanno chiedendo: prima di dare qualunque risposta fai mente locale e chiediti se è tutto chiaro, non posticipare ad un secondo momento questo tipo di ragionamento. Se ne hai la possibilità, ripeti la sintesi di quello che hai capito a chi ti sta assegnando il task e controlla se vieni corretto.
3. Suddividi il task in attività più piccole
Questa pratica è particolarmente utile quando l’attività è particolarmente complessa o difficile da preventivare. Prova a suddividere i diversi passaggi che ti porteranno al risultato finale, scomponi le attività (documentazione, ricerca, debugging, sviluppo, …) necessarie, separa le funzionalità richieste. Continua questa scomposizione fino a che le attività non sono talmente semplici da riuscirne a misurare con una certa sicurezza la difficoltà e il tempo richiesto. Durante la discussione dell’attività con il tuo responsabile verifica se è possibile procedere a step anzi che lavorare fino al risultato finale. Poniamo il caso che ti è stato richiesto di trasformare un catalogo online già esistente in un e-commerce con carrello della spesa, registrazione e pagamenti. Essendo un’attività molto oneroso e con diverse variabili è facile che la tua stima iniziale non sarà precisa. Inoltre se lavorerai per giorni e giorni fino a terminare tutto il lavoro è probabile che alla consegna emergeranno diverse discrepanze rispetto a quello che è stato richiesta, sia per incomprensioni, sia per i “non detti” dati per sottintesi, sia perché nel tempo il tuo responsabile probabilmente cambierà alcune idee. Al termine del lavoro ti ritroverai quindi a dover riscrivere tantissimo codice per correggere incomprensioni e assecondare le nuove richieste. D’altra parte, se riesci a concordare di sviluppare una porzione alla volta, dopo alcuni giorni di sviluppo (per esempio del solo carrello della spesa) potrai richiedere subito un rapido feedback che farà emergere eventuali incongruenze (“Devo poter selezionare lo stesso prodotto per diverse taglie”) che ti richiederanno la correzione del codice scritto fino a quel momento.
4. Individua ostacoli e punti d’ombra
Prenditi del tempo anche per cercare di prevedere i possibili problemi (ho tutti i dati necessari? Il mio lavoro dipende anche da altre persone? C’è qualcosa che potrebbe richiedere creare problemi? I requisiti sono tutti espliciti o stiamo dando per scontato per esempio la compatibilità con i browser piuttosto che chi si occuperò dell’inserimento dei dati nel database?). Immaginati di iniziare ad organizzare il lavoro per vedere se emergono ulteriori dubbi: più il task è complicato e più ne sorgeranno durante il lavoro effettivo ma riuscire a prevederne il più possibile prima di iniziare ti aiuterà a impostare il lavoro meglio e prenderti il tempo necessario;
- considera gli imprevisti e i problemi non emersi (più è grossa l’attività e più è probabile che ce ne siano)
5. Mantieni un atteggiamento positivo ma non esporti
Il confronto con il cliente o il tuo capo non deve essere una battaglia: discutere animatamente non giova mai a nessuna delle due parti e coinvolgersi emotivamente non aiuta a ragionare con lucidità. Se però non ti vengono chiariti alcuni aspetti (perché considerati meno importanti o perché verranno chiariti in seguito) sii chiaro nel distinguere quello che puoi provare a stimare e quello che invece rimane non calcolato: “Penso di impiegare due settimane nella costruzione delle API ma fino a che non riceviamo la grafica non posso dirti quanto tempo richieda la realizzazione dell’interfaccia. Non potremmo chiedere di farci avere un prototipo o un wireframe? Vedere anche solo lo scheletro dell’interfaccia mi toglierebbe già diversi dubbi”. Cerca di essere sempre collaborativo e propositivo: proponendo ogni volta che è possibile una soluzione o un compromesso costruirai un rapporto di fiducia con chi stai collaborando che nel tempo avrà un grande ritorno.
6. Non contrattare sul tempo, discuti delle priorità
Quando le stime inizieranno a prendere forma il tuo responsabile potrebbe non accettarle perché ha necessità di concludere prima il lavoro. A questo punto potrebbe mettere in discussione la tua capacità di stimare le attività, oppure potrebbe chiederti di fare uno sforzo in più elogiando la tua capacità di lavorare sotto stress. Cerca di non cedere alla tentazione di assecondarlo: per quanto tu voglia il bene dell’azienda, se hai fatto bene la tua analisi, le tue stime non vanno messe in discussione (per quanto possano hanno per definizione un margine di errore): tu hai fatto il possibile per fare una stima precisa, accettare di lavorare più ore del dovuto piuttosto che sotto continuo stress mette a repentaglio sia la qualità del prodotto che stai realizzando che la qualità della tua vita. Per ovviare a questo problema prova invece a spostare la discussione sul piano delle priorità: è davvero tutto indispensabile? Serve tutto subito o qualcosa potrebbe essere aggiunto in seguito, fissando una seconda scadenza? C’è qualche aspetto tecnico che ti rallenta che potrebbe invece essere alleggerito (compatibilità con i device, gestione dei permessi, cura dell’interfaccia, …)?.
7. Dai una sbirciata al codice
Spesso l’attività è fondata su una codebase preesistente. In questi casi può essere molto utile individuare le parti di codice esistente che dovrai modificare e scorrere velocemente i file coinvolti alla ricerca di eventuali problemi non ancora considerati. Nel caso ci sia disponibilità potrebbe essere ancora più utile il confronto con un collega che ha lavorato in passato a quel codice perché probabilmente lui ha già in mente i diversi punti critici da tenere in considerazione.
8. Aggiungi alla stima un margine di sicurezza
Non dimenticarti che durante la giornata lavorativa ci sono diversi momenti che ti interrompono o distraggono dall’attività principale: partecipare a riunioni, aiutare un collega, rispondere a mail, messaggi e telefonate, e via dicendo. Le pause sono fondamentali per mantenere la mente concentrata fino a sera, inoltre è conveniente prenderti del tempo anche per progettare quello che stai per scrivere prima ancora di iniziare a creare del codice. Tutto questo concorre a ridurre le normali 8 ore lavorative ad una percentuale ridotta di lavoro effettivo. E’ tua responsabilità individuare le ore effettive di lavoro perché solo tu puoi sapere per quanto tempo riesci effettivamente a produrre. Una volta che quindi ti sei fatto un’idea del tempo impiegato in altre attività aggiungi una percentuale indicativa alla stima per coprire anche questo aspetto ed evitare che il tuo responsabile riceva una stima inesatta.
9. Verifica e impara dagli errori
A lavoro terminata ricordati di riprendere le stime che avevi fatto prima di partire: riconoscere le buone pratiche e gli errori commessi è preziosissimo per migliorarsi nel tempo. La volta successiva potrai riprovarci cercando di non ripetere gli stessi problemi e costruirai nel tempo il tuo metodo di valutazione.
10. Mantieniti in esercizio
Anche quando non ti è richiesto di raccogliere una valutazione delle tempistiche prima di iniziare un lavoro prova a spenderci qualche minuto. Oltre a dare una risposta più precisa al tuo responsabile, questa pratica è molto utile anche a te per impostare al meglio il lavoro e a darti delle indicazioni temporali che possono diventare dei campanelli di allarme utili a raddrizzare il tiro.
Approfondimenti
Se ti piace questo argomento o vuoi approfondire altri aspetti affini ti consiglio due libri che possono darti tantissimi spunti:
- “The Clean Coder” di Robert C. Martin
- “Scrum: The Art of Doing Twice the Work in Half the Time” di Jeff Sutherland