The ultimate goal of collecting data is to convert the data to a model that you can use for estimation. Here are some examples of models you could create:
Our developers average X lines of code per staff month.
A 3-person team can deliver X stories per calendar month.
Our team is averaging X staff hours per use case to create the use case, and Y hours per use case to construct and deliver the use case.
Our testers create test cases at a rate of X hours per test case.
In our environment, we average X lines of code per function point in C# and Y lines of code per function point in Python.
On this project so far, defect correction work has averaged X hours per defect.
These are just examples to illustrate the kinds of models you can build using historical data. Table 7-1 in the previous chapter listed many more examples.
One characteristic these models have in common is that they are all linear. The math works the same whether you're building a 10,000-LOC system or a 1,000,000-LOC system. But because of software's diseconomies of scale, some models will need to be adjusted for different size ranges.You could try to handle the size differentiation informally. Table 8-1 shows one example of how you might do that.
Team Size | Average Stories Delivered per Calendar Month |
---|---|
1 | 5 |
2–3 | 12 |
4–5 | 22 |
6–7 | 31 |
8 | No data for projects of this size |
This approach is valid when you have small variations in project size. To account for larger variations in project size, see Section 5.1, "Project Size," and Section 5.6, "Diseconomies of Scale Revisited."