home | apple | java | perl | scala | unix

# Three magic Function Point Analysis formulas

The last thing I'm going to share here are three things I refer to as ``magic formulas'', mostly because I don't know how the authors of these formulas arrived at them. I'll have to assume that they had some data at their disposal, and came up with these formulas to match their data.

Project Duration

The first formula is credited to Barry Boehm. The formula states that the duration of a project is equal to 2.5 times the cube root of the work months, or:

```Project Duration = 2.5 * (Cube Root of Work Months)
```

where Work Months is defined as

Work Months = (Project Work Effort (Hours)) / (Hours per Month)

So, if a project is estimated to take 27 work months, then the project duration can be expected to be

```Project Duration = 2.5 * (3)
```

or 7.5 months.

Optimum Staffing Size

The origin of this formula is currently unknown, but it goes like this:

Optimum Staffing Size = Square Root of Work Months

Here, the square root of 27 is 5.2.

Minimum Duration

The last magic formula states that the minimum duration of a software project is:

```Project Duration = 0.75 * (Cube Root of Work Months)
```

In my example, this yields 0.75 * 3, or 2.25 months.

Summary

How does this compare to what I've measured? In my earlier example I stated that we worked 540 man-hours 10 weeks. At 160 man-hours per month, this is 3.375 months. Applying the three magic formulas I would arrive at these numbers:

1. Minimum Duration = 0.75*1.5 = 1.12 month.
1. We didn't make it in this short time frame, but assuming 540 total hours of development time, we could have finished in seven weeks instead of 10. (We essentially lost three development weeks due to other issues.)

2. Project Duration = 2.5*1.5 = 3.75 months.
1. This is 15 weeks. We took 10.

3. Optimum Staffing Size = 1.84 developers.
1. We used two developers here, and I did not want any more or less on this effort, so this correlation seems good.

Before using any of these ``magic formulas'' in practice, you might try reverse-engineering them like this against your own projects, and see if they work for you.