Blog / Updates & control

Reading Schedule Variance: What Slipped and Why

A variance report tells you the completion date moved. It doesn't tell you why. Schedule variance analysis is the work of tracing that slip back through the network to the activities and events that caused it, and separating the ones that started late from the ones that took too long. This post shows a repeatable way to do that, with a worked example along a steel-to-dry-in path.

Two comparisons, two questions

Always look at variance two ways:

  • Against the baseline: cumulative slip since the plan was agreed. This is what the owner cares about and what any time extension discussion uses.
  • Against the last update: what changed this period. This is what the narrative needs to explain.

A milestone that's 12 days behind baseline but only moved 1 day this month is a different conversation from one that's 12 behind and moved 9 this month. Report both. For baseline basics, see Baselines: When to Set Them and When to Re-Baseline.

The basic measures

For each activity:

MeasureFormulaWhat it tells you
Start varianceCurrent start − baseline startDid it start late?
Finish varianceCurrent finish − baseline finishDid it finish late?
Duration varianceCurrent duration − baseline durationDid it take longer?
Float changeCurrent total float − baseline total floatHow much cushion was used?

Positive start or finish variance means late. Note that finish variance = start variance + duration variance. That identity is the key to the whole analysis: every day of finish slip either came in through a late start or was added by the activity itself running long.

Start with the milestone, then walk backward

  1. Pick the milestone that moved (substantial completion, TCO, dry-in).
  2. Find its driving predecessor in the current update: the one whose finish actually determines the milestone's date. Most tools can show the driving path or trace driving logic.
  3. Keep walking backward through driving predecessors until you reach an activity whose start variance is zero, or whose late start isn't explained by any late predecessor.
  4. For each activity on that path, record start variance and finish variance. Where finish variance is bigger than start variance, that activity added delay. Where it's smaller, that activity recovered some.

Worked example

Working days, 0-based day numbers from NTP. Substantial completion is forecast 3 days late versus the baseline. The driving path in the current update runs through structural steel, deck, and roofing to dry-in, and from dry-in through interior work to substantial completion. Here's the front half:

ActivityBL startBL finishCur startCur finishStart varFinish varAdded (+) / recovered (−)
Steel delivery, sequence 135403742+2+20
Steel erection40604262+2+20
Metal deck and shear studs60706275+2+5+3
Roofing70827585+5+3−2
Building dry-in (milestone)82828585+3+30

The "Added / recovered" column is finish variance minus start variance: the days each activity contributed on its own.

Steel delivery has a start variance of +2 but no late predecessor. The fabricator simply shipped 2 days late. When you walk back and reach an activity with a start variance and no slipped predecessor, that's where the delay originated, even though its "added" column shows zero. Count those days as entering at that activity.

Now the story reads cleanly:

  • +2 days: steel shipped late from the fabricator. Erection started 2 days late and ran to its planned duration.
  • +3 days: metal deck took 13 days instead of 10. Field notes show two rain days and a re-inspection of shear stud welds.
  • −2 days: the roofer added a second crew and finished in 10 days instead of 12.
  • Net +3 days at dry-in, which carries through the interior path to substantial completion.

Check the arithmetic: 2 + 3 − 2 = 3. It matches the dry-in finish variance. If your attributed causes don't add up to the milestone's variance, you've missed something, usually a logic change, a calendar change, or a path that shifted.

When the critical path shifts

Sometimes the milestone moved because a different path became driving. Last month the steel path drove dry-in; this month the curtain wall path does, because embed plate rework pushed panel installation.

Signs this happened:

  • The driving predecessor of the milestone is a different activity than last month.
  • Activities on the old critical path now show positive float.
  • The new driving path's activities show large float drops.

Explain it directly: "The critical path to dry-in now runs through curtain wall installation on the north elevation, which overtook the roofing path due to embed rework on levels 3 and 4." Watch near-critical paths each month so the shift doesn't surprise you.

Variance that isn't from field performance

Not every slip is the field's fault. Before attributing variance to performance, rule out:

  • Logic revisions made this period. A new relationship can add days.
  • Duration changes on unstarted activities.
  • Calendar changes, such as added holidays or weather days.
  • Change order fragnets inserted this period.
  • Scheduling option changes, like switching between retained logic and progress override. See Retained Logic vs. Progress Override.

The cleanest way to isolate these is to save a progress-only version before making revisions, then compare progress-only against last month and against the revised version separately. Whatever moved between progress-only and revised is from revisions, not field performance. Comparison tools that diff two schedule versions activity by activity make this faster; in schedule.construction that's what Claim Digger does.

Writing the variance explanation

Good variance narrative is specific and short:

Substantial completion moved 3 workdays this period. Steel sequence 1 shipped 2 days late from the fabricator; metal deck ran 3 days long due to two rain days and a shear stud re-inspection; the roofer recovered 2 days by adding a crew. The driving path remains steel to deck to roofing to dry-in.

Avoid "various delays," "ongoing coordination issues," and "the schedule remains generally on track." Reviewers read those as "we didn't look."

If a variance has delay or entitlement implications, document the cause carefully and send any required notices. See Delay Notices. Contracts vary on notice and documentation requirements, so read yours.

Float as an early warning

Finish variance tells you what already happened. Float change tells you what's about to. An activity with zero finish variance whose total float dropped from 15 to 3 days hasn't slipped yet, but it's about to become critical. Run a report of activities whose float dropped by more than a set amount each update, and look at why.

Key takeaways

  • Compare to the baseline for cumulative slip and to the last update for this period's change.
  • Finish variance = start variance + duration variance; use that to find where days were added or recovered.
  • Walk the driving path backward from the milestone until you find where the delay entered.
  • Make sure attributed causes sum to the milestone variance; if not, look for revisions or a path shift.
  • Watch float drops to catch slips before they reach the critical path.