Project Controls in the AI EraForecasting cost and schedule outcomes · Lesson 10 of 22

Schedule forecasting and earned schedule

Article · 14 min · 8 min lecture

Video lecture

Schedule forecasting and earned schedule

9 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 9

When will we really finish?

  • The network view: update the schedule properly
  • The performance view: earned schedule
  • Using both, and recovery options

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

Forecasting dates, not just dollars

Cost forecasts get most of the attention, but late projects usually become expensive projects. Schedule forecasting combines two views: the network view (what the updated critical path says) and the performance view (what the rate of progress says).

The network view: updating the schedule

Every period, the planner:

  1. Sets the data date (status date).
  2. Records actual starts and finishes.
  3. Updates remaining durations for in-progress work based on realistic assessment, not original durations minus elapsed time.
  4. Reschedules so all remaining work starts after the data date.
  5. Reviews the new critical path, the forecast finish date and changes in float.

A common trap is "percent complete" updating that leaves remaining duration untouched, so the forecast finish never moves until the very end.

The performance view: earned schedule

As seen earlier, SPI (EV/PV) converges to 1.0 at completion. Earned schedule (ES) fixes this by measuring schedule performance in time units.

  • Earned schedule (ES): the point in time at which the current EV should have been achieved according to the baseline.
  • Actual time (AT): the time elapsed to the data date.
  • SPI(t) = ES / AT
  • SV(t) = ES − AT
  • Independent estimate of duration, IEAC(t) = planned duration / SPI(t)

Worked example

Illustrative. Karachi Gateway Logistics has a 10-month plan. Cumulative PV: month 1 $150k, month 2 $350k, month 3 $600k, month 4 $800k. At the end of month 4 (AT = 4), EV = $700k.

EV of $700k lies between month 3 ($600k) and month 4 ($800k). Interpolate:

ES = 3 + (700 − 600) / (800 − 600) = 3 + 0.5 = 3.5 months
SPI(t) = 3.5 / 4 = 0.875
SV(t)  = 3.5 − 4 = −0.5 months
IEAC(t) = 10 / 0.875 ≈ 11.4 months

The performance view suggests finishing roughly 1.4 months late. Now compare with the network view. Suppose the updated schedule shows a finish at month 10.5 because the critical path activities are only two weeks behind, while the delays are mostly in non-critical work. The two views disagree, which is valuable: either non-critical delays will soon consume float and become critical, or the performance-based forecast is overly pessimistic. The controls team should investigate and report both, with an explanation.

Why use both views?

ViewStrengthWeakness
Network (CPM)Reflects logic, specific delays, critical pathDepends on realistic remaining durations; can be optimistic
Earned scheduleObjective, trend-based, easy to computeIgnores logic; treats all work equally

Agreement between the two increases confidence. Disagreement is a question to answer, not a number to average.

Schedule recovery options

When the forecast is late, typical levers are:

  • Crashing: add resources to critical activities (usually increases cost).
  • Fast-tracking: overlap activities that were planned in sequence (increases risk of rework).
  • Re-sequencing: change the method or order of work.
  • Scope options: phase handover or defer non-essential scope (requires client agreement).

Each option should be evaluated for cost, risk and feasibility, then modelled in a copy of the schedule before being adopted.

Forecast date template

Data date: ______
Baseline finish: ______   Network forecast finish: ______
Earned schedule: ES ____ AT ____ SPI(t) ____ IEAC(t) ____
Critical path summary (top 5 driving activities): ______
Float erosion since last period: ______
Recovery options evaluated: ______
Recommended forecast finish (P50 / P80 if available): ______

Common mistakes

  • Not updating remaining durations.
  • Reporting only SPI late in a project.
  • Presenting recovery plans that have not been tested in the schedule.
  • Ignoring float erosion on near-critical paths.
  • Assuming delays in non-critical work do not matter; they often become critical later.

AI note

Predictive models can analyse the history of many past schedules to estimate how likely each activity is to slip given its type, contractor and float. Used carefully, this helps focus attention; the planner still owns the forecast and must explain it.

Quick self-check

After each update, compare this period's forecast finish with last period's. If it moved, can you name the specific activities and causes responsible? If it did not move despite visible delays, check whether remaining durations were actually updated, whether constraints are holding dates artificially, and whether the delays sit on paths that still have float. A forecast finish that never changes until the final months is almost always a sign of weak updating rather than good performance.

Hands-on: earned schedule in Excel

Put cumulative PV by period in B2:B12 with B2 = 0 for period 0, and period numbers 0–10 in A2:A12.

k        =MATCH(EV, B2:B12, 1)-1                      last whole period with PV ≤ EV
ES       =k + (EV-INDEX(B2:B12,k+1)) / (INDEX(B2:B12,k+2)-INDEX(B2:B12,k+1))
SPI_t    =ES/AT
SV_t     =ES-AT
IEAC_t   =PD/SPI_t                                    PD = planned duration

If EV equals BAC, ES equals the planned duration; guard INDEX(...,k+2) for that case. Karachi: k = 3, ES = 3 + 100/200 = 3.5, SPI(t) = 0.875, IEAC(t) ≈ 11.43 months.

Hands-on: earned schedule in Python

import numpy as np

def earned_schedule(pv_cum, ev):
    """pv_cum: cumulative PV at the end of periods 0..n (pv_cum[0] = 0)."""
    pv = np.asarray(pv_cum, dtype=float)
    if ev >= pv[-1]:
        return float(len(pv) - 1)
    k = int(np.searchsorted(pv, ev, side="right") - 1)   # last period with PV <= EV
    return k + (ev - pv[k]) / (pv[k + 1] - pv[k])

pv = [0, 150, 350, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]
es, at, pd_ = earned_schedule(pv, 700), 4, 10
print(f"ES {es:.2f}  SPI(t) {es/at:.3f}  SV(t) {es-at:+.2f}  IEAC(t) {pd_/(es/at):.2f}")

Periods after month 4 in the list are illustrative. Run it per control account and plot SPI(t) as a trend.

How to measure success

  • Forecast finish reported from both views every month, with an explanation when they differ by more than an agreed tolerance.
  • Remaining durations updated for every in-progress activity at each status date.
  • Month-on-month movement of the forecast finish explained by named activities.

Key takeaways

  • Update actual dates and realistic remaining durations every period; re-run CPM from the data date.
  • Earned schedule measures schedule performance in time: SPI(t) = ES/AT and IEAC(t) = PD/SPI(t).
  • Compare network and performance forecasts; investigate disagreement rather than averaging.
  • Test recovery options (crashing, fast-tracking, re-sequencing) in a schedule copy before committing.

Check your understanding

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

  1. At month 6, cumulative PV is $500k at month 4 and $700k at month 5. EV is $600k. What is the earned schedule?
  2. Continuing the previous question (AT = 6, planned duration 12 months), what is IEAC(t)?
  3. What is the main advantage of earned schedule over classic SPI?
  4. The network forecast says month 10.5 but the earned-schedule forecast says month 11.4. What should controls do?

Put it into practice

Using your own or a hypothetical S-curve, compute ES, SPI(t) and IEAC(t) for two consecutive months and describe the trend.

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.