SlipcurveScheduling and risk

Quantitative schedule risk analysis, run on the critical path — not beside it

A complete CPM engine, and a Monte Carlo simulation that samples the same network the deterministic plan was computed from — so the P80 date and the plan it is measured against cannot quietly be describing two different schedules.

What a P80 date is, and why it is later than the plan

A deterministic CPM schedule produces one finish date and states no confidence in it. That date is what you get when every activity duration is treated as exact and every parallel path merging into a milestone is assumed to arrive on time at once. Neither assumption survives contact with a job, and the second is the expensive one: when several paths converge, the milestone waits for the latest of them, so the merge is later than any single path's average. That is merge bias, and no amount of care in the single-point estimate removes it.

Quantitative schedule risk analysis — QSRA — replaces each duration with a three-point estimate, runs the network over thousands of iterations, and reports the distribution as a histogram and as an S-curve of cumulative probability. A P80 date is the date by which the simulation finished in 80 per cent of iterations. Industry practice sizes schedule contingency to a target confidence level, commonly P80 and up to P90 on high-risk programmes; that contingency is the gap between the deterministic finish and the chosen percentile, measured in working days rather than taken as a percentage of the duration.

Cumulative probability of completion against date An S-shaped cumulative distribution curve rising from left to right. The deterministic CPM finish date sits low on the curve at about the 8th percentile, well to the left. The P50 date sits at the curve's midpoint, and the P80 commit date sits higher and further right, with the horizontal gap between the CPM date and the P80 date marked as the contingency the plan did not state. 0 % 50 % 80 % contingency the plan did not state CPM date P50 P80 · commit
On the sample project shipped with this product, the deterministic finish sits at roughly the 8th percentile of the distribution and the P80 lands 26 working days later. The shape of that gap, not its exact size, is the point: a single-point date is a claim about one outcome out of thousands.

What the simulation reports

Every run returns the distribution of the project finish and, separately, the distribution of every milestone in it. Per-milestone dates are kept as exact samples as well as histogram bins, so a date that goes into a contract is a real order statistic rather than an interpolation between two bars — and the engine reports the largest disagreement between the two, which corroborates the histogram's error bound instead of asserting it.

  • Criticality index per activity, ranked as a tornado: the share of iterations in which that activity landed on the critical path. An activity at 100 per cent is critical in every world; one at 0 per cent never is, and the ones in between are where a schedule is actually fragile — and that is the question a single deterministic critical path cannot answer.
  • Duration sensitivity: the correlation between an activity's sampled duration and the project finish. High criticality with low sensitivity is a short activity you cannot avoid; high sensitivity is where compressing pays.
  • Risk register events fired as events rather than as padding — a probability of occurrence and a three-point impact, so an event that fires in 39 per cent of iterations for a mean of 14 days contributes an expected 5.5 days rather than a flat allowance.
  • Correlation between activity durations, because durations on one job are not independent and treating them as independent narrows the distribution artificially.
  • Cost distribution alongside the date distribution, with a recommended contingency at the chosen confidence.
A six-activity CPM network simulated 600 times, with the finish distribution beneath it Six activity bars on a working-day timeline. Foundations and underground services run in parallel and merge at Structure. Beneath them, a histogram of 600 simulated project finishes, roughly bell shaped and leaning right, spanning 64 to 94 working days. A dashed vertical line at day 68 marks the deterministic CPM finish and stands at the extreme left-hand edge of the distribution, clear of its body. Two further markers stand at day 77.3 and day 81.8, the P50 and the P80. The deterministic date was reached in 1.8 per cent of the 600 iterations. THE PLAN — ONE DURATION PER ACTIVITY Mobilise Excavate & shore Foundations U/G services Structure Envelope 0 20 40 60 80 working days THE SAME NETWORK, SAMPLED 600 TIMES CPM 68 d P50 P80 600 iterations P50 77.3 d P80 81.8 d the deterministic CPM finish of 68 d was reached in 1.8 % of those 600 iterations
Six activities, two of them parallel, with three-point durations. The plan uses the most-likely column — which is what a CPM schedule is. The histogram beneath is 600 iterations sampled in this page from a fixed seed, so it is the same 600 every time and the figure can be checked; P50 and P80 are exact order statistics of the sample, not readings taken off the bars. The distance from the dashed CPM line to the P80 is the contingency the single-point date did not state. The deterministic answer is not an optimistic case here; it is what you get by ignoring merge bias, and on this network it was reached in 1.8 % of the runs. A different network gives a different figure — the shape of that gap is the point, not its size.

A mitigated run is overlaid on the gross run rather than substituted for it, on the identical random seed, so the published number stays the un-mitigated one and the effect of the mitigation plan is visible as a distance rather than as a replacement.

The banner above the forecast

