Estimation

Testing does not improve quality. It only tells you how bad it is.
- NMMA
  

Estimating ideal coding time

Depending on the project type, this must be done in different ways. One way or another, it will always end up resembling function points. For webbased or simple screen oriented applications the following approach seems to work:

  1. Describe the overall system objectives.
  2. Identify and draw the application subsystems as bubbles.
  3. Zoom in on each bubble and sketch the screenflow of each part of the application.
  4. Zoom in on each screen and determine define overall functionality level.
  5. Map each screen to the table below to find its score.

The score is measured in ideal coding time. Ideal coding time is the time it would take one person to complete the project, if this person has detailed knowledge about the task at hand, the coding skills and the experience with the development environment.

Man hour scoring table:

Entity GUI Entry (DB Query) Edit (Validate) Exit (DB Update) Hours
Static page Simple -   - 1
  Medium -   - 2
  Complex -   - 4
Dynamic page, read - Simple   - 1
  - Medium   - 2
  - Complex   - 3
Dynamic page, edit - - Simple - 1
  - - Medium - 2
  - - Complex - 3
Dynamic page, write - -   Simple 1
  - -   Medium 2
  - -   Complex 4

Sample scores:

A screen with simple GUI, medium loading, simple editing and simple saving scores 1 + 2 + 2 + 1 = 6 hours.

A screen with medium GUI, simple loading, simple editing, complex saving scores 2 + 1 + 1 + 4 = 8 hours.

Finally a search screen with a link from the search result to an edit screen will score like this: simple GUI, simle edit, simple exit + simple GUI, medium load, simple exit + simple GUI, medium load, complex editing, medium exit = 1 + 1 + 1 + 1 + 2 + 1 + 1 + 2 + 3 + 2 = 15 hours.

This way the entire application can be estimated and transformed into man months of ideal coding time.

Adjusting ideal coding time

Setting up rules for estimation is not a simple task. General guidelines can be built, but the rules will almost always have to be tuned according to team spirit, team capabilities, project type, organization type and more.

The baseline is S / D = T, where S is System Specs, D is Developers and T is Time. This is only true in a small window, so a corrective factor, Complexity must be added to the left side. Thus we have: C x ( S / D ) = T. Complexity is an indication of the organizational complexity. It is proportional with the amount of people involved with the project.

So how can we construct an equation satisfying our needs? What are the requirements? 

  • Adding more developers to a well managed project should decrease development time, but in a non-linear fashion, as doubling the amount of developers does not cut development time by a factor two.
  • Adding developers to a poorly managed project will often slow things down.
  • Adding more developers to a project that is late, will almost always slow things down.
  • Adding more project members with input should increase C. This should also be nonlinear as doubling the project members does not yield half the development time.

Maybe the complexity factor is something like this: C = (R + D) / D,

where R = Requirement and adminstrative people involved and D = Developers.

(too be continued...)