Home
About Us
Site Map
Products
Services
PMP® Certification
PM Tips & Tricks
PM Tools & Techniques
Links
Contact Us
BLOG

 

 

Effort and Duration Estimation

This article is the third in a series of related articles with tips and tricks on producing a schedule for your project. The first two entitled "Creating the WBS" and "Scheduling Relationships” describe how to produce your Work Breakdown Structure (WBS) and scheduling networks. The ultimate objective of these two exercises is to produce the project schedule, but before you can schedule the project work you first need to estimate the effort required to perform the tasks and activities in your WBS, then estimate duration based on the number of resources assigned to the task or activity.

This article focuses on tips and tricks for effort estimation, load leveling, and working within budget and schedule restraints but the end goal is the production of the project schedule which requires the WBS and identification of relationships. If you haven’t already done so, I encourage you to read the first two articles in this series. This article also makes reference to MS Project because that is the scheduling tool that this author is familiar with. I’m not trying to endorse MS Project here, there are several excellent tools available for scheduling such as Primavera. If you happen to use a tool other than MS Project, you’ll have to translate the MS Project features and functions I refer to into the equivalent features and functions.

This article builds on the best practices espoused in the Project Management Body of Knowledge (PMBOK®). For readers who have acquired their PMP® certification, much of what I describe here will be familiar. For those of you who haven’t, there are many excellent PMP Courses available that provide you with PMP® exam preparation training.

Effort Estimation

Estimation Methods

There are many estimation methods that can be used for estimating software development effort. Googling the keywords: "software development effort estimation” produced 534,000 results for me. An increasingly valuable reference source for this subject is Wikipedia. I’m going to restrict the methods I discuss to 3 for this article, and those 3 are:

  • Analogous - uses historical information
  • Parametric - uses estimation tools
  • Top-down - uses project constraint information

There are different tools that support each of these different types and your choice of method will be determined by the tools available to you, to a large extent.

Analogous

Analogous estimation depends on the availability of historical information and is generally the most accurate of the methods. Even if you don’t have this information available to your project, you should consider starting your knowledge database to capture the information from your project so that it is available to future projects. The information you’ll need to capture will include: the number of lines of code per estimated package, the programming language used, the complexity of the package, the skill level of the programmer(s), and the effort in hours or days to develop the package. The analogous method will usually be the most accurate because it takes into account a number of variables that won’t change across projects such as: software tools, databases, source libraries, and the project team. The method that relies on industry information can’t take these factors into account.

Parametric

Parametric estimation is usually used for construction projects where there there is a plentiful supply of that information. Software projects don’t have that kind of information available to them and have to rely on tools to make up for this deficiency. Two of the tools most commonly used are Function Point Analysis and COCOMO (COnstructive COst MOdel).

Function point analysis (FPA) relies on the application being broken down into small components which are assigned to one of 5 catagories: External Input (EI), External Outputs (EO), Internal Queries (IQ), Internal Logical Files (ILF), and External Interface Files (EIF). These are then assigned a complexity value of high, medium, and low depending on the complexity of the component. Complexity is determined by the number of file types referenced, number of record element types, and number of data element types. The formulas used by function point analysis are quite complex and I would advise taking training in the method before attempting to use it. There are also IFPUGs (International Function Point User Group) that you can join to access the experience of other practitioners.

COCOMO also uses formulas to determine effort and cost. While Function Point Analysis uses a function point as a base, COCOMO uses the number of lines of code as a base. I would say that you should not attempt to use COCOMO if you are attempting to estimate a web site development project. The variances between the effort required for developing 1 line of HTML code when using a tool such as Dreamweaver and no tool is great. There is also a great degree of variance between the number of lines of HTML generated depending on the web development tool used. COCOMO uses modifiers such as required reliability, performance constraints, memory constraints, development tools, and programmer skill sets to weight the lines of code estimated. These modifiers are numerous and using them should not be attempted without some training.

Both FPA and COCOMO rely on a baseline to produce an estimate. FPA uses a baseline unit of effort for each function point score (e.g. if the baseline is 1 hour and the FPA score for the point is 10, the estimate is 10 hours). COCOMO requires an estimate of the number of lines of code and a baseline unit of effort for 1 line of code. COCOMO actually divides programmer skills into 5 different categories with an adjustment factor for each. Making effective use of each method will require some intensive information gathering.

These two methods may be used for both bottom-up and top-down estimation, but will yield more accurate results when each piece of the application or web site is examined on its own. The one exception to this rule is when you use historical information to do your estimation and your project is very similar to the one you use as an estimation base.