The most important thing on the risk page is not a number. Before you run, above the forecast, the page states how much of the remaining duration is still sitting on the global default uncertainty band rather than on a band somebody chose:

Most of the duration is on one assumed band — 100 % of the remaining duration is still on the global default. That is an assumption, not an estimate: the P80 below is only as good as it.

A risk analysis whose inputs are all defaults produces a beautifully-shaped distribution that means nothing, and it is indistinguishable on screen from one whose inputs were estimated by the people doing the work. Separately-licensed risk products do the simulation; they do not generally tell you that.

DCMA 14-point schedule assessment, with CPLI and BEI

The Defense Contract Management Agency's fourteen-point assessment is the widest-used structural health check on a CPM schedule, and it is used far beyond defence work. This implementation scores sixteen rows — the fourteen, plus two progress checks — and reports each by name and value rather than as a pass/fail badge: logic completeness, leads, lags, relationship types, hard constraints, high float, negative float, high duration, invalid dates, resources, missed tasks, the critical path test, the critical path length index (CPLI) and the baseline execution index (BEI).

When actual dates fail the integrity screen, the assessment returns a blocked verdict naming what is wrong. It does not return a score.

That refusal is the design decision worth understanding. A quality score computed over dates that cannot be trusted is worse than no score, because it is a defensible-looking artefact: the review then argues about the number instead of about the four activities with an actual finish in the future.

Float, and the paths you cannot see from one number

Total float on its own hides the structure of a schedule. This engine enumerates multiple float paths in order — the critical path, then the next-most-critical, and so on — and reports how many activities it placed and whether the enumeration was exhausted, so a path list that stopped early says so rather than looking complete.

Free float is reported separately from total float and genuinely differs. An activity with sixteen hours of total float and zero free float cannot slip by even an hour without moving its successor; the two numbers answer different questions and collapsing them into one column loses the one a superintendent needs.

Longest path is reported alongside total float, which matters the moment a schedule carries constraints or multiple calendars, because zero-total-float and longest-path stop being the same set of activities.

Per-activity calendars, honoured in both answers

A concrete cure runs seven days a week. A night-shift tie-in runs when the road is closed. A subcontractor observes a different holiday set. Each of those is an activity on its own working week, and a scheduler that only understands one project calendar either lengthens them or lies about them.

Here an activity's own calendar converts its duration into the span it occupies on the one project-calendar timeline — and, because the same network is what the simulation samples, it does so in the deterministic plan and in the risk distribution together. Getting that right in one of the two is the failure mode: both schedules still finish on the same day, and they disagree per activity by exactly that task's float, which no summary-level check can see.

Levelling, compression and scenarios

  • Resource levelling where the preview runs the entire pass — recomputing, rescheduling and scoring every candidate — and then restores the document field by field before returning. A page that only previewed has not touched the plan every other open module is reading. Applying writes exactly the moves the preview listed, and hands back the snapshot that undoes them.
  • Time-cost compression with a step-by-step crash ledger: which activity was crashed at each step, the days saved, the resulting finish, the cumulative cost — and the marginal cost at the knee, which is the number that tells you when to stop buying days.
  • Scenario studio and baseline comparison, where the baseline has exactly one writer so a field captured by one path and not another cannot silently stop being restorable.

Interchange

The simulation runs on the network this engine schedules, so a quantitative risk analysis is not a second tool reading an export of your programme, and it does not sit behind an Oracle licence. What crosses the boundary is the schedule file itself.

Microsoft Project MSPDI XML
In and out. The export serialises the loaded document rather than rebuilding a subset, then re-parses its own output and prints an element-count parity chip reading 1:1 or DRIFT. A lossy export is a number on the screen, not a discovery six months later.
Primavera P6 XER
Export of PROJECT, TASK and TASKPRED, validated by re-parsing and comparing task counts, with the unmapped P6 fields named rather than dropped in silence. This is a bare network, not a full XER, and the page says so.
Microsoft Project .mpp
Not supported, and not reachable. It is an undocumented binary format only Microsoft can write.

What this does not do

  • Activity codes. P6's coding dictionary has no equivalent here. Grouping and filtering run off the WBS and the record fields instead.
  • Roles, and levelling priorities. Resources are assigned directly; there is no role abstraction, and levelling cannot be told which activity to protect.
  • Effort-driven scheduling, task types and manual scheduling. The Microsoft Project family of behaviours around fixed-work and fixed-units is deliberately out of scope.
  • Configurable lag calendar. Lag is counted on the project calendar because the MSPDI format gives a link no way to state a different one. That constraint is printed in the schedule log with its reason rather than left as an assumption.
  • Multi-user concurrent editing, check-in/check-out across a team, and an enterprise project structure. One project is held at a time.
  • Reflection projects with merge-back, and a resource pool shared across projects.

Related