By introducing the effective freeze on workforce toward the end of the project we have removed the influence of the schedule on activity. In the final stage of the project people simply continue to work at a normal speed and finish when they finish. While staffing levels may be constant, it is rarely true that the intensity of effort is constant.
Here we use schedule pressure to drive overtime, with overtime directly affecting productivity. Average Overtime is used as a measure of fatigue resulting from prolonged overwork. Fatigue lowers productivity and quality.
The new and changed equations are:
Average Overtime = INTEG( |
(overtime - Average Overtime)/time to average overtime, |
overtime) |
Units: Dmnl
Note that this formulation is the same as Average overtime = SMOOTH(overtime, time to average overtime). As a general practice, the use of dynamic functions such as SMOOTH is avoided because they can introduce behavior that is difficult to determine the causes of. It is good practice to use dynamic function only where they result in substantially less clutter.
eff fatigue productivity = eff fatigue productivity lookup(
Average Overtime)
Units: Dmnl
eff fatigue productivity lookup((0,1.2),(1,1),(1.2,0.9),(2,0.1))
Units: Dmnl
eff fatigue quality = eff fatigue quality lookup(Average Overtime)
Units: Dmnl
eff fatigue quality lookup((0,1.1),(1,1),(1.2,0.9),(1.5,0.5),
(2,0.4) )
Units: Dmnl
max schedule pressure = 5
Units: Dmnl
normal productivity = 1
Units: Drawing/Person/Month
normal work quality = 0.9
Units: Dmnl
normal workflow = MIN(max work flow, normal productivity * required workforce)
Units: Drawing/Month
required workforce = IF THEN ELSE( |
Workforce < required work flow/normal productivity, |
willingness to change workforce*required work flow/ normal productivity + (1 - willingness to change workforce) * Workforce, |
required work flow/normal productivity) |
Units: Person
Note that this formulation has been changed to use normal productivity instead of productivity. If this were not the case, you would have a situation in which people were producing above average because of overtime, but this high output was considered the norm for bringing new people on. Depending on the project, this might actually be realistic. In this case, however, it would be necessary to use not productivity, but a perception of average productivity since productivity is not directly observable.
overtime = overtime lookup(schedule pressure)
Units: Dmnl
overtime lookup((0,0.7),(1,1),(1.2,1.2),(1.5,1.4),(2,1.45),(5,1.5) )
Units: Dmnl
productivity = normal productivity * overtime * eff fatigue productivity
Units: Dmnl
schedule pressure = IF THEN ELSE(scheduled time remaining<= 0 :AND: |
:NOT: project is done,max schedule pressure, |
ZIDZ(required work flow,normal workflow)) |
Units: Dmnl
The ZIDZ function is used because at the beginning of the simulation normal workflow is 0. Once the schedule is overrun schedule pressure goes to its maximum value until the time of completion.
time to average overtime = 2
Units: Month
work quality = normal work quality * eff fatigue quality
Units: Dmnl
With these changes in place we see the following behavior:
The peak in activity toward the end is accomplished with overtime. The quality toward the end does slip, and there is a small but noticeable amount of rework discovered after the project is completed.