Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-settings.php on line 232

Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-settings.php on line 234

Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-settings.php on line 235

Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-settings.php on line 252

Strict Standards: Redefining already defined constructor for class wpdb in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/wp-db.php on line 49

Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/cache.php on line 36

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/cache.php on line 403

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 534

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 534

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 534

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 534

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 553

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 649

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 649

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 649

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 649

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el($output) in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 674

Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/query.php on line 15

Deprecated: Assigning the return value of new by reference is deprecated in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/theme.php on line 505
Ceterum censeo… » A function point estimation method

Ceterum censeo…


Warning: Creating default object from empty value in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/classes.php on line 400
  • Michael's Blog
  • Michael's Curriculum Vitae

  • Warning: mktime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 11

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 20

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 22

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 24

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 25

    Warning: mktime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 11

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 20

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 22

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 24

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 25


    Warning: mktime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 11

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 20

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 22

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 24

    Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/functions.php on line 25
    12/09/2011 (12:19 am)

    A function point estimation method


    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/formatting.php on line 75

    I’ve been involved with some estimations recently. The method in use here is a formal function point count, which has been codified into a spreadsheet. It’s the first time I’ve seen a function point estimation method in use. I’m sufficiently impressed by it that I think it’s worth sharing. So here’s a rather lengthy description.

    Overview

    Thanks to it’s spreadsheet nature, the estimation process is clear, largely automated, quick to implement, and reasonably accurate. Someone familiar with both the application and the estimation process (i.e. a BA or senior developer) can put together a reliable estimate within a few hours (at least, an estimate as reliable as the requirements).

    The estimation method is a four stage process:

    1. Design review
    2. Effort calculation
    3. Allocation calculation
    4. Quote (mostly used by vendors)

    The estimations are done multiple times throughout the course of the project, each time with tighter requirements creating a tighter estimate. Each estimate is contained within a single workbook, which allows for straight forward version file-based control of estimations.

    Design review

    Using whatever requirements are available, the estimator reviews each function in scope, and records the required design elements in a design review matrix.

    Design Review

    Each function is classified as a Screen, Batch or a Report. The estimator considers a number of standard design elements, and whether the solution would require that particular element. There are about 30 design elements, which cover all the things a system might need to do (e.g. retrieve data from table,validate user input, display a report, read a CSV, and so on). It’s all in a neat matrix, so it’s harder to overlook some aspect. The estimator notes these decisions as design comments.

    The design comments are specific but brief. For example, tables are named, but no further description given. This is because the comments are stylized so that a) they are easy to produce, and b) they are well formatted for the estimation calculation. Here’s a small subsection of a matrix as an example:

    Function Retrieve data from table Write data to table
    1.1.1 TBL_CUST_ORDER_HEADER TBL_CUST_ORDER_HEADER
    1.1.2 TBL_CUST_ORDER_HEADER, TBL_CUST_ORDER_DETAIL TBL_CUST_ORDER_DETAIL

    The end result is a listing of development work required to implement a function.

    Effort calculation

    The spreadsheet takes data entered in the design review matrix and calculates a total effort value.

    Estimate Calculation

    The effort calculation sums the design for each function and work type, and then performs a calculation to determine a function point total. In addition to the function points, there is also the ability to add in a flat rate effort for any particular task (e.g. a one day task to set up a version control server), if required. The effort calculation is set up to include unit and system testing effort as well as development.

    The estimator can control the calculation as follows:

    • Functions are either a screen, a batch process, or a report.
    • Functions may be; New, Modifications, Regression test only, or Excluded.
    • Functions may be marked in or out of scope of the estimate

    The effort calculation can be configured as follows:

    • each design element may produce more or less function points (e.g. validating one user input is a different amount of work to creating a PDF).
    • different platforms (e.g. SAP, JSP) may have different productivity rates (by Screen, Batch or Report).

    The end result is an estimate of total development effort, going from detailed requirements through to system testing.

    Allocation calculation

    The spreadsheet takes the total effort calculation, and allocates that effort across different resource types and different project phases.

    Allocation Calculation

    The effort calculation estimates effort from detailed requirements through to system test. In addition to this effort, there are other effort estimations to be recorded:

    • Effort for developing user requirements.
    • Effort for support during user test.
    • Effort for PM support (added as a percentage of total effort).

    These effort estimates would typically be decided at a project level, with a mandate that a given amount of time would be spent in these activities, and effort follows from that.

    There are also a series of calculations using standard resource rates to produce a total cost.

    Quote

    The total cost is mapped into a printable invoice, along with some extras like a payment schedule and terms and conditions. Obviously, this is more important for the vendors using the form than for in-house development.

    Analysis

    Estimation methods can be assessed as follows:

    • how accurate is the estimate?
    • how consistent is the estimate across projects?
    • does the process allow people to get better?
    • how long it takes to produce an estimate?

    Accuracy

    The biggest concern in an estimation process is accuracy. This process is as accurate as the requirements. The process is used in different stages over the course of a project:

    • Mid term plan estimation (i.e over the next 4 years) are, of course, wildly inaccurate. These estimates are based as much on experience with similar projects as the specific project being estimated.
    • Initial estimation (i.e. while the project is still being scoped) is still pretty inaccurate. These are based a combination of conversations about the project and stated assumptions. There’s still plenty of scope for scope change.
    • Estimation based on user requirement are mostly accurate, but there may still be some design issues that cause variations.
    • Detailed requirements are claimed as 100% accurate. This may be a little self fulfilling… the vendors have trouble charging more than they estimate.

    Of course, a detailed CR process is needed to explicitly track the changes, and to avoid confusing the actual results. This estimation method scales to estimating CR as well as a full project

    Consistency

    The estimation process takes experience to use effectively. Work area names are somewhat cryptic at first glance. I’m willing to bet there’s a clear documented definition of each area which is familiar to the estimators, because of course there is. Also, there’s a particular style of development favored here, and experience with that style is also needed.

    The good thing is that if estimation requires this sort of experience, it will end up getting consistent outputs. Which in turn means that it doesn’t matter too much who does the actual estimation.

    Another side effect is that (possibly) it would allow comparison of project complexity between platforms, which in turn would allow an quantitative comparison of the productivity of those platforms.

    Learning

    I really like that the basis of the estimation is explicitly recorded as part of the estimate. It means that an estimate can be reviewed after the fact, and the cause of variances determined. If there’s a suitable environment, this can lead to people learning from mistakes, and getting better at estimation.

    Compare this to other estimation methods, which tend to come down to ‘that looks like about 3 days/weeks/months’. ‘Oh, it turned out to 4 days/weeks/months? Oh well. I’ll try to remember next time.’ there’s no where else to go.

    (Note: variations that have nothing to do with the estimator are always possible.)

    Estimation time

    I’ve seem estimates for 5 month effort made within a couple of hours. This is much better than I’ve ever seen before using group estimation. Also, the estimates are made by one person, rather than a group of 4 or 5, which is a further reduction of effort.

    Also, I’ve seen this method used to give weekly feedback on how requirements from the previous week have changed the overall development effort, feature by feature. The users were then able to reflect and change scope, on the basis of clear information. That’s a powerful tool for scope control.

    Other comments

    It’s worth noting that this estimation process is really designed to support outsourced development. The process uses a mutually understood method to create an acceptable price. Any dissatisfaction with the method would require either quantifiable evidence or a change to daily rates.

    I’d like to see whether the Screen/Batch/Report triumvirate is sufficient. In particular, I wonder if there should a category for “Service” (direct interactions between systems). This isn’t a common style here, but is more common in Australia. Here, a service would probably be considered a batch… analysis of actuals would tell if this was sufficient.

    There’s no effort being made to create buy-in of the estimation among the development team. Instead, it relies on a well established and accepted process. Both methods are better than the alternative, which is a arbitrary target date created without reference to the actual work.

    Finally, there are a number of points in the process where work is multiplied by a particular factor. These factors are based on the particular productivity in the area of estimation. Determining the appropriate values needs an investigation of actuals from a variety of projects. Of course, collecting actuals is a saga in itself…

    One Response to “A function point estimation method”

    1. Ceterum censeo… » More thoughts on estimation Says:

      Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /hermes/bosnaweb19a/b2387/nf.birchgrovecreative/public_html/michael/wp-includes/formatting.php on line 75

      […] I’ve two further points to add to my estimation post. […]

    Leave a Reply