Come prevedere il tempo necessario per completare un'attività?

3

Ci sono tre scenari in cui mi viene chiesto di prevedere quanto tempo ci vorrà:

  1. I know I can solve the problem without further consultation of anything (that is, there is no unknown in the problem. I already have all the knowledge to solve the problem)
  2. I know the problem can be solved but I need to do a lot of experimentation to see how things work (for example, you may know a car tire is easy to change, but if you have never changed it, you may run into issues that you will avoid/correct the next time around, thus making your prediction of how long it will take, better... yes, this I know is one of the answers to my question here... experience)
  3. I am told the problem can be solved, but I have no idea where to begin so I start breaking it down into small pieces and go to Step 2 (where I know it can be solved, but needs experimentation)

In genere sono pessimo nel predire quanto a lungo ci vorrà qualcosa anche se ho già fatto qualcosa di simile prima. Mi imbatto sempre in un intoppo che non avevo previsto. La mia domanda è principalmente rivolta al Punto 1 e piuttosto al Punto 2 (al Punto 3, so che le mie previsioni saranno sempre sbagliate). So che richiede esperienza, che mi consentirà di fare delle buone previsioni ma che ha di essere alcune regole di base che posso seguire per iniziare a fare previsioni un po 'accurate. In questo momento sento che non sarò mai in grado di fare delle buone previsioni, non importa quanta esperienza guadagni. Una regola che ho sentito è qualcosa sulla falsariga di predict how long it will take, then multiply it by 2, then add two more weeks (più di uno scherzo ... o forse no?)

Ora so che prevedere il tempo impiegato da un compito è un problema generale nel settore, ma le persone continuano a prevedere in una certa misura e non possono sempre essere sbagliati (in particolare su attività più piccole). Nel mio caso, se qualcuno mi dice How long do you think a linked list with these features will take? , darò una previsione sbagliata anche se so come crearne uno senza consultare alcun corpo / libro.

So my request is to SO (especially veterans in the industry) is to give me (us) pointers on how to get better at predicting how long a task will take.

Sfondo

Sono attualmente uno studente dei Master che lavora in un'azienda. Sono molto giovane in termini di esperienza nel settore ed esperienza in generale. Sto leggendo molti libri su una migliore programmazione, design ecc. (La maggior parte di loro è stata consigliata qui in SO) e la mia conoscenza della programmazione è sempre più grande grazie al lavoro / scuola e SO; ma naturalmente, ci sono letteralmente tonnellate più che ho bisogno di assorbire.

    
posta Samaursa 17.06.2011 - 16:18
fonte

4 risposte

7

Ho ottenuto il maggior successo con Pianificazione basata sull'evidenza .

Per farla breve, hai diviso l'attività, scrivi per quanto tempo pensi che ci vorrà per completare ogni attività (comprese interruzioni come pause caffè, boss che ti assillano, StarCraft, ecc.), e poi tempo per quanto tempo in realtà ti porta a completare alcuni di questi compiti. È importante essere schietti e includere tutte le tue distrazioni - perché è parte della vita come sviluppatore, ed è un fattore realistico che influenza il tempo necessario per finire il tuo lavoro.

Quindi puoi moltiplicare il tempo stimato medio-reale rispetto al tempo stimato delle attività rimanenti, oppure puoi prendere il fattore di errore delle tue stime per eseguire un Simulazione Monte Carlo e determinare la probabilità che le attività vengano eseguite in qualsiasi data specifica.

Il risultato finale è un grafico che assomiglia al primo di quel collegamento, dove l'asse X è la data di fine e l'asse Y è la probabilità che sia finito:

(Tratto da joelonsoftware.com)

    
risposta data 17.06.2011 - 19:33
fonte
3

. Impara il tuo fattore di errore. Se il tuo sentimento ti dice "2 ore" ma ne occorrono sei, la prossima volta fai una valutazione ufficiale.

. Aspettatevi sempre che le interruzioni ecc. Porteranno via una parte del vostro tempo di lavoro, ma nessuno vi consente di caricare un altro progetto. Includi un markup per questo nel tuo preventivo.

. Ricorda che il divario tra "fatto" e "fatto veramente" può essere enorme. La pulizia, il debugging dei casi d'angolo, la corretta gestione degli errori, ecc. Possono richiedere molto tempo e devono essere inclusi nella stima.

    
risposta data 17.06.2011 - 19:27
fonte
0

La risposta richiede un'altra informazione: hai già fatto ciò che è stato chiesto prima?

  1. se sì, quindi stimare il tempo reale necessario prima;
  2. se no, non puoi

Qui, 2. significa che, se puoi, dovresti fare un prototipo prima di poter dare un preventivo. Se non puoi prototipare (perché non ti è permesso di spendere il tuo tempo per la prototipazione, ad esempio), non puoi semplicemente stimare con precisione.

Si noti inoltre che anche con 1., raramente è necessario scrivere di nuovo qualcosa con lo stesso ambiente software o linguaggio di programmazione, il che significa che anche 1. la stima sarà errata. Ma è sicuramente il meglio che puoi fare.

Inoltre, leggi il capitolo di "The Pragmatic Programmer" sull'argomento.

    
risposta data 17.06.2011 - 19:32
fonte
0

Uno dei migliori meccanismi che ho trovato - sebbene implichi molto lavoro! - Sta costruendo un database delle tue performance passate. Un'opzione è il processo di personal software di CMU Software Engineering Institute. La PSP si trova di solito in un pacchetto con il Team Software Process ; PSP è la parte individuale, TSP il tutto.

PSP coinvolge il monitoraggio estremamente dettagliato del tempo trascorso a progettare, codificare, compilare e testare (tutti separatamente), così come i difetti che si incontrano (anche solo errori e avvisi del compilatore). Sembra favorire leggermente le fasi indivisibili di design / code / compile / test, rispetto a una rapida iterazione attraverso tre o quattro di queste - anche se è un po 'adattabile nel tempo, vale la pena di andare con lo spirito della cosa almeno inizialmente per un mese o due .

PSP e TSP vengono solitamente insegnati da istruttori certificati (che costano un bel penny da assumere, potrei dire - abbastanza fortunati da lavorare in un'azienda che ha pagato per la formazione nonostante sia piccola). Dato che sei uno studente, puoi ottenere molto materiale gratuitamente attraverso Materiale PSP di auto-apprendimento .

Il Software Process Dashboard è un software gratuito che supporta il processo nel suo complesso.

Le persone di questa azienda che l'hanno utilizzata hanno segnalato miglioramenti definiti sia nella capacità di stimare che nella capacità di codificare senza creare difetti (errori del compilatore o bug di runtime).

Detto questo, il sovraccarico mentale era abbastanza alto che nessuno lo usa più. Alcuni dei principi hanno sicuramente portato avanti, comunque: lo userei ancora se non fossi più un "regista" di un programmatore in questi giorni.

    
risposta data 17.06.2011 - 19:33
fonte

Leggi altre domande sui tag