GUIDANCE
The Pricing Handbook

19. Software Pricing


19.3 Software Cost Estimating Process

 

19.3 Software Cost Estimating Process

The overall process of developing a cost estimate for software is no different from the process for estimating any other element of cost. There are, however, aspects of the process that are peculiar to software estimating. Some of the unique aspects of software estimating are driven by the nature of software as a product. Many of the problems that plague the software development effort itself are responsible for the difficulty encountered in estimating that effort.

One of the first steps in any estimate is to understand and define the system to be estimated. Software, however, is intangible, invisible, and intractable. It is inherently more difficult to understand and estimate a product or process that cannot be seen and touched. Software grows and changes as it is written. Also, when hardware design has been inadequate, or when hardware fails to perform as expected, the "solution" is often attempted through changes to the software. This change may occur late in the development process and sometimes results in an unanticipated software "build." In this type of situation, where the product is highly ambiguous, it is more important than ever to develop graphical representations of the final software product. This could be as simple as creating a product tree line drawing to represent the software development effort, or developing a software work breakdown structure (WBS), which is discussed in section 19.3.1 and 19.3.3. Other problems are created by the metrics used to size software and the nature of the software estimating methodologies themselves. These topics are discussed in sections 19.4 and 19.5, respectively.

Per NRaD’s Manual, projects should produce and document project plans, which include estimates of product size, resources, staffing levels, schedules, and key milestones. Historically, the costs and schedules for most software projects have been greatly underestimated. There are many reasons for this: costs and schedules are often pre-determined by an outside source; a real in-depth analysis of the software development process was not taken into consideration or in many cases not fully understood; and there is a general lack of acceptance of the concept that developing software is an expensive endeavor.

The software estimation process in the following sections describes the steps required for establishing initial software Life Cycle Cost (LCC) estimates and then tracking and refining those estimates throughout the life of the project. Establishment of this process early in the life cycle will result in greater accuracy and credibility of estimates and a clearer understanding of the factors that influence software development costs. This process also provides methods for project personnel to identify and monitor cost and schedule risk factors.

Following the sections on software cost estimating will be a discussion of the software price and cost analysis process. Software pricing is dependent upon most of the same input parameters that are required to perform a valid cost estimate. The objective of price analysis is to determine if the cost estimate contained in the contractor’s proposal is fair and reasonable. The objective of cost analysis is to analyze the cost elements contained in the contractor’s proposal to form an opinion on the degree to which individual cost elements and associated proposed profit or fee represent what the work should cost, given reasonable economy and efficiency. It involves a review of the judgment factors used in projecting the estimated costs. Therefore an understanding of the software cost estimating process is necessary for performing software pricing.

 

19.3.1 Process for Software Estimation Activities

Referring to NRaD’s Manual, software estimation is a continual process that should be used throughout the life cycle of a project. The process activity for developing the cost estimate is shown before the schedule estimate in Figure 19-7 because this is the sequence often used by the cost models. However, a development schedule is often mandated before the scope of the effort is clearly understood. The early establishment of a WBS helps to divide the effort into distinct work segments that can be scheduled and prioritized. A sample detailed software WBS is provided in Appendix 19C.

Figure 19-7. Software Cost Estimation Process

image

The following subsections provide an overview of the steps used to develop a thorough software project estimate. Detailed explanations of estimation requirements for each phase of a project are in subsequent sections. Detailed explanations of specific estimation methods and automated tools are contained in section 19.5 and Appendix 19D respectively.

STSC’s Report states that software estimation should be approached as a major process; it should be well planned, reviewed often, and continually updated. The basic steps required to accomplish software estimation are:

Step 1: Identify project objectives and requirements

The key point that needs to be made here is that project objectives and requirements must be clearly and precisely identified to develop good estimates of effort and costs early in the project's life cycle. The objectives of the project define what the end product is, what the end product's intermediate steps are, and when and for whom the project will be accomplished. The objectives also help define how and by whom the project will be carried out. Constraints are restrictions that affect the completion of project objectives. Constraints may arise from several factors. The start date or completion of the project may impose constraints. Other constraints are imposed by the application of specific resources and their associated availability. Constraints can also be policies and procedures that require justifications or explanations of implementation actions.

