Per capire perché le stime del software (basate sul tempo) sono difficili, dobbiamo riflettere sulla natura dello sviluppo del software.
La differenza tra le attività produttive e il lavoro di progettazione è probabilmente il concetto più importante che gli uomini d'affari hanno bisogno di capire. Durante l'era industriale c'era una netta distinzione tra design e produzione. Abbiamo progettato progetti che sono stati riprodotti in una fabbrica tutte le volte che volevamo.
Applichiamo lo stesso modello nelle nostre teste al processo di sviluppo del software, assumiamo che prima qualcuno debba progettare il prodotto dopo di che diverse persone lo producono. Una volta che inizi a pensare a quando il design fase finisce e quando inizia la produzione, ti rendi conto che questo non si applica allo sviluppo del software. Considera la seguente rappresentazione di un ciclo di sviluppo del prodotto:
... => design => (blueprint) => manufacture => (product) => ...
L'intuizione potrebbe dirti che si traduce in uno sviluppo software come questo:
... => design => (Interaction design deliverables) => manufacture => (Source Code) => ...
Mentre in realtà è più simile a questo:
... => design => (Source Code) => manufacture => (Software application) => ...
In altre parole: il codice sorgente è il design e non il prodotto! Il software di produzione è completamente automatizzato (compilando la fonte). Altri hanno spiegato meglio di me, ti consiglierei di leggere questo saggio di Jack Reeves: Cos'è il Software Design?
La differenza tra design e produzione non è solo concettuale e ha alcune implicazioni molto reali per il modo in cui gestiamo lo sviluppo del software. Il lavoro di progettazione è per sua natura altamente imprevedibile e dipende dalle persone, mentre la produzione è molto più prevedibile e dipende dalle risorse.
Da questa linea di pensiero segue che la variazione della produttività individuale tra gli sviluppatori è così alta che è impossibile prevedere quanto qualcuno può produrre in un certo periodo di tempo. Per ulteriori approfondimenti su questo, consulta il seguente saggio di Paul Graham: Come fare ricchezza.
Ci sono molte altre implicazioni del modo di pensare "design! = manufacturing". Un altro importante è il fatto che non hai mai deciso di progettare qualcosa che è già disponibile. Ciò aumenta la quantità di incertezza nel lavoro di sviluppo.
Combina questi con le molte ragioni per cui gli uomini d'affari costringono gli sviluppatori a stime più basse, oltre al fatto che le persone hanno difficoltà a stimare le misure assolute e tu hai ottenuto una stima per stime molto imprecise.
Se il tuo responsabile vendite ha ancora dubbi, questo articolo potrebbe chiarire:
Dita nell'aria: una delicata introduzione alla stima del software
...software development community has a very poor record in estimating anything—in fact is very common for projects to run over-time and over-budget, and deliver poor quality products with fewer features than originally planned.
Part of the problem is that software is quite difficult to estimate. In fact, huge differences in individual productivity, the fact that creative processes are difficult to plan, the fact that software is intangible, and the fact that during the life of the project anything can change - e.g., scope, budget, deadlines, and requirements—make software estimation a challenging task.
However, in my experience, the main cause of poor estimates is that the various stakeholders are often unaware of what estimates are for, and what they should look like. This lack of knowledge means that they have no way to judge if the project goals and the associated expectations are realistic. The result can be either overestimation which causes the allocation of an excess of resources to the project, or, more often, gross underestimation which often leads to "death march" projects [You], which are characterized by "project parameters" that exceed the norm by at least 50%, e.g.:
- The schedule has been compressed to less than half the amount estimated by a rational process
- The staff is less than half it should be in a project of the same size and scope
- The budget and resources are less than half they should be
- The features, functionality and other requirements are twice what they would be under normal circumstances
The rest of the article is an introduction to the software estimation process aimed at project managers, developers and customers who want to get a better understanding of the basics this subject, and avoid to make their projects a death march one...