CON-335 · Lesson 11 of 12 · 24 min

Recovering a late schedule

Every superintendent eventually faces a schedule that has slipped. A supplier fails, an inspection drags, a design change lands in the middle of rough-in, or a run of small problems adds up until the forecast finish is weeks past the contract date. How the team responds in the first few weeks after the slip is recognized often decides whether the project recovers. Panic responses, such as pushing every trade to work overtime or letting trades start wherever they can, usually make things worse. A structured response, based on a clear diagnosis and a costed choice of recovery options, usually works.

CON-210 covered schedule updating and compression techniques, and CON-420 covered delay analysis, notice and the contractual consequences of delay. PMP-130 explained crashing by cost slope. This lesson brings those tools into the field: how Dana's team diagnosed a slip on Larkspur Commons, chose a recovery plan, and managed it with the trades and the owner.

The situation on Larkspur Commons

Fourteen weeks into the interiors, the trade train was no longer on time. Three things had gone wrong. The sprinkler supplier had shipped the wrong fittings for levels 5 and 6, delaying sprinkler rough-in in those zones by about a week. The City's inspection of level 5 east had failed on firestopping, costing four days while the firestopping was redone and reinspected. And windows on the north elevation of level 6 had arrived late, delaying the close-in of that floor. Each problem on its own had seemed manageable. Together, the look-ahead comparison with the master schedule showed the turnover of level 6, the last residential floor, forecast 12 working days after its milestone, with the owner's first tenants booked to move in shortly after that milestone.

Step 1: diagnose before acting

The first step is to understand the delay: where it is, what caused it, whether it is on the critical path, and whether it will grow. Dana's team asked four questions.

  • Which activities are now critical? A delay that consumed float on a non-critical path may matter less than it seems; one on the critical path delays the finish directly.
  • What caused it, and is the cause finished? A one-time event, such as the wrong fittings, is different from an ongoing problem, such as an undersized crew that will keep falling behind.
  • Who is responsible? Delays caused by the owner or the design team may entitle the contractor to more time; delays caused by subcontractors or suppliers usually do not, though the subcontract may give the contractor recourse. CON-420 covered the analysis.
  • What is the trend? Is the slip stable, or has it grown every week?

Omar recalculated the remaining schedule with the delays included. The simplified network below shows the remaining work on levels 5 and 6 and the turnover activities, with the delays added to the affected activities.

# Remaining work after the delays: forward and backward pass (working days from today)
acts = {  # name: (duration, predecessors)
    "Sprinkler rough-in L5-L6": (10 + 5, []),          # 5-day delay from wrong fittings
    "Other rough-in L5-L6":     (10, ["Sprinkler rough-in L5-L6"]),
    "Inspection and insulation":(8 + 4, ["Other rough-in L5-L6"]),   # 4 days lost to failed inspection
    "Windows L6 north":         (8 + 6, []),            # late delivery
    "Air barrier and drying L6":(17, ["Windows L6 north"]),
    "Drywall L5-L6":            (20, ["Inspection and insulation", "Air barrier and drying L6"]),
    "Finishes L5-L6":           (25, ["Drywall L5-L6"]),
    "Elevator 2 inspection":    (30, []),
    "Life safety verification": (6, ["Finishes L5-L6", "Elevator 2 inspection"]),
    "Turnover L6":              (3, ["Life safety verification"]),
}
es, ef = {}, {}
for a, (d, p) in acts.items():
    es[a] = max((ef[x] for x in p), default=0); ef[a] = es[a] + d
finish = max(ef.values())
lf, ls = {}, {}
for a in reversed(list(acts)):
    succ = [s for s, (_, p) in acts.items() if a in p]
    lf[a] = min((ls[s] for s in succ), default=finish); ls[a] = lf[a] - acts[a][0]
milestone = 79                                         # turnover milestone, working days from today
for a in acts:
    tf = ls[a] - es[a]
    print(f"{a:<28} ES {es[a]:>3} EF {ef[a]:>3} float {tf:>3}{'  critical' if tf == 0 else ''}")
