Software projects are time-limited processes in which a software product is created. When running such projects, it is necessary to include estimation techniques, which are an important and unavoidable part of the project.
Estimation is the process of finding an estimate, or approximation; a value that can be used for some purpose even if the input data is incomplete, uncertain, or unstable. An estimation can determine how much money, resources, effort, and time is required for building a specific system or product.
Estimation can be based on:
- Past data/experiences
- Available documents/knowledge
- Identified risks
These are the main steps when estimating a software project:
- Estimation of the size of the developed product
- Estimation of the work in months or work-hours
- Estimation of the schedule in calendar months
- Estimation of the project cost in the agreed currency
Observing an Estimation
Estimation doesn't need to be a one-time task in a project. It can take place during acquiring a project, during project planning, during the execution of the project or whenever the need arises. The scope of the project should be considered before estimation begins. Any historical data about the project can prove useful because the estimation process will be sped up, facilitated, and overall more accurate.
Metrics of the project can offer a historical perspective – they are valuable for generating quantitative estimates. Planning requires the technical managers and the software team to make an initial commitment as it leads to responsibility and accountability. Past experiences can be of great value. It is important to use at least two types of estimation techniques so that the gained values could be adjusted and compared.
Approach to General Estimation of a Project
The decomposition technique is most frequently used when estimating projects. Decomposition techniques use the divide and conquer approach. Estimating size, effort, and cost is performed in a stepwise manner by breaking down a project into the main functions or related software engineering activities.
It is performed in five steps:
Step one: Understand the scope of the software that is going to be built
Step two: Estimate the size of the software
Step three: Generate estimates of effort and cost
Step four: Compare estimates
Step five: Determine causes of divergences between the estimates and reconcile the estimates
Accuracy of an Estimation
Accuracy is an indicator of how close something is to reality. Whenever an estimation is generated, it is necessary to know how close the numbers are to reality. It should be strived for each estimation to be as accurate as it can possibly be, considering the data available at the time of the estimation’s creation. And of course, you don't want to show an estimation that instills a false sense of confidence in the numbers.
Important factors that affect the accuracy of estimations are as follows:
- Accuracy of all input data of an estimation
- Accuracy of all calculations of every estimation
- How closely the historical data or the industry data used to calibrate the model matches the project you are estimating
- Predictability of a software development process inside an organization
- Stability of product requirements and an environment that supports work in software engineering
- Whether the project is carefully planned, monitored, and controlled, whether there were big surprises that caused unexpected delays, etc.
Some guidelines that can make the estimation more accurate:
- Base estimates on similar projects that have finished
- Using relatively simple decomposition techniques for generating cost estimates for the project and work
- Using one or more models for software cost and effort estimation
To assure accuracy, it is always useful to use at least two estimation techniques and compare the results.