Software Estimation Notes - Count

Count, Compute and Judge

In this post, will be writing on some tips on how to count, compute and judge when doing an estimate.

Find something to count that’s highly correlated with the size of the software you’re estimating. If your features are fixed and you’re estimating cost and schedule, the biggest influence on a project estimate is the size of the software. When you look for something to count, look for something that will be a strong indicator of the software’s size.

Find something to count that’s available sooner rather than later in the development cycle. The sooner you can find something meaningful to count, the sooner you’ll be able to provide long- range predictability. The count of lines of code for a project is often a great indicator of project effort, but the code won’t be available to count until the very end of the project. Function Points are strongly associated with ultimate project size, but they aren’t available until you have detailed requirements. If you can find something you can count earlier, you can use that to create an estimate earlier.

Find something to count that will produce a statistically meaningful average. Find something that will produce a count of 20 or more. Statistically, you need a sample of at least 20 items for the average to be meaningful. Twenty is not a magic number, but it’s a good guideline for statistical validity.

Understand what you’re counting. For your count to serve as an accurate basis for estimation, you need to be sure the same assumptions apply to the count that your historical data is based on and to the count that you’re using for your estimate Find something you can count with minimal effort. All other things being equal, you’d rather count something that requires the least effort.

The following table provides an example of what can be counted

Quantity to Count Historical Data Needed to Convert the Count to an Estimate
Engineering requirements Average number of engineering requirements that can be formally inspected per hour
Average effort hours per requirement for development/test/documentation
Function Points Average development/test/documentation effort per Function Point
Average lines of code in the target language per Function Point
Change requests Average development/test/documentation effort per change request
(depending on variability of the change requests, the data might be decomposed into
average effort per small, medium, and large change request)
Marketing requirements Average effort hours per requirement for development or independent testing or documentation or creating engineering requirements from marketing requirements
Features Average effort hours per feature for development and /or testing
Function Points Average development/test/documentation effort per Function Point
Average lines of code in the target language per Function Point
Engineering requirements Average number of engineering requirements that can be formally inspected per hour
Average effort hours per requirement for development/test/documentation
Stories Average number of stories that can be delivered in a particular amount of calendar time
Defects Found Average effort hours per defect to fix
Average Effort hours per defect to regression test
Lines of code already written Average number of defects per line of code
Average lines of code that can be formally inspected per hour
Average new lines of code from one release to the next
Test Cases written Average amount of release stage effort per test case