print(f"Forecast turnover day {finish}; milestone day {milestone}; late by {finish - milestone} days")
Output
Sprinkler rough-in L5-L6     ES   0 EF  15 float   0  critical
Other rough-in L5-L6         ES  15 EF  25 float   0  critical
Inspection and insulation    ES  25 EF  37 float   0  critical
Windows L6 north             ES   0 EF  14 float   6
Air barrier and drying L6    ES  14 EF  31 float   6
Drywall L5-L6                ES  37 EF  57 float   0  critical
Finishes L5-L6               ES  57 EF  82 float   0  critical
Elevator 2 inspection        ES   0 EF  30 float  52
Life safety verification     ES  82 EF  88 float   0  critical
Turnover L6                  ES  88 EF  91 float   0  critical
Forecast turnover day 91; milestone day 79; late by 12 days

The forecast turnover is 12 days late. The critical path runs through sprinkler rough-in, the other rough-in, the inspection and insulation step, drywall, finishes and the turnover activities. The late windows on level 6, with the air barrier and drying that follow them, have used most of their float but are not yet critical; if they slip another six days they will be. The elevator inspection has plenty of float. Recovery must therefore shorten activities on the critical path, and it must not let the windows become critical.

The causes were one-time events: the correct fittings had arrived, the firestopping crew had been retrained, and the windows were on site. The slip was therefore stable rather than growing, which made recovery realistic. If the cause had been an ongoing shortfall, such as a sprinkler crew too small for the takt, the first priority would have been to fix that, because no recovery plan survives a cause that keeps adding delay.

Step 2: consider the options

Recovery options fall into a few families. Most have been introduced earlier in this course or in CON-210; the task now is to choose among them.

Families of recovery options.
FamilyExample on Larkspur CommonsTypical cost and risk
ResequencingInstall cabinets before the final paint coat, with touch-up later (a preferential dependency, Lesson 2)Low cost; some touch-up and protection; needs agreement of trades
Fast-tracking (overlapping)Start drywall in the zones that pass inspection while others finish; split the trainLow direct cost; more coordination; risk of stacking
Adding crewsA second sprinkler crew and a third drywall crew for four weeksCost of extra mobilization and supervision; limited by labour supply and density
Extended hoursSaturday shifts for selected trades for four weeksPremium pay; productivity falls if sustained; neighbour and noise limits
Prefabrication or method changePrefabricated sprinkler branch assemblies for level 6Set-up cost; only useful if lead time allows
Removing constraintsPre-inspections, faster answers, kittingLow cost; often overlooked
Scope or milestone changeAsk the owner to accept phased turnover of level 6 by zoneRequires owner agreement; may reduce the effect of delay

The best recovery plans usually combine several low-cost options before turning to expensive ones. Removing constraints and resequencing cost little and carry little risk, so they come first. Adding crews and extended hours cost more and run into labour and productivity limits, so they are used where they give the most time per dollar.

A chart of recovery options plotted by days saved and cost, showing resequencing and constraint removal as cheap with modest savings, extra crews and Saturday shifts as more expensive, and a cumulative curve of the chosen plan reaching 12 days
Recovery options by cost and days saved (illustrative). Cheap options first, then the best value of the expensive ones.

Step 3: cost the options

Mei and Omar estimated, with the trades, how many days each option would save on the critical path and what it would cost. Some savings could not be combined: the third drywall crew and the Saturday drywall shifts both shortened drywall, and drywall could not be shortened by more than about six days before the zones ran out of ready area. The script below chooses options in order of cost per day saved until the 12 days are recovered, respecting the limits on each activity.

# Choose recovery options by cost per critical-path day saved (illustrative estimates)
options = [  # (option, activity shortened, days saved, cost in dollars)
    ("Pre-inspect every zone; inspector booked ahead",  "Inspection and insulation", 2, 3_000),
    ("Cabinets before final paint coat",                "Finishes L5-L6",            4, 9_000),
    ("Second sprinkler crew, 3 weeks",                  "Sprinkler rough-in L5-L6",  4, 26_000),
    ("Third drywall crew, 4 weeks",                     "Drywall L5-L6",             4, 38_000),
    ("Saturday drywall shifts, 4 weeks",                "Drywall L5-L6",             3, 31_000),
    ("Saturday finishing shifts, 4 weeks",              "Finishes L5-L6",            3, 41_000),
    ("Prefabricated sprinkler branches L6",             "Sprinkler rough-in L5-L6",  2, 22_000),
]
limit = {"Drywall L5-L6": 6, "Sprinkler rough-in L5-L6": 5, "Finishes L5-L6": 6, "Inspection and insulation": 3}
need, saved, cost, used = 12, 0, 0, {}
for name, act, days, c in sorted(options, key=lambda o: o[3] / o[2]):
    if saved >= need:
        break
    room = limit[act] - used.get(act, 0)
    take = min(days, room, need - saved)
    if take <= 0:
        continue
    part = c * take / days
    used[act] = used.get(act, 0) + take; saved += take; cost += part
    print(f"{name:<48} {take} days  ${part:>9,.0f}  (${c / days:,.0f} per day)")