NRaD’s Manual states that defining requirements early on in a project can be a very difficult task. However, without knowing what the requirements are, it is impossible to accurately estimate a project's cost and schedule. If all of the requirements are not known, then the estimate should be based on the known requirements and make sure everyone understands that the estimate is based on only those known requirements. If using an incremental or evolutionary development strategy, then base the estimate on the requirements that have been defined for that increment.


Step 2. Plan the activities

The Work Breakdown Structure (WBS) is created in this step and is used in the software estimation steps that follow. WBS is an excellent tool for visualizing the software product. The WBS need not be complex, nor does it need to be highly detailed. The hardware WBS can be a useful tool in developing the initial WBS for software. There is usually a software CSCI or similar module associated with each HWCI. As the program evolves, the initial or draft WBS should include all software associated with the program regardless of whether it is developed, furnished, or purchased. If furnished or purchased software were omitted, it would not be possible to capture the cost of integrating pre-existing or purchased software with the development software. Appendix 19C contains a sample software WBS.

During each of the phases of software development, numerous activities will be performed in disciplines such as software development, software project management, software configuration management, and software quality assurance. As discussed by Boehm and by Donald J. Reifer in his SoftCost-R User's Manual, the activities performed for each discipline during each phase can be organized into an activity WBS for each CSCI. This WBS can be used with the product WBS as a basis for management reporting and tracking for a CSCI. A manager must understand that a software WBS contains different activities than a traditional hardware WBS (e.g., coding versus fabrication).

The WBS should depict only major software functions, and major subdivisions. It should not attempt to relate the software to the hardware it controls. Each of the major software functional units can be modeled as a CSCI. Lower level WBS elements can be modeled as a component. Once the WBS is established, the next step is to determine the magnitude of the software development/support effort and decide on which estimating technique should be used for deriving the estimate.


Step 3. Estimate product size

STSC’s REPORT describes how using the requirements and WBS, the product size can be estimated by estimating the sizes of the components identified in the WBS. Estimating product size is the basis of software cost estimation. Size is considered by software project managers to be a major technical performance or productivity indicator allowing them to track a project during development. Estimating product size is not simple to do; typically, it is very dependent on the experience of the persons doing the estimating. Since estimating size is so important to the overall cost estimate, section 19.4 describes in detail the various methods to estimate product size.


Step 4. Estimate Cost And Effort

Using size estimates as input, estimates of cost and effort are prepared. Many methods can be used (see Section 19.5), and the use of more than one method is strongly recommended. It is in this step that software estimation tools should be used to assist with the estimates. Many of the available tools use models that have been developed over the years using historical data from hundreds, even thousands, of projects. One widely used model is the COnstructive COst MOdel (COCOMO). For information on individual models see Appendix 19D.

In the NRaD Manual, the first consideration in estimating cost and effort (man-hours or man-months) is to choose the estimation method. If a parametric cost model (see Appendix 19D) is being used, then the environmental parameters for the project must be determined and entered into the model.

Examples of parameters are program complexity, programming language, requirements volatility, analyst capability, and execution time constraint. The estimate should include all labor activities charged directly to the task. These activities normally include:

  • Engineering labor charges for System/Software Requirements Analysis, Design, Code, Test, and Integration.
  • Documentation effort
  • Configuration Management
  • Software Quality Assurance
  • Management effort charged directly to the task

Step 5. Estimate schedule

Using estimates of cost and effort, a tentative, projected schedule is developed. Continuing with the NRaD Manual, Schedule Estimates can be derived either manually or by using automated estimation models. A combination of both manual and automated methods is recommended. Manual methods should be based primarily on past experience. One or more software engineers with experience with the specific application under development should develop a schedule estimate as follows:

  • The WBS should be expanded to delineate the order in which functional elements will be developed. The order of development will define which functions can be developed in parallel as well as dependencies that drive the schedule.
  • A development schedule should be derived for each set of functions that can be developed independently, i.e., a schedule for each build of an incremental development.
  • The schedule for each set of independent functions should be derived as the aggregate of the estimated time required for each major phase of the development: analysis, design, code & unit test, integration and test.
  • The total project schedule should reflect the aggregate of the product development, including documentation and formal review requirements.

The steps outlined above are typical of manual estimates. Most of the available tools provide a standardized schedule estimate based on waterfall milestones shown in Figure 19-1. Automated tools allow the user to tailor the schedule in order to observe the impact on cost. However, most automated tools allow only a small amount of flexibility in shortening schedules. REVIC (REVised Intermediate COCOMO), for instance, allows the user to shorten the schedule by 25% from the nominally derived schedule.


