09 · Advanced Metrics (EVM Deep Dive & Forecasting)¶
Level 2 introduced CPI and SPI as a health check. This module goes further: the full family of EVM formulas, three different EAC forecasting methods that give different answers depending on what you assume about the future, and the To-Complete Performance Index that tells you exactly how hard the remaining work has to go to hit a target.
The complete EVM formula reference¶
| Metric | Formula | Meaning |
|---|---|---|
| PV (Planned Value) | Budgeted cost of work scheduled | What you planned to have spent by now |
| EV (Earned Value) | Budgeted cost of work actually performed | What the completed work is "worth" |
| AC (Actual Cost) | Actual cost of work performed | What you actually spent |
| CV (Cost Variance) | EV − AC | Positive = under budget |
| SV (Schedule Variance) | EV − PV | Positive = ahead of schedule |
| CPI (Cost Performance Index) | EV / AC | >1 = efficient spending |
| SPI (Schedule Performance Index) | EV / PV | >1 = ahead of schedule |
| BAC (Budget at Completion) | Total planned budget | The original target |
| EAC (Estimate at Completion) | See three methods below | Projected final cost |
| ETC (Estimate to Complete) | EAC − AC | Projected remaining cost |
| VAC (Variance at Completion) | BAC − EAC | Projected final over/under |
| TCPI (To-Complete Performance Index) | (BAC − EV) / (BAC − AC) | CPI required on remaining work to hit BAC |
Three EAC forecasting methods¶
The choice of EAC formula is a statement about what you believe caused past variance and whether it will continue.
| Method | Formula | Assumption |
|---|---|---|
| EAC (typical variance) | BAC / CPI | Past cost performance will continue exactly as-is |
| EAC (atypical variance) | AC + (BAC − EV) | The variance so far was a one-off; remaining work proceeds at the original budget rate |
| EAC (both CPI and SPI matter) | AC + [(BAC − EV) / (CPI × SPI)] | Both cost and schedule performance will continue to affect remaining cost |
Worked example: three EACs from one dataset¶
A project: BAC = $2,000,000, PV = $900,000, EV = $750,000, AC = $825,000.
python3 -c "
BAC, PV, EV, AC = 2000000, 900000, 750000, 825000
CPI = EV/AC
SPI = EV/PV
eac_typical = BAC / CPI
eac_atypical = AC + (BAC - EV)
eac_both = AC + (BAC - EV) / (CPI * SPI)
print(round(CPI,4), round(SPI,4))
print(round(eac_typical,2), round(eac_atypical,2), round(eac_both,2))
"
| Method | EAC |
|---|---|
| Typical variance (BAC/CPI) | $2,200,000 |
| Atypical variance (AC + BAC − EV) | $2,075,000 |
| Both CPI and SPI (AC + (BAC−EV)/(CPI×SPI)) | $2,475,000 |
The spread between $2,075,000 and $2,475,000 — a $400,000 difference from the same underlying data — is exactly why a PM must state which method and which assumption they're using whenever they quote an EAC. Reporting "$2.2M" with no method named lets the number quietly become "the number" without anyone checking whether the underlying assumption (past performance persists unchanged) still holds. The "both" method is the most conservative here and the right default when a project is both over budget and behind schedule, since it assumes neither problem self-corrects.
TCPI — what the remaining work must achieve¶
python3 -c "
BAC, EV, AC = 2000000, 750000, 825000
tcpi_to_bac = (BAC - EV) / (BAC - AC)
print(round(tcpi_to_bac,4))
"
Variance thresholds and RAG bands¶
| Metric | Green | Amber | Red |
|---|---|---|---|
| CPI | ≥ 0.95 | 0.90 – 0.94 | < 0.90 |
| SPI | ≥ 0.95 | 0.90 – 0.94 | < 0.90 |
| TCPI vs. current CPI gap | ≤ 3% harder | 3–10% harder | > 10% harder |
At CPI 0.9091 (Red) and a TCPI-vs-CPI gap of about 17 percentage points (Red), this project's dashboard entry is unambiguous: it needs the recovery process from module 08, not a "monitor and continue" note.
Forecasting with a trend, not a single snapshot¶
A single period's CPI can be noise. Track it across periods before treating it as a trend:
| Period | CPI | SPI | Trend interpretation |
|---|---|---|---|
| Month 1 | 0.98 | 0.97 | Normal |
| Month 2 | 0.95 | 0.93 | Slight softening — watch |
| Month 3 | 0.91 | 0.88 | Consistent decline — this is a trend, not noise |
| Month 4 | 0.91 | 0.83 | Confirmed — trigger recovery review |
Three consecutive periods of decline (months 2–4) is the general rule of thumb for distinguishing a trend from a single bad sprint — one bad month after five good ones is usually noise; three in a row is a signal.
How It Actually Works¶
The three EAC formulas from Level 2 Module 3 are, formally, three different
statistical models of how a cost variance propagates, and choosing
between them is a modeling decision with a right answer given the data:
EAC = AC + (BAC − EV) implicitly assumes the variance-to-date was a
non-recurring shock and future work reverts to the original planned rate
(appropriate only if you can point to a specific, resolved, one-off cause);
EAC = BAC / CPI assumes the current cumulative efficiency is the best
predictor of all future efficiency (appropriate for a systemic cause, like
consistently underpriced labor, that won't self-correct); and the "both"
method, EAC = AC + [(BAC − EV) / (CPI × SPI)], additionally discounts
remaining work by schedule performance, on the empirical basis that
projects running behind schedule tend to also spend more per unit of
remaining work (overtime premiums, expediting costs, resource contention) —
so it's the appropriate model specifically when both indices are
underperforming together, not when only one is. Running all three against
one dataset and getting three materially different numbers isn't a
methodology failure, it's the model correctly telling you that the choice of
assumed root cause changes the forecast by that much — which is itself
diagnostic information worth reporting alongside the number.
Exercise¶
A project: BAC = $1,200,000, PV = $500,000, EV = $410,000, AC = $470,000.
- Calculate CPI, SPI, and all three EAC methods, verifying every step with
python3 -c. State which method you'd report to a steering committee and why, given this project's specific CPI/SPI combination. - Calculate TCPI to BAC, and compare it to the current CPI to say whether hitting the original budget is realistic.
- Assign this project's CPI and SPI a RAG color using the thresholds table, and state what additional data (beyond this one snapshot) you'd want before recommending a full recovery process.