Cost Estimation

Time is money, i.e. elapsed time in weeks or months, and development effort in person-months. When multiplied by the weighted average cost of a software engineer to give overall cost. The cost of a person is 2-3 times their salary, when benefits and overhead are factored in.

Cost estimation is "notoriously difficult"

Principles:

  1. Divide and conquer - sum the estimates of subsystems and activities.
  2. Include all activities - e.g. prototyping, design, code inspection, testing, debugging, document preparation, deployment.
  3. Base cost on past experience combined with details of the current project
    - no two projects are the same
    - use personal judgment of experts
    - use an algorithmic model: factors are number of use cases, number of distinct functional requirements, number of classes, number of widgets (controls) in the GUI, number of lines of code. COCOMO use E = abN^c where a and b are constants depending on the organization of the project and the process and people involved, N is the factor being measured, and c < 1 when there can be economies of scale, and c > 1 when the project is expanding. Another model uses "feature points" which is a weighted sum of the feature measures.
  4. Be sure to account for differences (i.e. no false analogies between projects). Factors:
    - different developers
    - different processes and maturity levels
    - different customers and users
    - different schedule demands
    - different technology
    - different technical complexity
    - different domains
    - different levels of stability
  5. Anticipate the worst case and plan for contingencies. i.e. be both optimistic and pessimistic
  6. Combine independent estimates. e.g. the Delphi technique. Different teams would develop different estimates, then compare notes and repeat until a consensus is obtained.
  7. Revise and refine the estimate as work progresses. Tie this to risk management. The better the cost estimate the more accurate the risk assessment.