In software development, effort estimation is the process of predicting the most realistic amount of effort (expressed in terms of person-hours or money) required to develop or maintain software based on incomplete, uncertain and noisy input.
The early models were typically based on regression analysis or mathematically derived from theories from other domains.
They have their basis in estimation research conducted in the 1970s and 1980s and are since then updated with new calibration data, with the last major release being COCOMO II in the year 2000.
Alternative, competing or complementing, reasons include low cost control of project, high complexity of development work, and more delivered functionality than originally estimated.
[29] There are many psychological factors potentially explaining the strong tendency towards over-optimistic effort estimates.
Factors that have been demonstrated to be important are wishful thinking, anchoring, planning fallacy and cognitive dissonance.
[30] The chronic underestimation of development effort has led to the coinage and popularity of numerous humorous adages, such as ironically referring to a task as a "small matter of programming" (when much effort is likely required), and citing laws about underestimation: The first 90 percent of the code accounts for the first 90 percent of the development time.