Blog / CPM fundamentals

What Is the Critical Path Method? A Plain Guide for Construction

The Critical Path Method (CPM) is a way of figuring out which work on a project actually controls the finish date, and how much slack everything else has. You list the activities, give each one a duration, connect them with logic, and do some simple arithmetic. The longest chain of dependent work through the network is the critical path. Anything on it that slips, the job slips. This guide covers what CPM is, how the math works on a small foundation-and-structure example, and the handful of things that trip people up when they start reading real schedules.

The three ingredients

A CPM schedule is built from three things. Get these right and the software does the rest. Get them wrong and the software produces confident nonsense.

  • Activities. Discrete pieces of work with a clear start and finish: "Form and pour footings, Area A," not "Foundations." Each one has a duration in working days.
  • Durations. How long the activity takes with the crew you plan to put on it. Not how long it took last time something went wrong, and not what the owner wants to hear. See Estimating Activity Durations the Field Will Believe.
  • Logic. The relationships between activities. Most are finish-to-start: footings finish, then slab on grade can start. Other types exist (start-to-start, finish-to-finish, start-to-finish), and they're covered in FS, SS, FF, SF: Choosing the Right Relationship Type.

Notice what's missing: dates. In a properly built CPM schedule, you don't type dates into activities. Dates fall out of the logic and durations. If you're typing dates, you're drawing a bar chart, not running CPM.

A small worked example

Here is a six-activity network for the start of a small building. Durations are in working days.

IDActivityDurationPredecessors
AMobilize and survey layout3none
BExcavate footings5A
CUnderground plumbing4A
DForm, reinforce, and pour footings6B
ESlab on grade4C, D
FSteel erection10D

All relationships are finish-to-start with no lag. The project is done when both E and F are done.

This post uses the 0-based convention: the first activity starts at time 0, early finish = early start + duration, and a successor's early start equals its predecessor's early finish. A start of 0 means "the beginning of day 1." A finish of 3 means "the end of day 3." Scheduling software displays these as calendar dates, and P6 shows them as dates, not numbers, but the arithmetic underneath is the same.

Forward pass: how early can each activity happen?

Walk left to right. Each activity's early start (ES) is the latest early finish (EF) among its predecessors.

A: ES 0,  EF 0 + 3  = 3
B: ES 3,  EF 3 + 5  = 8
C: ES 3,  EF 3 + 4  = 7
D: ES 8,  EF 8 + 6  = 14
E: ES = max(EF of C, EF of D) = max(7, 14) = 14,  EF 14 + 4 = 18
F: ES 14, EF 14 + 10 = 24
Project finish = max(18, 24) = 24

The project takes 24 working days.

Backward pass: how late can each activity happen without delaying the finish?

Walk right to left from the project finish of 24. Each activity's late finish (LF) is the earliest late start (LS) among its successors. LS = LF − duration.

F: LF 24, LS 24 - 10 = 14
E: LF 24, LS 24 - 4  = 20
D: LF = min(LS of E, LS of F) = min(20, 14) = 14,  LS 14 - 6 = 8
C: LF = LS of E = 20,  LS 20 - 4 = 16
B: LF = LS of D = 8,   LS 8 - 5  = 3
A: LF = min(LS of B, LS of C) = min(3, 16) = 3,  LS 0

Float and the critical path

Total float is LS − ES (or LF − EF; they're always equal). It's how much an activity can slip before it pushes the project finish.

IDESEFLSLFTotal float
A03030
B38380
C37162013
D8148140
E141820246
F142414240

The critical path is A, B, D, F: mobilize, excavate, footings, steel. Every one of those has zero float. If the footing pour slips two days because of a failed rebar inspection, steel erection starts two days late and the project finishes on day 26.

Underground plumbing (C) has 13 days of float. The plumber can show up a week late and nothing moves. The slab (E) has 6 days, because it's waiting on steel to finish before the project is done, not because anyone planned slack into it.

That's the whole method. Real schedules have hundreds or thousands of activities, multiple calendars, and constraints, but the forward and backward pass are the same arithmetic repeated. Forward and Backward Pass, Worked by Hand goes through a larger network step by step.

What the critical path tells you, and what it doesn't

The critical path tells you where management attention pays off. If you have one more crew, one more crane day, or one more inspector visit to spend, spend it on the critical path. Speeding up underground plumbing in the example above buys you nothing.

It does not tell you what's risky. An activity with 3 days of float and a shaky subcontractor is a bigger threat than a critical activity with a reliable crew and a short, well-understood duration. That's why experienced schedulers watch near-critical paths as closely as the critical one.

It also isn't permanent. The critical path moves. Steel gets delivered early, the elevator submittal gets kicked back twice, a weather week hits the roofing. Every update recalculates the network from the data date forward, and the path that controls the finish this month may not be the one that controlled it last month.

Common ways a critical path lies to you

CPM math is mechanical. The software will happily compute a critical path from a broken network. Watch for these:

  • Missing logic. An activity with no successor will show huge float, because nothing downstream depends on it. A punch list activity tied to nothing makes the project finish look safe when it isn't. See Open Ends and Dangling Logic.
  • Hard constraints. A "must finish on" date pins an activity regardless of what its predecessors do. The schedule looks on time because you told it to be on time.
  • Long durations. A 90-day activity called "MEP rough-in, all floors" hides whatever sequence is really driving. The critical path runs through it, but you can't tell which floor or which trade is the problem.
  • Lags doing the work of activities. A 20-day lag between "Submit curtain wall shop drawings" and "Fabricate curtain wall" hides the review, the resubmittal, and the approval. When it slips, there's nothing to status.
  • Unrealistic durations. If the field doesn't believe the durations, they won't work to the schedule, and the math stops reflecting reality within a month.

Critical path vs. longest path

In a simple network with one calendar and no constraints, the activities with zero total float and the longest path through the network are the same thing. In a real schedule they can diverge. Activities on a 4-day calendar may show different float than their 5-day neighbors. A "finish on or before" constraint on an interim milestone can create negative float on a path that isn't the longest. Primavera P6 lets you define critical as either "total float less than or equal to" a threshold or "longest path," and the two can disagree.

When they disagree, the longest path is usually the better answer to "what's driving the finish date," and the total float view is the better answer to "what's in trouble against a contract date."

Reading a CPM schedule on a real job

If you're picking up a schedule someone else built, start here:

  1. Find the project finish milestone and any contract milestones (substantial completion, TCO, owner move-in).
  2. Filter to the critical path or the longest path. Read it start to finish as a story: does that sequence make sense to a superintendent?
  3. Look at the activities with the most float. Huge float usually means missing logic, not good luck.
  4. Check for constraints and see what each one is doing.
  5. Compare this update to the last one. What moved, and why?

Most CPM tools will do the math for you. schedule.construction, for example, runs the forward and backward pass in the browser every time you drag a bar or draw a dependency, so you can see float change as you edit. The math was never the hard part. Building logic that matches how the job will actually get built is the hard part.

Key takeaways

  • CPM finds the longest chain of dependent work through the project. That chain sets the finish date.
  • Dates come from logic and durations. If you're typing dates in, you're not using CPM.
  • Total float = LS − ES. Zero (or negative) float means the activity drives the finish.
  • The critical path changes every update. Watch near-critical work too.
  • A critical path is only as honest as the logic beneath it. Missing ties, hard constraints, and long lags all produce clean-looking schedules that are wrong.