Project Controls in the AI EraFoundations of project controls · Lesson 3 of 22

Scheduling and the critical path

Video lesson · 16 min · 9 min lecture

Video lecture

Scheduling and the critical path

10 chapters · about 9 min · full transcript

Coming soon

Chapter 1 of 10

Which chain of work decides your finish date?

  • Forward and backward pass
  • Total float and the critical path
  • Schedule quality checks before baselining

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

From WBS to schedule

A schedule turns work packages into activities with durations, logic links and resources. The standard technique is the critical path method (CPM). Its output is the earliest possible finish date for the project and the chain of activities that determines it.

The building blocks

  • Activity: a unit of work with a duration (e.g., "Install ductwork Level 2 – 10 days").
  • Logic (dependencies): mostly finish-to-start (FS): B cannot start until A finishes. Start-to-start (SS) and finish-to-finish (FF) are also used; start-to-finish (SF) is rare.
  • Lags and leads: delays or overlaps on a link. Use sparingly and document why.
  • Constraints: imposed dates ("start no earlier than"). Hard constraints override logic and can hide real delays, so keep them minimal.
  • Float (slack): how much an activity can slip without delaying the project finish (total float) or its successor (free float).

The forward and backward pass

  1. Forward pass: compute the Early Start (ES) and Early Finish (EF) of each activity from the project start. EF = ES + duration. An activity's ES is the latest EF of its predecessors.
  2. Backward pass: from the project finish, compute Late Finish (LF) and Late Start (LS). LS = LF − duration. An activity's LF is the earliest LS of its successors.
  3. Float: Total float = LS − ES (or LF − EF).
  4. Critical path: the longest path through the network; activities on it typically have zero total float (in a schedule without imposed constraints).

Worked example

Illustrative. A small solar installation for a factory near Lahore. Durations in days; all links finish-to-start.

ActivityDurationPredecessors
A Site survey3–
B Structural design5A
C Procure panels10A
D Install mounting4B
E Install panels6C, D
F Grid connection approval8B
G Commission2E, F

Forward pass (day numbers as elapsed days):

ActESEF
A03
B38
C313
D812
Emax(13, 12) = 1319
F816
Gmax(19, 16) = 1921

Project duration = 21 days. Backward pass from 21: G LF 21, LS 19. E LF 19, LS 13. F LF 19, LS 11. D LF 13, LS 9. C LF 13, LS 3. B LF = min(LS of D = 9, LS of F = 11) = 9, LS 4. A LF = min(LS of B = 4, LS of C = 3) = 3, LS 0.

Total float: A 0, B 1, C 0, D 1, E 0, F 3, G 0. Critical path: A → C → E → G (21 days). The team had been focusing on design and grid approval, but the real driver is panel procurement. A two-day procurement delay delays the whole project by two days; a two-day design delay only consumes one day of float and then delays the finish by one.

Schedule quality checks

Before baselining, run a quality check. Commonly used checks (inspired by widely used schedule assessment practices) include:

CheckWhat to look for
Missing logicEvery activity (except start and finish) has a predecessor and a successor
Leads / negative lagsAvoid; they obscure logic
Excessive lagsReplace long lags with real activities (e.g., "Concrete curing")
Hard constraintsMinimise; each should be justified
High floatVery large float often signals missing logic
Long durationsBreak down long activities so progress can be measured
ResourcesCritical resources assigned and levelled
Critical path testDelay one critical activity; the finish date should move by the same amount

Near-critical paths and resources

The critical path is not the only thing to watch. Paths with small float are near-critical and can become critical after a minor slip. Resource constraints also matter: if the same crane or specialist team is needed on two parallel activities, the resource-constrained path (sometimes called the critical chain concept) can be longer than the logic-only critical path.

Common mistakes

  • Using constraints instead of logic to force a desired end date.
  • Activities with no successors ("open ends"), making float meaningless.
  • Reporting "percent complete" on 60-day activities, which cannot be verified.
  • Ignoring near-critical paths.
  • Treating the baseline schedule as a static document rather than updating it every period with actual dates and remaining durations.

AI note

Modern scheduling assistants can scan a schedule for open ends, long lags or suspicious constraints and propose logic fixes in seconds. Treat these as suggestions: a planner must confirm every change, because only people who understand the work can judge whether a dependency is real.

Hands-on: CPM in Excel and in Python

Excel. One row per activity; predecessors in separate columns so formulas stay simple.

Columns: A ID | B Dur | C Pred1 | D Pred2 | E ES | F EF
E2 (A)  0
E3      =IF(D3="", INDEX($F:$F, MATCH(C3,$A:$A,0)),
            MAX(INDEX($F:$F, MATCH(C3,$A:$A,0)), INDEX($F:$F, MATCH(D3,$A:$A,0))))
F2      =E2+B2

For the backward pass add G LF, H LS and I TF = H2-E2; LF is the MIN of successors' LS. Conditional-format rows where I = 0.

Python. A compact CPM for checking an export from Primavera P6 or Microsoft Project (finish-to-start links only):

acts = {  # id: (duration, [predecessors])
    "A": (3, []), "B": (5, ["A"]), "C": (10, ["A"]), "D": (4, ["B"]),
    "E": (6, ["C", "D"]), "F": (8, ["B"]), "G": (2, ["E", "F"]),
}
es, ef = {}, {}
for a in acts:  # dict order here is already topological
    d, preds = acts[a]
    es[a] = max((ef[p] for p in preds), default=0)
    ef[a] = es[a] + d
finish = max(ef.values())
succ = {a: [b for b in acts if a in acts[b][1]] for a in acts}
lf, ls = {}, {}
for a in reversed(list(acts)):
    lf[a] = min((ls[s] for s in succ[a]), default=finish)
    ls[a] = lf[a] - acts[a][0]
for a in acts:
    print(a, es[a], ef[a], ls[a], lf[a], "float", ls[a] - es[a])

Output matches the table above: critical path A → C → E → G, 21 days. For real exports, sort activities topologically first and handle SS/FF links and lags, or rely on the scheduling tool and use scripts only as an independent check.

How to measure success

  • Zero open ends and no unjustified hard constraints at baseline.
  • The critical path test passes (delay in = delay out).
  • Near-critical paths (for example, total float under 10 working days) are listed and reviewed each period.

Key takeaways

  • CPM uses forward and backward passes to find early/late dates, float and the critical path.
  • Total float = LS − ES; the critical path is the longest path and usually has zero float.
  • Schedule quality checks (logic, lags, constraints, durations) should pass before baselining.
  • Watch near-critical paths and resource constraints, not just the logic-only critical path.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. In the worked solar example, why is panel procurement (C) critical while structural design (B) is not?
  2. How is total float calculated?
  3. A schedule shows many activities with very large float and several activities with no successors. What is the most likely cause?
  4. Why should hard date constraints be kept to a minimum?

Put it into practice

Take the solar example, add a new activity 'H Safety training, 4 days, after A, before E', and recompute the forward pass. Does the critical path change?

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.