Step 6. Risk Assessment

The STSC Report states that all known risks associated with a software development project should be defined and weighed, and impacts to the project costs should be determined. This information should always be included as part of the software estimation process. Poor software estimates generally result from four major risk areas, which are shown in Table 19-3.

Table 19-3. Risk Resulting from Poor Software Estimates

Risk Area

Factors Associated with Risk

Size of the software project

Software size estimates tend to be optimistic resulting in underestimation. Since size estimates are central to other project estimates, poor size estimates can cause numerous problems such as cost and schedule overruns.

Development Environment and Process Stability

An inadequate development environment or changes in the environment or processes on which estimates are based can result in cost and schedule overruns.

Staff Skills

Misalignment of skills to tasks can result in miscalculations of schedules and amount of effort required as well as poor estimates of project staffing requirements.

Requirements Growth

Unconstrained growth of requirements during the software development life cycle results in changing project goals that can lead to frustration, customer dissatisfaction, and ultimately, cost and schedule overruns.

Comparing and iterating the results from different estimation methods will also help identify risks. More than one software estimation method should be used and the results should be compared, since there is no one method that is clearly superior. The strengths and weaknesses of the different methods tend to complement each other. Significant differences in cost/schedule estimates should be iterated for two reasons:

  • Similar components of a project may have widely varying estimates due to differences in the estimator’s personalities (pessimistic vs. optimistic), roles, and incentives. Iteration of the estimates helps to resolve these differences.
  • A few components may dominate the SW costs, in which case, the estimates for those components are critical to the project’s success and therefore can be risk areas. Iteration can be used to scrutinize the critical estimates.

Once the potential risks are identified, risk factors should be recorded and tracked in the Software Development Folder (SDF) or Software Estimation File (SEF), the WBS and the Software Development Plan (SDP).


Step 7. Inspect/Approve

Referring to the NRaD Manual again, the purpose of this step is to improve the quality of the estimate and get upper management commitment. The objectives of the inspection and approval of the estimate are:

  • Confirm the software architecture and functional WBS.
  • Verify the methods used for deriving the size, schedule and cost estimates.
  • Ensure that the assumptions and input data used to develop the estimates are correct.
  • Ensure that the estimate is reasonable and accurate given the input data.
  • Formally confirm and record the official estimates for the project.

This step is an ideal place to incorporate the Software Engineering Institute (SEI) software cost estimating requisites of audit trails and constraint processes. Audit trails record and explain the values used as cost model inputs. SEI suggests processes for dealing with externally imposed cost or schedule constraints that help ensure the integrity of the estimating process. Per the GAO Report on Air Traffic Control in January 1997, SEI, along with other experts in systems and software engineering advocate qualifying early project estimates by disclosing the level of uncertainty associated with them, and making the estimate more precise as the project is completed and the uncertainties eliminated. The GAO recommended to the FAA to disclose the inherent uncertainty and range of imprecision in all Air Traffic Control project’s official cost estimates presented to executive oversight agencies or the Congress.

Software estimators, the project manager, and quality assurance or upper management should sign the estimate after the inspection is complete and all defects have been resolved. Inspection and approval activities can be as formal or informal as you want them to be. What is important is that the estimates are reviewed independently. Estimates can be improved simply by having the appropriate personnel participate in the validation process.


Step 8. Track Estimates

The NRaD Manual recommends tracking estimates over time in order to develop a historical file of your estimates, to compare the current estimate to previous estimates, to resolve any discrepancies with previous estimates and to document the tracking data. Comparing planned versus actual estimates over time allows the estimators to see how well they are estimating and also to see how their project is changing over time. Also, tracking allows the estimator to develop a historical database of estimates. Estimators can use this historical database to calibrate cost models or to compare past estimates to future projects.

This step allows the accomplishment of the SEI requisites of having a corporate memory or historical database(s), for cataloging cost estimates, revisions, reasons for revisions, actuals, and other descriptive information. Examples of other descriptive information includes: trends that affect the project; having the ability to calibrate/tune cost models to reflect demonstrated accomplishments on similar past projects; and data collection and feedback processes that foster capturing and correctly interpreting data from work performed.


Step 9. Process Measurement and Improvement