print(f"Recovered {saved} of {need} days for about ${cost:,.0f}")
Output
Pre-inspect every zone; inspector booked ahead   2 days  $    3,000  ($1,500 per day)
Cabinets before final paint coat                 4 days  $    9,000  ($2,250 per day)
Second sprinkler crew, 3 weeks                   4 days  $   26,000  ($6,500 per day)
Third drywall crew, 4 weeks                      2 days  $   19,000  ($9,500 per day)
Recovered 12 of 12 days for about $57,000

The cheapest options come first: pre-inspections and resequencing the cabinets recover six days for about twelve thousand dollars. The second sprinkler crew adds four more at a moderate cost per day. The last two days come from the third drywall crew, used for only part of its planned period. The Saturday finishing shifts and the prefabricated sprinkler branches, which were the most expensive per day, are not needed. Because the pre-inspections and the second sprinkler crew save six days ahead of the drywall, they use up all six days of float on the level 6 windows and air barrier, which become critical too; Omar added them to the daily watch list. The plan recovers the full 12 days for under sixty thousand dollars, which Dana compared with the cost of a 12-day delay: about twelve days of general conditions and supervision, plus the owner's likely claims for delayed occupancy. The recovery plan was clearly cheaper.

Estimates like these are uncertain. Dana built in a margin by keeping the Saturday finishing shifts as a reserve option, to be triggered if the weekly look-ahead comparison showed the recovery falling short.

Step 4: agree and communicate the plan

A recovery plan needs the trades' agreement, because they provide the crews and do the work. Dana presented it at a special coordination meeting with the trades' foremen and project managers: the diagnosis, the target, the options chosen and why, and what each trade would do differently. The subcontractors whose crews were affected negotiated the extra costs with the project manager, and those costs were recorded against the cause of delay so that they could be recovered where the subcontract allowed. The look-ahead and the takt plan were updated to show the new sequence, and the revised plan was posted on every floor.

The owner was told early and plainly. Under the CCDC 2 contract on Larkspur Commons, the contractor is entitled to an extension of the contract time for delays caused by the owner or the consultant and for certain other causes beyond its control, subject to the notice requirements CON-420 described. The wrong fittings, the failed inspection and the late windows were all within the contractor's sphere, through its subcontractors and suppliers, so Thornbury Builders could not claim more time for them. Dana and the project manager presented the recovery plan to the owner as the contractor's own effort to meet the contract date, at its own cost, while recording the costs against the responsible subcontractors.

Directed and constructive acceleration

Recovery is different when the delay was caused by the owner. If the owner causes delay but refuses to extend the contract time and insists that the original date be met, the contractor may be forced to accelerate at its own expense to avoid liquidated damages. Courts and arbitrators in both Canada and the United States have recognized that in some circumstances this amounts to constructive acceleration, and the contractor may be able to recover its acceleration costs. When the owner instead explicitly directs the contractor to accelerate, that is directed acceleration, normally handled as a change with an agreed price. CON-420 explained both. For the superintendent, the practical lessons are to give notice of owner-caused delays promptly, to record the facts, and to make sure any acceleration is either agreed in writing or clearly documented as a response to the owner's refusal to extend time.

Step 5: manage the recovery

A recovery plan is a new baseline for the next few weeks, and it must be managed even more closely than the original. Dana tracked it in three ways. The weekly look-ahead comparison showed the forecast turnover date every week, so the team could see whether the recovery was working. The PPC and variance reasons showed whether the trades were keeping their new commitments. And each recovery action had an owner and a date on the constraint log, so nothing was left to good intentions.