Effort estimation will be at the individual work package level, or above so the effort must be divided among its components until the individual activities have an effort estimation. There may be a simple one to one relationship between activities and work packages, or one work package may have several activities. You will need to determine the ratio in which the effort will be split to accurately assign effort to each activity where a many to one relationship exists. If you encounter problems in determining the effort required for individual activities you may want to eliminate the activities from the WBS and manage the work at the work package level.

Top-down

A top down approach is most useful when you are given project constraints for budget and/or schedule. A budget only constraint means that you can only develop the features and functions that fit within that budget. A schedule only constraint means that you can develop as many features and functions as can be completed by the hard stop set for the project. This means that you must assign as many resources as necessary to a task so it will complete on time. I have never encountered a project without some form of budget cap, whether the cap was expressed in monetary terms or resource terms.

Most projects are scalable in that you can apportion your budget between design, build, and test (Quality Assurance) in a fixed proportion. The proportion is likely to change depending on the software system you’re building, the tools you use to build it, and the people who are building it. For most cases the build portion of the project will consume more resources than either the design or test portions. Try a default split of 25% design, 50% build, and 25% test if you have no other information to go by. Factors that will tend to drive design costs up are complex and intricate user interfaces, and unclear or ambiguous requirements. Factors that will drive build costs up are system complexity, component integration, lack of automated test tools, and lack of compile and system test tools. Factors that will drive up QA costs are the unavailability of test data, lack of automated test tools, and lack of adequate testing in the build phase. One way to reduce QA costs is rigorous User Acceptance Testing. Software development projects always have trouble eliciting users for testing so here’s a tip that may help: make user training contingent on, or part of, user acceptance testing.

Assigning effort to the child levels of each of design, build, and test is done the same way as described for Parametric methods. This requires you to determine the ratio which should be used for assigning effort to each of the individual deliverables in the WBS. From this point, you will determine a ratio for assigning the budget to each of the major work packages in the deliverable and so on, until you have assigned an effort value to the lowest level of your WBS.

Duration Estimation

Duration estimation occurs when resources are assigned to the activities in the schedule. An activity which requires 10 days of effort will last 10 days when one programmer is assigned to it, or 5 days if 2 are assigned to it. The resource assignments will be constrained by the resource pool available to the project, the skill sets of that pool, and any schedule or budget constraints placed on the project. You should attempt to assign resources to the project activities so that the resources are engaged and leave the project in an orderly fashion. This means that you don’t bring in 20 C++ programmers for 2 days, dismiss them for 3 and then re-engage them for 1 day.

MS Project has a feature which allows you to manage resource pools and even supports dividing the pool up into groups based on skill sets. Define your resources in MS Project, then assign resources from that pool to the various activities in your schedule. Software Development project managers frequently have to contend with resources who are "part time” on their project. You must be realistic and conservative when establishing the percentage of their time that will be devoted to your project when they are working two or more assignments in parallel. Use the MS Project resource calendar to block out the times that a resource is unavailable to the project when a resource will be devoting 100% of their time to your project for one period and 100% of their time to another assignment for another period.

Identify all the holidays the project will span and mark these in the project calendar. You’ll have to mark holidays in individual resource calendars where your team is geographically dispersed and enjoys different holidays. Mark any training that is planned as part of the project, or was planned outside the project in the individual resource calendars of the team members receiving the training.

Assign resources to activities so that the project completes as soon as possible. The project’s Critical Path will determine the date the project completes and MS Project will automatically reflect the length of the Critical Path once you’ve created your networks properly.

Budget and Schedule Reconciliation

It is common to encounter a clash between the budget cap set for a software development project and the requirements for the project. There are a finite number of ways which can be used to reconcile differences between the budget cap and the calculated effort/cost of the project. One method is to substitute automation tools for effort where these tools would achieve a reduction in effort. The advantage of the automated tool is that its benefit will live on long after your project is completed.

Quality Assurance test costs can be reduced by engaging the user community in testing and having them follow the test scenarios created by the QA team. User Acceptance Testers come from the user community and normally their cost will not be allocated to the project.

Increasing the money you spend on resources is another method of reducing the budget, believe it or not. The COCOMO tool assigns a factor of .71 to a senior programmer and a factor of 1.46 to a junior one. It is highly unlikely that the senior programmer will make over twice the wage of the junior one, and in my experience the difference in their effectiveness can be greater than 2 to 1.

The last resort is to trim work from the schedule. This may be done without having to drop any of the requirements, but that is highly unlikely. Beware of shortcuts such as eliminating testing, design reviews, code walkthroughs, etc. Eliminating effort spent in design and testing will inevitably lead to increased costs.