The NRaD Manual suggests that metrics should be collected during each step of the software estimation process to improve the process. Two forms of process measurement are recommended. The first, called process effectiveness metrics, is used to track the effects of the process on the project. The second set of metrics, called process cost metrics, is used to provide management with insight into the cost of implementing and performing this process. The long- term benefit of collecting these metrics is to determine a correlation between the overall accuracy of the estimates and the cost of developing the estimates. This information is another input to the resource requirements of a project and should be identified as such.

The collection of these metrics should begin as soon as the process is implemented and will continue throughout the development cycle. Collection of the metrics will continue through the final phases of development even though estimation activity declines in those phases. These metrics are described below.

  • Process Effectiveness Metrics. The purpose of the Process Effectiveness Metrics is to identify the elements of the estimation process that enhance the estimation process and those elements that are of little or no value to the planning and tracking processes of a project. Process elements or activities that enhance the process are those that provide the greatest accuracy regarding the actual cost and schedule, as well as cost and schedule to completion of a project. Conversely, those elements or activities that do not enhance the accuracy of the estimates need to be isolated and eliminated.

The Process Effectiveness Metrics consist of the variances between the most recent estimates and the baseline estimates. A format for recording the data items for which the variances are recorded is shown in Table 19-4 below.

Table 19-4. Process Effectiveness Metrics

 

Baseline

Update

Variance

Size Estimate: New Code

 

 

 

Size Estimate: Reused Code

 

 

 

Size Estimated: Modified Code

 

 

 

Productivity (Hours/SLOC)

 

 

 

Cost Estimate

 

 

 

Schedule Estimate

 

 

 

Number of CSCIs

 

 

 

Number of CSUs

 

 

 

Documentation page count

 

 

 


Section 19.10 goes into greater detail concerning metrics for software tracking and measurement. Section 19.7.5 discusses the importance of tracking productivity and code condition (code size by percent new, reused, modified) when pricing to insure consistency between program size and proposed effort/schedule.

  • Process Cost Metrics. The purpose of the Process Cost Metrics is to quantify the cost of the software cost/schedule estimating process and identify ways to increase the cost effectiveness of the process. Elements or activities that cost-effectively enhance the project planning and tracking process will remain intact while those that are of little or no value to the planning and tracking processes of a project will be eliminated. Process elements or activities that are cost effective are those that provide meaningful input to the planning and tracking process with a minimum amount of work effort. Conversely, those elements or activities that require effort but do not return meaningful data need to be isolated and eliminated.

The elements and definitions of the Process Cost Metrics are divided into two categories: effort to perform the estimates; and the cost of tools. The effort metrics include the person hours for Size Estimates and Cost/Schedule Estimates. The cost of the tools is a summation of the following:

  • Purchase Price
  • Training Cost
  • License Renewal
  • Special Hardware
  • Consulting Fees

These metrics should be collected for each estimate developed.

 

19.3.2 Software Development Standards

As stated earlier, very often the government requires software development to follow DoD-STD-2167A/498, which is the Department of Defense standard that specifies the overall process for the development and documentation of mission critical software systems. This standard also requires technical reviews and audits to be conducted in accordance with DoD-STD-1521B.

There are many non-DoD standards in use currently that fall into the general category headings of Independent (IEEE, ISO), Commercial (ANSI J-STD-016, Commercial High/Low, IS, MIS) and Project (Space Shuttle). The SEER-SEM User’s Manual provides a good overview of the definitions and uses of many of these standards. The Cost Xpert User’s Manual contains matrices listing the title and description of the various documents required by many of these standards.

Other standards that may affect the estimating process are: MIL-STD-499A, Engineering Management; MIL-STD-490A, Specification Practices; MIL-STD-480B, Configuration Control-Engineering Changes, Deviations and Waivers; DoD-STD-1703, Software Products Standards. Software developed in accordance with these standards generally requires more resources and is more time consuming. Therefore, the software estimation process must include and adjust for these requirements where applicable.

 

19.3.3 Benefits of SW Estimation Process

When the software estimation process is performed correctly, the benefits realized far outweigh the cost of performing an estimate. Some of the major benefits include lowering the cost of doing business, increasing and broadening the skill-level of key staff members, acquiring a deeper knowledge of the proposed project prior to beginning the software development effort, and understanding, refining, and applying the proper software life cycle mode.

As these software estimating components are enhanced, refined, and continually applied, the software estimating process, associated tools, and resulting products attain higher levels of quality and ultimately benefit all.