Chapter 7 - Project Scheduling

Most software projects are late and over budget, why?

  • Unrealistic deadlines established by someone outside the software engineering group
    • based on desired outcomes (time to market, need) rather than reality
    • based on a preset budget (work backward from budget to person hours)
  • Changing customer requirements
  • Honest underestimates
  • Poor risk management
    • technical risk
    • human/resource risk
  • Poor communication and training
  • Failure of management to react and recognize projects that are behind schedule

How to deal with poor initial estimates

  • Perform a detailed estimate, document with past projects. Show why the estimate is bad and the level of "magic" (productivity increase) that would be necessary to make it work.
  • Ask for one large schedule change at the beginning of the project or ask to have the functional requirements changed
  • Propose an incremental development strategy
    • Series of  releases, each with more functionality
    • The first release would have the most critical functions.
  • Clearly show the consequences of what might happen if the bad schedule is forced on the group
    • loss of key personnel
    • unkept promises to key customers
    • cost of replacing/updating poorly tested code once it is distributed
    • damage to company reputation.
  • Be prepared to explain why adding more people to the project won't get it done any sooner. (regenerative schedule disaster)

Project Scheduling Basics

  • Defined : process of distributing estimated effort across the planned project duration by allocating the effort to specific software tasks (analysis, design, code, test, install, document, train, maintain).
  • Basic principles:
    • A macro schedule should be designed first, once analysis has been completed and resources committed, then a detailed schedule can be created.
    • Compartmentalization - break project up into a number of manageable activities
      • each task should be assigned to specific team members
      • each task should have a defined outcome (work product)
      • each task should be allocated a certain number of work hours
      • each task should have a defined start and end date
    • Determine task interdependencies, which ones must come first or be completed before others can start.
    • Assign resources to the task
    • Validate schedule and dates based on available resources
    • Use project milestones to measure team progress (end of analysis phase, end of design phase, etc.)
    • Meeting or missing milestones is a function of both how well the team performed and how well the schedule was created.
    • Empirical data has shown that using fewer people over an extended period leads to greater productivity and reduced cost (at the expense of calendar completion date)
  • Effort Distribution
    • 40-20-40 rule (guideline)
      • 40% analysis and design
      • 20% code and unit test
      • 40% integration and system testing
    • Individual task types that must be scheduled and allocated
      • project planning
      • analysis
      • detailed design
      • code and unit test
      • code and design reviews
      • integration and system testing
      • documentation
      • user training
      • field/acceptance testing
      • installation/distribution
      • maintenance
    • Important milestones
      • Establishment and agreement on functional requirements.
      • Analysis and logical design complete
        • may include prototype system/user interfaces
      • Detailed user interface design complete
        • includes design review and resolution of action items
      • Database detailed design complete
        • includes design review and resolution of action items
      • Network detailed design complete
        • includes design review and resolution of action items
      • Software detailed design complete 
        • includes design review and resolution of action items
      • Code and unit test completed
        • includes code inspections and walk through and resolution of action items
      • User documentation completed
      • Integration complete (Alpha test version of software exists)
      • System testing complete (Beta test version of software exists)
        • includes QA testing  and resolution of action items
      • Acceptance testing complete (Release 1.0 exists)
        • includes customer + QA testing  and resolution of action items
      • Project delivery and installation complete

The project schedule

  • Tools:
    • Task network or PERT chart.
      • Shows all tasks and interdependencies
      • Shows critical path (tasks that must be completed on time so that the entire project is not late)
      • Shows the earliest time a task can begin and the latest time that it can complete
      • cricial path method (CPM)
    • Time line chart (GANTT) 
      • Shows start and end date for each task
      • Shows task assignments per resource
  • Steps to create:
    • Create an overall estimate of effort (chapter 5)
    • Create a complete list of tasks
    • Allocate effort to each task (revise estimate if necessary)
      • Tasks should be in the 1-3 weeks of effort in size.
      • Too large a task does not provide enough control of the process
      • Too small a task does not give workers enough freedom to plan their own activities efficiently and are easy to miss (a couple of sick days ruins the schedule)
      • Time tasks and major project reviews such that some tasks can be reported as being completed at each review (keeps management happy)
    • Determine task interdependencies
    • Create first PERT chart
    • Determine resource availability
    • Assign resources to tasks
      • assign best persons to hardest tasks and to tasks on the critical path
      • allow for project pressure to build and ease at intervals during the project (building at milestones, easing afterward). Constant building of pressure creates too much stress.
    • Validate assignments 
      • does the plan really work
      • does it assume too much overtime 
      • or too high a level of productivity out of marginal performers
      • did you allow for sick days and vacations?
    • Determine critical path, earliest complete, latest complete dates, and amount of float
To calculate the earliest complete date (Te) do the following:
1) Draw your PERT chart and fill in the Estimated time (Et) for each task
2) Start with the first task, the one on the left with no predecessors. Set its earliest complete to its estimated time (Te = Et).
3) Work from left to right following predecessor chain, for each task, the Te will be the maximum Te of its predecessors plus the task's Et. 
      Te = max(Te predecessor) + Et
To calculate the lastest complete date (Tl) do the following:
1) Start with the last task on the far right, one with no successors. Set its Tl to its Te.
2) Work backwards following predecessor links, the Tl for each task in the minimum of the Tl - Et of all its successors. 
Tl = min (Succcessor Tl - Successor Et)
To calculate slack or float
1) calculate Te and Tl and described above
2) for each task the float = Tl - Te
3) whenever the float is 0, then the task is on the critical path.
  • Schedule tracking
    • Conduct periodic status meetings
    • Evaluate results of reviews conducted (quality, number of action items, individual and team performance)
    • Monitor task start/complete dates
    • Monitor completion of milestones
    • Note: if design/analysis took longer than expected, then assume that the other phases will be longer by the same proportion. Do not assume you can make up the time during coding and testing.
    • Meet informally with team members to get subjective assessment of progress and head off problems.
    • Pay attention to your RMMM plan!


Study Guide:

Key words:

40-20-40 rule
CPM
detailed schedule
Earliest Complete
estimates
float
GANTT
Latest complete
macro schedule
milestone
PERT
slack
task

Problems :1,2,4,5,7