Look for less costly ways of delivering the same functionality first. Customers will always choose a Cadillac approach to building a log in screen, but may settle for a Chevy, or even a Volkswagen approach when confronted with the cost. Eliminating requirements will be your next step. Prioritizing the requirements in your Business Requirements Document will make discussions around which requirements to drop much simpler. Start by eliminating those requirements which have a high effort estimation and a low business impact.

Project managers who are performing the project for an external customer will not have the ability to eliminate any deliverables from the project. Project managers who are delivering a project for an internal client will have more leeway. Eliminating deliverables is the last resort and should be done based on the cost and business impact of the deliverable.

Scheduling is the next constraint to consider. Since schedule and budget are closely related in a software project, you should have a schedule that is close to the set delivery date once the budget cap has been met but may require some fine tuning. Your Critical Path is the first place to look for savings. Can you assign someone working on a task not on the critical path to one on the path for a period of time? Can you swap a senior programmer working on a non-Critical Path activity for a junior one who is working on the Critical Path? Shorten the Critical Path as much as possible using these techniques.

After you have assigned your resources in the most efficient manner possible, you still may not be able to meet the deadline. You will need to consider compressing the schedule in that case. Look for dependancies defined as "hard” which are not really hard. Typical of these will be the need of an approved Detail Design Document before beginning coding. "Crash” the schedule where this makes sense to do.

The next steps are the same as the ones for budget reduction: feature simplification, requirement elimination, and finally as a last resort, deliverable elimination. The good news here is that the budget will get reduced as a result!

Load Leveling

Most of us tend to be linear thinkers, that is we tend to concentrate on one task at a time and MS Project supports this approach very well. Unfortunately, in the process of shortening the timelines for the project we will probably overlook the definition of a reasonable work week for every resource on the project. MS Project provides a feature they call the resource histogram to check for this. Run this feature after your schedule has been updated to meet budget and schedule constraints.

You’ll have to work within the existing constraints to level the load. Do this by changing work assignments such that everyone on the team is working 40 hours a week (or whatever constitutes a standard work week for your project) for the course of their planned assignment to the project. Assign more than one person to a task which has a resource working on it 80 hours a week. Look for ways of shortening the Critical Path with resources who are idled for portions of the schedule.

Load leveling using the MS Project feature is a tricky and time consuming task requiring many iterations. Leveling each resource in isolation may work for you if you remember that the leveled resource cannot be assigned anything else in the plan. You should also explore the option of overtime if you budget allows this.

Conclusions

You should always strive for a schedule that delivers the project ahead of any dictated delivery dates. There are two ways to do this. One is to simply use an artificial final date which provides the buffer. Let’s say your mandated delivery date for the project is July 31st, 2010. Add a buffer of one month to your schedule by using June 30th as your completion date and schedule your project accordingly. The other way is to use the mandated date as the final date and to buffer each of the activities in the Critical Path. Let’s say an activity is scheduled to last 20 days in your original estimate and that activity is on the Critical Path. Add a 5 day (or 25%) buffer to that activity and do the same for each activity on the Critical Path. The advantage of doing this is that it allows you to manage the buffer at a much more granular level.

The schedule you derive from performing these exercises is a project baseline. You should have this schedule approved by your project sponsors along with your other plans. You probably don’t want to ask your sponsors to review the schedule item by item, but should at least have them review the major milestones and deliverables. Encourage them to review the schedule after approval and provide it in the form of an HTML file or Excel spreadsheet so that they can view it.

Your schedule is your best resource for monitoring and controlling your project. Don’t invest all the time and effort to produce a brilliant plan and then allow it to degrade due to a failure to keep it up to date. Every time a team member identifies a better way of doing something, every time a team member completes a task, update your project schedule. All the time you invest in the creation and maintenance of an accurate project schedule will be rewarded by your ability to provide stakeholders with accurate information and a project that delivers the goods on time.

The tips and tricks described in this article implement some of the best practices promoted by the PMI (Project Management Institute). These are taught in most PMP® courses and other PMP® exam preparation training products. If you haven't been certified as a PMP® (Project Management Professional) by the PMI and would like to learn more about certification, visit the three O Project Solutions website at: http://threeo.ca/pmpcertifications29.php. three O Project Solutions also offers a downloadable software based training tool that has prepared project managers around the world to pass their certification exams. For more information about this product, AceIt, visit the three O website at: http://threeo.ca/aceit-features-c1288.php.