Explains the distribution
Turns a histogram and a set of percentiles into the sentence an owner needs: what the range is, what it is driven by, and how it moved since last month.
Your critical path gives you one date. This gives you the probability of every date, including the one in your contract.
Last updated
Zepth Rx module
A deterministic critical path produces a single finish date. It is the answer to a question nobody should be asking, because it carries no information about how likely it is. Two projects can show the same completion date — on one, nearly every plausible outcome lands within a fortnight of it; on the other, the realistic range runs to five months and that date sits near the optimistic end. The single date is identical. The commercial position is not remotely comparable.
Forecasting replaces “when will it finish?” with “what is the chance it finishes by the date I am contractually exposed on?” — which is the question an owner actually has.
This is where most probabilistic scheduling falls down. The usual approach asks a planner to enter optimistic and pessimistic durations for each activity — producing a forecast built on opinion, at enormous manual cost, anchored to whatever the planner expects.
Zepth Rx does not ask. It measures, from your project’s own record, how long work has actually taken against how long it was planned to take, per trade. Every ratio compares a calendar span with a calendar span, and ratios outside a sane band are rejected as data errors rather than absorbed.
Baseline, where one exists. Actual span against the baseline span, and a reconstruction from a working-day count converted onto the activity’s own calendar.
First-planned history. Actual span against the span the activity was first planned to take, from the earliest revision it appeared in. This is the rung that makes calibration work on a P6 XER, which carries no true baseline at all.
In-progress work, past halfway. Elapsed against expected-so-far, and only past 50% complete, because the observation is right-censored before that.
Field productivity, where quantities are tracked. On a P6 or Excel import these are not present, so this source contributes nothing and publishes its own coverage counts rather than quietly returning an empty result.
Sampling every activity independently is the most common flaw in construction Monte Carlo. Real disruptions are shared — the weather, the subcontractor, the approvals authority — and independent sampling lets those effects cancel out, understating risk systematically.
The copula adds a global correlation across the programme, a stronger one within a group, and an independent component. Three honesty mechanisms sit on top: settings are clamped to a sane range with every adjustment recorded rather than silently applied; an activity with no trade takes only the project-wide correlation, because it has no group to move with; and where named risk drivers already carry co-movement explicitly, the copula is reduced by that amount so a cause is not counted twice.
Unusually, the platform scores its own forecasting against its record — how often the next reading landed inside the previous run’s band, whether its P50 drifts consistently in one direction, and its realised error on milestones that have now completed.
And a run-to-run comparison is refused outright when the calibration method or the model version has changed between them. Reporting a methodology change as your project slipping is the most damaging thing a forecasting tool can do.
The instruments this module produces, drawn on illustrative data so the method reads clearly.
The model says where its uncertainty came from, per trade — calibrated on that trade’s own observations, borrowed from a project-wide pool, or a stated domain default. Never silently substituted.
The contract date against the range of outcomes. Percentiles are read nearest-rank, so the live readout and the published figure are the same number.
P10–P90 per milestone, against the contract date. The band width is the information a single date cannot carry — two milestones can share a P50 and be nothing alike.
On-time and on-budget are not independent. Each point is one iteration; the quadrants are split at the contract date and the budget.
A completion date with a probability attached, per milestone, against your contract date.
Uncertainty measured from your own completed work rather than a planner’s optimism and an industry assumption.
The activities that actually drive the outcome — including ones that look comfortable deterministically.
Recovery tested against the same model: what change to which activities would move P80 to a target date.
There is nowhere to type a three-point estimate. The model measures how long work has actually taken against how long it was planned to take, per trade, from your project’s own record — drawing that ratio from up to five sources in strength order.
With enough observations for a trade it uses that trade’s measured spread; with more, it stops assuming a shape and resamples the trade’s own histogram directly. Below the threshold it widens to a project-wide pool, then to a stated domain default — and always says which of the three it used.
A bad winter, a struggling subcontractor, a slow approvals authority hit many activities at once. A three-component Gaussian copula models that co-movement, because sampling independently lets those effects cancel and systematically understates risk.
Each iteration samples a remaining duration for every incomplete activity and runs a complete forward pass over the real network — logic, lags, calendars, constraints, the data date. Completed work is held at its actuals. The distribution reflects your actual network, including paths that only become critical under stress.
Discrete risks in three mechanics — systemic, per-activity and recurring. “What did this risk cost?” is answered by a paired counterfactual: an extra pass per driver with that driver suppressed, reusing the same random draws.
Risk drivers can be mined from your own data — overrun approvals, rework days, categorised delay notes — each with a measured frequency and impact and the working retained. Every one arrives disabled: nothing a machine inferred reaches a claim-facing forecast until a person enables it.
Runs are seeded and every random draw is addressed by its own named stream, so adding a risk driver cannot shift another activity’s samples. Inputs are resolved once, hashed and frozen before a run starts, so splitting the work across windows cannot change the answer.
The model measures actual against planned duration per trade, and states whether each trade was calibrated on its own record, borrowed from a project-wide pool, or defaulted.
Named risk events in three mechanics, plus any mined drivers you choose to enable. Mined drivers arrive disabled.
Each iteration samples remaining durations and re-runs the full critical path over the real network. The run is seeded, and its inputs are frozen before it starts.
P10 / P50 / P80 / P90 per milestone with the confidence band, on-time probability against the contract date, and the activities that actually drove the outcome.
What change to which activities would move P80 to a target date, and what that implies for the resources involved.
Turns a histogram and a set of percentiles into the sentence an owner needs: what the range is, what it is driven by, and how it moved since last month.
Activities showing comfortable float deterministically that nevertheless drove the outcome in a meaningful share of futures — invisible to every conventional method.
Not a date, not a probability, not an impact. The simulation, the percentiles and the sensitivity are computed by deterministic engines; the model narrates, and anything it states that cannot be reconciled against the engine is flagged on screen.
The engineer’s judgment stays in charge; the AI removes the latency and the blind spots.
Per milestone: P10, P50, P80 and P90 finish dates, the confidence band, drift from baseline and its trend, and an outcome histogram. Across the project: on-time probability, a criticality index, hidden risk, delay-driver sensitivity as a tornado, and a joint time-cost view. Percentiles use the nearest-rank convention, stated openly, so the live readout and the published figure are the same number.
No — there is nowhere to type them. The model measures how long your trades have actually taken against how long they were planned to take, from your own project record, per trade.
It falls back to a project-wide spread, and below that to a stated domain default — and it tells you which of the three it used, per trade, on screen. The forecast sharpens as the project produces evidence.
No. Every iteration runs a complete forward pass over the real network — logic, lags, per-activity calendars, constraints and the data date — so the distribution includes paths that only become critical under stress.
Yes, in three mechanics: systemic, per-activity and recurring. What each one cost is answered by a paired counterfactual — an extra pass with that driver suppressed, reusing the same random draws.
Runs are seeded and inputs are frozen before they start, so the outcome distribution is reproducible. The forecast is defensible at the distribution level rather than by pointing at one individual iteration, and the model card says so.
It is wired end to end, but it needs tracked quantities that a P6 or Excel import does not carry — so on those imports it contributes nothing and publishes its own coverage counts rather than quietly returning an empty result.
Related modules
Zepth is the construction project delivery platform — it runs construction, procurement and asset management on one record, and does the work: reading the drawings, reviewing the submittals, matching the invoices and flagging the risks, with a human sign-off on anything consequential.
A short, tailored walkthrough on your real workflow — no generic demo.