Software effort estimation techniques predict a realistic amount of effort required in terms of time (person-hours or person-days) that would be required to develop or maintain software. The estimate is called so since it is typically based on incomplete inputs (requirements). The estimate is used as an input to put together Project Plans, Development Budgets, etc.
If you look into historical data, you may notice that estimates are imprecise but over a period of time as one gains experience in the domain and technology being used, the estimates typically get more accurate.
Whenever estimates are put together, we must communicate with relevant stakeholders about the assumptions that were made. This helps improve the estimates in an iterative manner.
Estimate of What?
Estimates should capture the following:
- Resources: How many resources (Developers, Testers, Analysts, etc.) would the project require and when?
- Time: How long would the project take to complete?
- Cost: What would be the cost of completing the project
- Skills: For each of the resources what would be the skills required
There are various techniques that can be used for doing this estimation exercise. These have been listed below. Each of the estimation techniques will be explained in detail in subsequent articles.
Note: As and when those articles are ready, each of the techniques below will be linked to it.
- Analogy-based Estimation (Rough order of Magnitude)
- Expert Estimation
- Work Breakdown Structure
- Function Point Analysis
- Use Case Analysis
- Story Point Analysis
- Constructive Cost Model (COCOMO)
- Planning Poker
- Wideband Delphi
I am certain there are other techniques used out there. Only a few are popular nowadays and there are tools available for some to simplify their usage. For instance, Planning Poker is a popular technique for Agile projects and there are both poker cards and websites available as aids in the estimation process.
Image Credit: Featured