Recovery plans fail for predictable reasons: the extra crews do not arrive or are less productive than assumed; the resequenced work creates stacking; overtime drags on and productivity falls; or a new problem appears and there is no margin left. Watching the forecast weekly and holding a reserve option, as Dana did, gives time to react.

Three weeks after the plan began, the forecast turnover had moved from 12 days late to 3 days late. The second sprinkler crew had been very effective, the cabinets-before-paint change had worked better than expected, and the pre-inspections had produced clean passes in every remaining zone. The third drywall crew was released a week early. The remaining three days were recovered by a single Saturday of finishing work on level 6, which was cheaper than expected because only two trades were needed.

When recovery is not possible

Not every slip can be recovered. If the cause is ongoing, if labour is not available, if the remaining work is too short to absorb changes, or if the cost of recovery exceeds the cost of delay, the honest answer may be a new forecast date. Telling the owner early, with a clear explanation and a credible new date, is far better than promising recovery and missing again. Owners can plan around a known late date; they cannot plan around a date that keeps moving. The look-ahead and the schedule update must then be revised to the new forecast, and the team's effort turned to holding it.

Common mistakes

  • MistakeOrdering overtime for every trade as soon as a slip appears.

    InsteadDiagnose first: find the critical path, the cause and the trend, then choose options.

  • MistakeShortening activities that are not on the critical path.

    InsteadRecover time only on critical activities, and watch near-critical ones so they do not become critical.

  • MistakeStarting with the most expensive options.

    InsteadUse low-cost options such as constraint removal and resequencing first, then the best value of the expensive ones.

  • MistakeAccelerating at the owner's demand after an owner-caused delay without paperwork.

    InsteadGive notice, record the facts and agree any acceleration in writing or document it as constructive acceleration.

  • MistakePromising recovery that the data do not support.

    InsteadTell the owner early and give a credible new forecast if recovery is not possible.

Summary and key terms

  • A structured recovery starts with diagnosis: critical path, cause, responsibility and trend.
  • At Larkspur Commons, three one-time problems put the level 6 turnover 12 days late; the slip was stable.
  • Recovery options include resequencing, fast-tracking, adding crews, extended hours, prefabrication, removing constraints and changing scope or milestones.
  • Options should be costed per critical-path day saved and chosen cheapest first, within limits on each activity.
  • The chosen plan recovered 12 days for under sixty thousand dollars, well below the cost of delay.
  • The trades must agree the plan; the owner must be told early, and the contract determines who bears the cost.
  • Directed and constructive acceleration arise when the owner causes delay; notice and records are essential.
  • Recovery must be managed weekly with a reserve option; if recovery is not possible, give the owner a credible new date early.
Schedule recovery
Actions taken to bring a late schedule back toward its target date.
Resequencing
Changing the order of work, usually by breaking preferential dependencies.
Fast-tracking
Overlapping activities that would normally follow one another.
Crashing
Shortening an activity by adding resources, at extra cost.
Cost per day saved
The cost of a recovery option divided by the critical-path days it saves.
Directed acceleration
Acceleration the owner explicitly instructs, normally priced as a change.
Constructive acceleration
Acceleration forced on the contractor when the owner refuses a justified time extension.
Reserve option
A recovery action held back for use if the main plan falls short.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. What four questions did Dana's team ask to diagnose the delay?

    Show answer

    Which activities are critical; what caused it and is the cause finished; who is responsible; what is the trend.

  2. In the recalculated network, why were the windows not the first target for recovery?

    Show answer

    They had used most of their float but were not yet on the critical path.

  3. Why did it matter that the causes were one-time events?

    Show answer

    The slip was stable, so recovery was realistic; an ongoing cause would keep adding delay.

  4. Which options came first in the recovery choice, and why?

    Show answer

    Pre-inspections and resequencing the cabinets, because they had the lowest cost per day saved.

  5. About how much did the recovery plan cost, and how many days did it recover?

    Show answer

    About fifty-seven thousand dollars for 12 days.

  6. Why could Thornbury Builders not claim a time extension for these delays?

    Show answer

    The causes were within its sphere, through its subcontractors and suppliers.

  7. What is constructive acceleration?

    Show answer

    Acceleration forced on the contractor when the owner refuses a justified time extension and insists on the original date.

  8. What should the superintendent do if recovery is not possible?

    Show answer

    Tell the owner early and give a credible new forecast date, then revise the plans to hold it.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz