Software Project Estimation: Part 1

For a successful software project we first need to estimate the various resources that are required to complete the project. Effective software project estimation is an important activity in any software development project. One of the main reasons software programs fail is our inability to accurately estimate software size. Because we almost always estimate size too low, we do not adequately fund or allow enough time for development. Poor size estimates are usually at the heart of cost and schedule overruns.

Software size has a direct effect on overall development cost and schedule. Early significant deviations in software size data indicate problems such as:

  • Problems in the model(s), logic, and rationale used to develop the estimates,
  • Problems in requirements stability, design, coding, and process,
  • Unrealistic interpretation of original requirements and resource estimates to develop the system, and
  • Faulty software productivity rate estimates.

All estimates are made based upon some form of analogy: Historical Analogy, Expert Judgment, Models, and Rules-of-Thumb. The role these methods play in generating an estimate depends upon where one is in the overall life-cycle. Typically, estimates are made using a combination of these four methods.

Software Project Estimation:

Project Estimation Process:


Step 1: Gather and Analyze Software Functional & Programmatic Requirements

In this step we Analyze and refine software requirements, software architecture, and programmatic constraints.

Responsible persons:
Software manager, system engineers, and cognizant engineers.

The Output of step1:
  • Technical and programmatic constraints and requirements.
  • Assumptions made about the constraints and requirements.
  • Methods used to refine the software functional requirements.
  • Refined software functional requirements.
  • Software architecture hierarchy of segments and associated functions.

Step 2: Define the Work Elements and Procurements

The purpose of this step is to define the work elements and procurements for the software project that will be included in the software estimate.

Responsible Persons:
Software manager, system engineers, and cognizant engineers.

The Output of step2:
  • Assumptions about the work elements and procurements.
  • List of procurements.
  • Project-specific product-based software WBS including attributes of the work elements.
  • Risk List.

Below are 4 major steps (from Step 3 to Step 6) that play an important role in the estimation of the software project:


Step 3: Estimating the size of the project

Estimating the size of the software to be developed is the very first step to make an effective estimation of the project. A customer's requirements and system specification forms a baseline for estimating the size of a software. At a later stage of the project, a system design document can provide additional details for estimating the overall size of software.
  • The ways to estimate project size can be through past data from an earlier developed system. This is called estimation by analogy.
  • The other way of estimation is through product feature/functionality. The system is divided into several subsystems depending on functionality, and the size of each subsystem is calculated.
Responsible Persons: Software manager, cognizant engineers.

The outputs of step3:
  • Methods used to estimate software size.
  • Assumptions made in order to estimate software size.
  • Software size estimates for each function and software heritage category in logical SLOC.
  • Total software size estimate in logical SLOC.

Step 4: Estimating the Effort

When we are finished with the size estimation process, the next step is to estimate the effort based on the size. The estimation of effort can be made from the organisational specifics of the software development life cycle. The development of any application software system is more than just coding of the system. Depending on deliverable requirements, the estimation of effort for project will vary. Efforts are estimated in the number of man-months:
  • The best way to estimate effort is based on the organisation's own historical data of development process. Organizations follow similar development life cycle for developing various applications.
  • If the project is of a different nature which requires the organisation to adopt a different strategy for development then different models based on algorithmic approach can be devised to estimate effort.

Responsible persons: Software manager, cognizant engineers, and software estimators.

The output of step4:
  • Assumptions made in order to estimate Software Development Effort including heritage.
  • Methods used to estimate Software Development Effort.
  • Software Development Effort of each function adjusted for heritage in work-months.
  • Total Software Development Effort in work-months.

Step 5: Estimating Schedule

After estimating the efforts, estimating the project schedule from the effort estimated is the next step in the estimation process. The schedule for a project will generally depend on human resources involved in a process. Efforts in man-months are translated to calendar months.

Schedule in calendar months = 3.0 * (man-months) 1/3

The parameter 3.0 is variable, used depending on the situation which works best for the organisation.

Responsible Persons:
Software manager, cognizant engineers, and software estimators.

The outputs of step 5 are:
  • Assumptions made to estimate schedule.
  • Schedule including all work elements of the WBS, milestones, and reviews.
  • Revised estimates and assumptions made to revise estimate.

Step 6: Estimating the cost

To estimate the total cost of the software project is the purpose of this step. The cost of a project is derived not only from the estimates of effort and size but from other parameters such as hardware, travel expenses, telecommunication costs, training cost etc. should also be taken into account.

Cost estimation Process:


How to Estimate the total cost:
  1. Determine the cost of procurements:

    • Determine the cost of support and services, such as workstations, test-bed boards and simulators, ground support equipment, and network and phone charges.

    • Determine the cost of software procurements such as operating systems, compilers, licenses, and development tools.

    •   Determine the cost of travel and trips related to customer reviews and interfaces, vendor visits, plus attendance at project-related conferences.
  2. Determine the cost of training planned for the software project.
  3. Determine the salary and skill level of the labor force.
  4. Input the effort, salary levels, and cost of procurements into an institutionally supported budgeting tool to determine overall cost. All estimates should be integrated with all rates and factors, institutional standard inflation rates, and median salaries.
  5. As with scheduling, inconsistencies and holes in the estimates may appear while calculating the cost. This is especially true when trying to fit the cost into the budget imposed on the software project. As a result, it may be necessary to reiterate the estimates of other steps several times, reduce the effort and procurements, or assume more risk to fit into the imposed budget. If the schedule becomes extended, costs will rise because effort moves out to more expensive years. See later steps for reviewing estimates versus budgets and schedule.

Responsible Persons: Software manager, cognizant engineers, and software estimators.

The outputs of step 6 are:
  • Assumptions made to estimate cost.
  • Methods used to estimate cost.
  • Cost of procurements.
  • Itemized cost estimates by WBS elements (in dollars).
  • Total cost estimate (in dollars).

                                                                                                                                                                                                           Continue to Part 2