Sono convinto che la quantità di lavoro di routine nello sviluppo del software sia - e dovrebbe essere - relativamente piccola, se non trascurabile, e che questo sia il problema fondamentale della stima del software.
Consentitemi di descrivere come giungo a questa conclusione e di dirmi se l'argomentazione presenta qualche grave difetto:
Tutto ciò che può essere stimato con elevata precisione è un lavoro di routine, ovvero cose che sono state fatte in precedenza. Tutti gli altri tipi di lavoro che coinvolgono la ricerca e la creatività non possono davvero essere stimati, almeno non con un'accuratezza, diciamo, del +/- 20 percento.
Lo sviluppo del software consiste nell'evitare attività ripetitive. Uno dei suoi principi di base è DRY (non ripeterti). Ogni volta che un programmatore si trova a fare cose ripetitive, è tempo di trovare un'astrazione che eviti questa ripetizione. Queste astrazioni possono essere cose semplici come estrarre il codice ripetuto in una funzione o metterlo in un ciclo. Possono anche essere più complessi come la creazione di una lingua specifica del dominio. In ogni caso, la loro attuazione comporterà ricerca (qualcuno l'ha mai fatto prima?) O creatività.
Da questi due punti traggo la conclusione di cui sopra.
In realtà da un po 'mi chiedo perché questa relazione non sia menzionata in ogni altra discussione, post di blog o articolo sulla stima del software. È troppo teorico? I miei presupposti sono sbagliati? O è troppo banale, ma allora perché la maggior parte degli sviluppatori che conosco credono di poter fare stime con una precisione del +/- 20 percento o migliore?