Blog / Lookaheads & pull planning

A Superintendent's Guide to Reading a CPM Schedule

You don't have to build a CPM schedule to get value out of it, but you do need to read one. This post is for superintendents and foremen who get handed a 40-page Gantt chart every month and want to know which parts matter. It covers the columns, the bars, what float tells you about where you can and can't give ground, and the handful of things worth checking every week.

What the schedule is trying to tell you

A CPM schedule is a network: every activity has a duration and is linked to the activities that must come before and after it. The software runs through the links and calculates the earliest each activity can start and finish, the latest it can start and finish without delaying the project, and the difference between the two, which is float.

The point of all that math is two answers:

  • When will the job finish, if things go as logic and durations say?
  • Which activities drive that date? Those are the critical path. Slip one of them and the finish slips.

Everything else on the page supports one of those two answers. For the background, see what is the critical path method.

The columns

Most printed schedules show some version of these:

ColumnWhat it means in the field
Activity IDA reference number. Use it in meetings so everyone is talking about the same line.
Activity nameShould say what and where: "Pour SOG Area B", not "Concrete"
Original durationWorkdays the activity was planned to take
Remaining durationWorkdays left, as of the data date
Start / FinishEarly dates for unstarted work; actual dates (often marked with an "A") for work that has started or finished
Total floatWorkdays this activity can slip before it delays the project finish (or the milestone it's tied to)
Percent completeProgress reported at the last update. Less useful than remaining duration.

Two things trip people up.

First, durations are almost always in workdays, on the activity's calendar. A 10-day activity on a five-day calendar is two calendar weeks, longer if there's a holiday.

Second, the dates are as of the data date, the "as of" date the schedule was statused to. Anything left of the data date line is history. Anything right of it is a forecast. The data date, explained goes deeper.

Reading the bars

On the Gantt chart:

  • Red (or otherwise highlighted) bars are usually critical activities: zero or negative total float.
  • Blue or green bars are non-critical.
  • A vertical line marks the data date. Bars to its left should show actual progress.
  • Thin lines between bars are the logic links, when they're turned on. If you can't see them, ask the scheduler for a print with relationships shown on the area you care about.
  • A second, thinner bar under the main one is often the baseline, so you can see how far each activity has moved from the original plan.

Color conventions vary by scheduler and by software. Check the legend.

Float, in field terms

Float is the most useful number on the schedule for a superintendent and the most misread. A small example. Workdays, finish-to-start links, 0-based convention (the first activity starts at day 0; a successor starts on the day its predecessor finishes).

IDActivityDurPredecessorsESEFLSLFTFFF
AFootings5none050500
BUnderslab plumbing4A59131780
CUnderslab electrical2A571517102
DSlab on grade pour2B, C911171988
ESteel erection10A51551500
FMetal deck4E1519151900
GL1 interior rough-in start6D, F1925192500

How to read it on site:

  • Footings, steel, deck, and interior rough-in are critical (TF 0). A rain day on steel erection is a day on the finish, unless you recover it.
  • The underslab and slab work has float. Underslab plumbing can slip 8 workdays before it touches the finish.
  • Total float is shared along a path. Plumbing (B) and the slab pour (D) both show 8 days, but it's the same 8 days. If plumbing uses 5 of them, the slab only has 3 left.
  • Free float is what's yours alone. Underslab electrical (C) has 10 days of total float but only 2 of free float. It can slip 2 days without bothering anyone. On day 3 of slipping, it starts pushing the slab pour, and now it's eating float the concrete sub was counting on.

That last point is why a sub saying "we have float" isn't the end of the conversation. Total float vs. free float covers the difference in more depth.

Negative float means the activity is already projected to miss its milestone or finish date by that many days. It isn't an error. It's the schedule telling you you're behind.

Relationship types and lags

Most links are finish-to-start: B can't start until A finishes. You'll also see:

  • SS (start-to-start): B can start once A has started, often with a lag. "Hang board can start 3 days after framing starts" is SS+3.
  • FF (finish-to-finish): B can't finish until A finishes. Taping finishes after hanging finishes.
  • Lags: a waiting period on the link. A 7-day lag after a pour might represent cure time. Ask what each lag stands for. Some hide real work nobody scheduled.

If a sequence on the schedule doesn't match how you'd build it, ask to see the relationships. FS, SS, FF, SF: choosing the right relationship type explains each one.

What to check every week

You don't need to read the whole schedule every week. Check these:

  1. The critical path for the next six weeks. Filter to TF of zero or less. Are those activities actually going to happen when the schedule says? If not, say so now.
  2. Near-critical work. Anything with less than about 10 workdays of float. These turn critical with one bad week.
  3. Activities in your area starting in the next three weeks. Are their predecessors really going to be done? Are materials, inspections, and crews lined up?
  4. Remaining durations on in-progress work. If the schedule says 4 days left on curtain wall and you know it's 12, the forecast is wrong and everyone downstream is planning off bad dates.
  5. Logic that doesn't match the field. If you're building the east wing first and the schedule says west, the forecast after the next update will be nonsense until the logic is fixed.

The most useful thing you can give the scheduler at each update is honest remaining durations and any sequence changes. Percent complete is less useful; "60%" on an activity doesn't say how many days are left.

When the schedule is wrong

It will be, sometimes. Common symptoms:

  • Activities that start the day after an unrelated activity finishes. Usually a missing or incorrect link.
  • Work you know is critical showing lots of float. Often an open end: an activity with no successor, so nothing pushes on it.
  • Dates that never move no matter what happens. Usually a hard constraint holding the activity in place.

Write these down and take them to the scheduler. Point at activity IDs. If you can view the schedule online instead of on paper, it's easier to trace the logic yourself. schedule.construction offers read-only links and lets superintendents update their own activities from the field, which shortens the loop between what you see and what the schedule says.

Key takeaways

  • The schedule answers two questions: when will the job finish, and what drives that date.
  • Durations are in workdays, and dates are forecasts from the data date forward.
  • Total float is shared along a path. Free float is the slack that belongs to one activity alone.
  • Every week, check the critical and near-critical work coming up, and correct remaining durations that are wrong.
  • When the logic doesn't match how you're building it, say so with activity IDs. Bad logic produces bad forecasts.