---
title: "Schedule forecasting and earned schedule"
description: "Forecasting dates, not just dollars Cost forecasts get most of the attention, but late projects usually become expensive projects. Schedule forecasting…"
url: https://optimizeall.com/learn/project-controls-with-ai/schedule-forecasting-and-earned-schedule
updated: 2026-10-05
---

Project Controls in the AI Era · Forecasting cost and schedule outcomes · lesson 10 of 22 · 14 min

# Schedule forecasting and earned schedule

## 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?

| View | Strength | Weakness |
|---|---|---|
| Network (CPM) | Reflects logic, specific delays, critical path | Depends on realistic remaining durations; can be optimistic |
| Earned schedule | Objective, trend-based, easy to compute | Ignores 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`.

```text
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

```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.

## Video lecture: Schedule forecasting and earned schedule

Lecture coming soon · 9 chapters · about 8 minutes. Read the full transcript below.

1. When will we really finish?
2. Why it matters
3. The network view
4. The concept: earned schedule
5. Worked example one: a simple interpolation
6. Worked example two: Karachi Gateway Logistics
7. Watch me do it: earned schedule in a spreadsheet
8. Recovery options and common mistakes
9. Recap and try this now

## Lecture transcript

### When will we really finish?

Late projects usually become expensive projects. Crews stay longer, equipment hire runs on, supervision costs keep ticking and revenue starts later. Yet in many organisations, schedule forecasting gets far less rigour than cost. The finish date simply doesn't move until suddenly it moves by months. In this lecture you'll learn two complementary ways to forecast the finish. The network view, from a properly updated critical path schedule. And the performance view, using earned schedule, which fixes the flaw we saw in the schedule performance index. Then we'll look at what to do when the two views disagree, and the recovery options available. By the end you'll be able to calculate earned schedule by hand and explain a forecast finish date with confidence.

### Why it matters

Why does this matter? First, money. Site overheads, equipment hire and supervision are time-dependent, so every week of delay has a cost, often a large one. Second, the tool most people reach for, SPI, has a known flaw: because it's measured in money, earned value converges on planned value at the end, so SPI drifts towards one even on a project that's months late. Late in a project, it tells you almost nothing. Third, confidence. When a network forecast and a performance-based forecast agree, you can present a date with conviction. When they disagree, you've found a question worth answering before your sponsor asks it.

### The network view

The network view comes from updating the schedule properly. Every period, the planner sets the data date, the status date. Records actual starts and finishes. Then, and this is the step most often skipped, updates the remaining duration of every in-progress activity based on a realistic assessment. Not the original duration minus elapsed time. A realistic view of what's left. Then the schedule is recalculated so all remaining work starts after the data date, and the planner reviews the new critical path, the forecast finish and changes in float. The trap is percent-complete updating that leaves remaining duration untouched. The forecast finish never moves, because the tool assumes everything will speed up to catch up. It won't.

### The concept: earned schedule

Earned schedule is a beautifully simple idea. Instead of asking how much money's worth of work we're behind, it asks how much time we're behind. Here's the analogy. Imagine a marathon runner with a planned split for every kilometre. At the two-hour mark, she's at the point she planned to reach at one hour fifty. Her earned schedule is one hour fifty. Her actual time is two hours. So she's ten minutes behind. In project terms: earned schedule is the point in time at which your current earned value should have been achieved according to the baseline. Actual time is the time elapsed. SPI of t is earned schedule divided by actual time. SV of t is earned schedule minus actual time. And an independent estimate of duration is the planned duration divided by SPI of t.

### Worked example one: a simple interpolation

Let's try a simple one. Cumulative planned value is one hundred at the end of month two and one hundred and sixty at the end of month three. We're at the end of month three, and earned value is one hundred and thirty. Where does one hundred and thirty sit on the plan? Between month two and month three. How far between? One hundred and thirty minus one hundred is thirty. The gap between the months is sixty. Thirty over sixty is a half. So earned schedule is two and a half months. Actual time is three. SPI of t is two and a half over three, about nought point eight three. And schedule variance in time is minus half a month. That's a statement a sponsor instantly understands: we're about two weeks behind.

### Worked example two: Karachi Gateway Logistics

Now the realistic case. Karachi Gateway Logistics has a ten-month plan. Cumulative planned value: one fifty at month one, three fifty at month two, six hundred at month three, eight hundred at month four. At month four, earned value is seven hundred thousand. It sits exactly halfway between six hundred and eight hundred, so earned schedule is three and a half months. SPI of t: three and a half over four, nought point eight seven five. Independent duration estimate: ten divided by nought point eight seven five, about eleven point four months. Now suppose the updated network schedule shows a finish at ten and a half months, because the critical path is only two weeks behind and most delays are in work with float. The two views disagree. That's valuable. Either the non-critical delays will soon eat their float and become critical, or the performance forecast is too pessimistic. Investigate, and report both with an explanation.

### Watch me do it: earned schedule in a spreadsheet

Here's how I calculate earned schedule in a spreadsheet so it updates itself every month. One column with cumulative planned value by period, starting with zero at period zero. Then MATCH, with match type one, finds the last period where planned value is less than or equal to the current earned value. For Karachi that's month three. Then I interpolate: that month, plus earned value minus planned value at that month, divided by the planned value increase in the following month. Three plus one hundred over two hundred. Three point five. From there, SPI of t is earned schedule over actual time, and the independent estimate is planned duration divided by SPI of t. The exact formulas are in the lesson, along with a short Python function that does the same thing for every control account at once.

### Recovery options and common mistakes

When the forecast is late, you have four main levers. Crashing: add resources to critical activities, which usually costs more. Fast-tracking: overlap activities that were planned in sequence, which raises the risk of rework. Re-sequencing: change the method or order of work. And scope options: phase the handover or defer non-essential scope, which needs the client's agreement. Whatever you choose, model it in a copy of the schedule before you adopt it. The common mistakes: not updating remaining durations. Relying on SPI late in the project. Presenting recovery plans that were never tested in the schedule. Ignoring float erosion on near-critical paths. And assuming delays in non-critical work don't matter. They often become critical later.

### Recap and try this now

To recap. Forecast the finish date from two directions. The network view, from a schedule updated with actual dates and realistic remaining durations. And the performance view, using earned schedule: interpolate your earned value onto the planned value curve to get earned schedule, then SPI of t and an independent duration estimate. When the two agree, present with confidence. When they disagree, that's a question to answer, not a number to average. A note on AI: predictive models trained on past schedules can estimate how likely each activity is to slip. That helps focus attention, but the planner still owns the forecast and must explain it. Your try-this-now: using your own or a hypothetical S-curve, compute earned schedule, SPI of t and the independent duration estimate for two consecutive months, and describe the trend.

## 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.

## Try it

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

- [Previous: EAC and ETC: forecasting the final cost](https://optimizeall.com/learn/project-controls-with-ai/eac-and-etc-methods)
- [Next: Running forecast reviews that change decisions](https://optimizeall.com/learn/project-controls-with-ai/forecast-reviews)
- [All lessons of Project Controls in the AI Era](https://optimizeall.com/learn/project-controls-with-ai)
