CPE 308 Estimation Process


Determine your budget

If you have historical data from a previous project:

Calculate total team hours on first project (from status reports)
Calculate total LOC on first project (suggest JD's LOC tool)
Compute team productivity rate (LOC/hr). 
Consider adjusting using judgement for different factors in this project.

Otherwise, if no historical data is available, use 5 LOC/hr. (Previous student teams range from 3 - 13).

Determine resources available for project 2
Multiply by productivity rate to get "LOC capability", your budget.

Example:  Productivity rate is 5 LOC/hr.
5 developers @ 10 hours per week * 10 weeks = 500 hours
500 hrs * 5 LOC/hr = 2500 LOC.

Estimate Product Size

As a team, use preliminary features list, decompose the problem and do a quick conceptual design to identify major classes in solution. 

If possible, identify similar classes ("proxies") from previous projects, class assignments, open source repositories, or elsewhere. Use these to help you gauge the size of your classes.

Create 3 size (LOC) estimates for each class:  probable, least, & most.
Calculate a weighted estimate:
(least + most + 4 * probable) / 6

Create a table showing estimate for each class. (post this on the team wiki)
Sum estimates for all classes in design.

Compare total Estimated LOC against LOC capability.

Subtract classes until total estimated LOC < LOC capability.  Use this number in scheduling (below).

  Example Student Calculations (.pdf)

Here are some detailed directions for how to do a group estimating activity.  They are intended for a project of longer duration than ours, but the techniques are the same.



Alternate Process

If historical data is not available about productivity rate, you may consider doing feature-based estimation.  Use intuition to estimate hours per feature, then add them all up.  It's really just guessing.


Create Schedule

Use project plan - process & deliverables - to understand what activities you will be engaged in.

Do cost estimation as described in the text or other resources.

Create a WBS (work breakdown structure) shows tasks and durations. View example.

Create a task network to visually represent dependencies, sequences, parallelism. View example.

Convert the task network to a table format that shows for each activity the Earliest Start and Earliest Finish times.

Create a timeline (aka Gantt) chart (without calendar dates) from the information in the previous table.

Map chart onto actual calendar (taking into account weekends, holidays, etc.).

Draw in schedule format (e.g. ASCII or wiki table).  View example 1.  

Last 3 steps can be combined if using a tool, for example, GanttProject or Gnome Planner (available in lab).

Either manually or with the tool, identify the critical path. For a simple Gantt chart the critical path can often be determined by inspection. For complex charts, a tool will determine the critical path automatically.

See a complete worked example.