Download the example workbook
CASTR Example Project 75.7.0.xlsm — CASTR Spreadsheet 75.7.0 with the example already loaded and run
Already have CASTR Spreadsheet 75.7.0? Download just the inputs
CASTR Example Project 75.7.0.pri • 16 KB • load it into your own copy with Import Inputs on the CASTR ribbon
Three phases (PE, RW, CN) and one segment, with seven risks that each demonstrate one feature: an opportunity, dependency, an either/or pair, correlation, predecessor links, series versus parallel delay, and schedule-driven cost. Three minor risks, one per phase, show how CASTR rolls small risks into one register risk per phase-segment. The either/or pair gives the cost distribution two humps. The run gives a P70 of $250.2M CY (60.0% contingency, at the top of the national range) and a P70 finish of 30 August 2031, 12 months after the planned 30 August 2030.
Open the example
Option 1: the example workbook
- Download CASTR Example Project 75.7.0.xlsm and save it to a local folder (not a network or cloud-synced location the first time you open it).
- Unblock the file. Windows marks files downloaded from the internet and Excel will silently disable their macros. Right-click the .xlsm file → Properties → check Unblock → OK.
- Open in Excel, click Enable Content, and accept the Disclaimer sheet.
- Read the results. The simulation has already been run, so the Summary, Histogram, Sensitivity, Tail Drivers, Joint Confidence and What-If sheets show the Results below. To run it yourself, click Run Simulation; the window that opens shows 10,000 iterations, so click Run. The fixed seed gives figures within sampling noise of these, not the very same ones: a workbook that has already been run draws in a slightly different order (see Results).
Option 2: import the inputs into your own copy
- Save the inputs file (CASTR Example Project 75.7.0.pri) in the same folder as the spreadsheet. The import’s file dialog opens in that folder.
- Open a fresh copy of CASTR Spreadsheet 75.7.0. Importing replaces every input in the workbook, so don’t use one that holds a real project. CASTR first saves a backup copy whose name contains BeforeImport.
- Import: on the CASTR ribbon, click Import Inputs, confirm, and pick the file. The import also synchronizes Risk ID with the Risk Register, so Register numbers 1–7 match the Risk ID numbers. The minor risks H, I and J (Risk ID 8–10) reach the Register as three minor groups, numbered 11–13: after the highest Risk ID issued.
- Run: click Run Simulation. The window that opens shows the file’s 10,000 iterations; click Run. The file also sets seed 123457.
- Compare your Summary with the Results below.
At a glance
What the example contains
The estimate is $20M PE, $40M RW and $100M CN, including traditional contingency of $0.75M, $1M and $5M. Without that contingency, and with $5M of prior cost added, the base cost is $158.25M CY. Cost and duration each vary ±10%, and each phase has a chance of a better and of a worse market: PE 10% and 10% for a market 5% better or 10% worse, RW 33% and 33% for 5% better or 20% worse, CN 33% and 33% for 5% better or 30% worse. On top of that the file sets:
| Sheet | Field | Value | What it sets up |
|---|---|---|---|
| Home | Estimate Last Updated | 1 Oct 2026 | The date inflation is measured from |
| Home | % Design Completion | 10-25 | Sets the national contingency range: 25–60% for a moderately complex project |
| BaseUncertainty | PE-Seg 1 schedule | 1 Jan 2027 – 1 Jul 2027 (6 mos) | |
| BaseUncertainty | RW-Seg 1 schedule | 1 Jul 2027 – 1 Jul 2028 (12 mos) | |
| BaseUncertainty | CN-Seg 1 schedule | 1 Sep 2028 – 1 Sep 2030 (24 mos) | 2-month gap for advertise and award |
| PredecessorLinks | PE-Seg 1 → RW-Seg 1 | Direct Link, lag 0 | An early PE finish starts RW early |
| PredecessorLinks | RW-Seg 1 → CN-Seg 1 | Direct Link, lag 2 mos | CN starts 2 months after RW ends, early or late |
| YOE | CN-Seg 1 Indirect Delay Cost | $500,000 per month | Each month of CN delay costs field office, traffic control and inspection |
| RiskID | Minor risk thresholds | Mean cost $1,000,000 or less; mean delay 1 month or less | The size up to which a risk can be marked Minor (the MinorRisks sheet shows the same values) |
| MinorRisks | % Offsets (Low / High) | 20% / 20%, cost and schedule | Each minor group’s range: 20% below to 20% above its expected value |
| SimSettings | Use Random Seed | No (fixed seed 123457), 10,000 iterations | Every run reuses seed 123457, so repeated runs give the same results (Yes would pick a new seed each run). The first run after Import Inputs is the one exception: see Results. Switching a risk on or off changes the order of the random draws, so a difference between two runs then also includes some sampling noise |
The YOE sheet shows CN starting 30 Aug 2028, not 1 Sep: the 2-month lag is counted as 2 × 30.4 days.
Risk register
All impacts are Triangular (min / most likely / max). Risks A–G have Include? = Yes; H, I and J have Include? = Minor. # is the Risk ID number, which for A–G is also the Register number. Costs are in $M CY; schedule in months. A dependent risk’s Probability is its chance given its parent; the Probability including Dependency column shows the overall chance.
| # | Risk Event Name | Phase-Segment | Category | Dependency | Probability | Cost ($M) | Schedule (mos) | Series? | Demonstrates |
|---|---|---|---|---|---|---|---|---|---|
| 1 | A – Design Acceleration | PE-Seg 1 | DES | Independent | 60% | Opportunity 0.5 / 1 / 2 | Opportunity 1 / 2 / 3 | No | An opportunity; the Direct links pull RW and CN forward |
| 2 | B – Parcel Acquisition Delay | RW-Seg 1 | RW | Independent | 45% | Threat 4 / 8 / 15 | Threat 2 / 4 / 8 | Yes | Parent of C |
| 3 | C – Condemnation Required | RW-Seg 1 | RW | Mutually Inclusive, parent B | 40% if B occurs (18% overall) | Threat 3 / 6 / 12 | Threat 2 / 3 / 6 | Yes | Happens only with B; its delay adds to B’s |
| 4 | D – Differing Site Conditions | CN-Seg 1 | GEO | Independent | 60% | Threat 5 / 10 / 20 | Threat 1 / 2 / 4 | No | Correlated with E |
| 5 | E – Bridge Rehabilitation | CN-Seg 1 | BRG | Independent | 60% | Threat 3 / 6 / 10 | Threat 1 / 2 / 3 | No | Parent of F; correlated with D |
| 6 | F – Bridge Replacement | CN-Seg 1 | BRG | Mutually Exclusive, parent E | 100% if E doesn’t occur (40% overall) | Threat 65 / 75 / 90 | Threat 6 / 9 / 12 | No | Either/or with E: every iteration gets one of the two, never both. Splits the cost distribution into two humps |
| 7 | G – Lawsuit Halts Construction | CN-Seg 1 | TRP | Independent | 15% | none | Threat 12 / 24 / 36 | No | Rare and long. Schedule only; it costs money through the CN indirect delay cost |
| 8 | H – Localized drainage redesign | PE-Seg 1 | DES | Independent | 75%, Minor | Threat 0.765 / 0.85 / 0.935 | Threat 0.72 / 0.8 / 0.88 | No | A minor risk: rolled into Minor PE-Seg 1 |
| 9 | I – Add’l Temp CN Easement Req’d | RW-Seg 1 | RW | Independent | 75%, Minor | Threat 0.585 / 0.65 / 0.715 | Threat 0.63 / 0.7 / 0.77 | No | A minor risk: rolled into Minor RW-Seg 1 |
| 10 | J – Localized Unsuitable Soil | CN-Seg 1 | CN | Independent | 75%, Minor | Threat 0.675 / 0.75 / 0.825 | Threat 0.45 / 0.5 / 0.55 | No | A minor risk: rolled into Minor CN-Seg 1 |
Correlation sheet: one pair, D (Cost) ↔ E (Cost), r = 0.7. Both depend on what is found below ground, so when both happen their costs tend to be high or low together.
Minor risks
H, I and J are small: each has a mean cost under $1M and a mean delay under a month, within the Minor thresholds on Risk ID, so they are marked Minor there. CASTR doesn’t simulate minor risks one by one. The MinorRisks sheet groups them by phase-segment, and the sync puts each group on the Risk Register as one risk that occurs in every run (probability 100%, Independent):
| Register # | Group | From | Expected cost ($M) | Register cost ($M) | Expected delay (mos) | Register delay (mos) |
|---|---|---|---|---|---|---|
| 11 | Minor PE-Seg 1 | H | 75% × 0.85 = 0.6375 | Threat 0.51 / 0.6375 / 0.765 | 75% × 0.8 = 0.6 | Threat 0.48 / 0.6 / 0.72 |
| 12 | Minor RW-Seg 1 | I | 75% × 0.65 = 0.4875 | Threat 0.39 / 0.4875 / 0.585 | 75% × 0.7 = 0.525 | Threat 0.42 / 0.525 / 0.63 |
| 13 | Minor CN-Seg 1 | J | 75% × 0.75 = 0.5625 | Threat 0.45 / 0.5625 / 0.675 | 75% × 0.5 = 0.375 | Threat 0.3 / 0.375 / 0.45 |
- Expected cost is the sum of the expected costs (probability × mean) of the phase-segment’s minor risks; expected delay is the largest of their expected delays. With one minor risk per phase-segment the two rules give the same here; give a phase-segment a second minor risk to see the difference.
- The Register risk is a Triangular from 20% below to 20% above the expected value (the % Offsets above the MinorRisks table). A group with a negative expected value would be an opportunity.
- Only Phase and Segment are typed on the MinorRisks sheet; everything else in the table is a formula. Each phase-segment gets its row when the phase-segment is added. A Minor risk whose phase-segment has no row there is left off the Register.
The groups add about $1.7M to the mean cost. Their effect on the P70 shows in What-If.
Results
With the fixed seed, CASTR Spreadsheet 75.7.0 reproduces these figures exactly on the first run in a new copy of the release workbook loaded with Import Inputs. That is how the example workbook was made, so they are also the results it holds as downloaded. Every later run, in that copy or in the downloaded example, draws in a slightly different order, so the same seed gives slightly different figures, within sampling noise: for example a P70 of $249.9M CY instead of $250.2M, and a P70 finish of 27 instead of 30 August 2031. Each later run then repeats those figures. If yours differ by more, check SimSettings: Use Random Seed? = No, Seed = 123457, Number of Iterations = 10,000. A workbook whose inputs were typed in by hand can also differ a little: Excel may calculate the random draws in another order, so the same seed gives each cell a different draw. The difference is within sampling noise.
| Output | Result | Where to look |
|---|---|---|
| P70 Total Project Cost, CY (percentile of sum) | $250.2M; contingency $91.9M, 60.0% | Summary, percentile-of-sum method |
| P70 Total Project Cost, CY (sum of phase-segment percentiles) | $255.2M; contingency $96.9M, 63.2% | Summary, sum-of-percentiles method |
| P10 / median / P90, CY (percentile of sum) | $172.3M / $207.1M / $275.8M | Summary |
| P70 Total Project Cost, YOE | $272.3M percentile of sum; $277.9M sum of phase-segment percentiles | Summary, Histogram, What-If |
| Completion: planned / P10 / P50 / P70 / P90 | 30 Aug 2030 / 16 Oct 2030 / 14 May 2031 / 30 Aug 2031 / 7 Sep 2032 | Summary, YOE |
| Joint Confidence at the P70 cost and the P70 date | Both met 56.9%; cost met, schedule missed 13.1%; both missed 16.9%; cost missed, schedule met 13.1% | Joint Confidence |
| Shape of Total Project Cost, YOE | Two humps, about 59% / 41%; the risk that splits them is F | Tail Drivers (Tail Driver Explainer) |
| Achieved D ↔ E cost correlation | 0.69 (target 0.7) | Risk Corr Outputs (a hidden sheet) |
| Minor risk groups | Minor PE-Seg 1, RW-Seg 1, CN-Seg 1, in every run: expected cost $0.64M / $0.49M / $0.56M, delay 0.6 / 0.525 / 0.375 mos | MinorRisks; Risk Register 11–13 |
How to read each output
Summary
On the percentile-of-sum method the P70 is $250.2M CY: the budget the project stays within 70% of the time. The $91.9M contingency above the $158.25M base breaks down as about $9.2M of base uncertainty, $47.7M of risk events (including $1.7M from the three minor groups), $4.0M of CN indirect delay cost and $31.0M of spread between the mean ($219.2M) and the P70. The Summary gives contingency as a share of the $153.25M phase base cost, which leaves out the $5M prior cost: 60.0%. That is at the very top of the 25–60% national range for a moderately complex project at 10–25% design (59.99% before rounding), so the CY row has no notice. The YOE contingency, which includes escalation, is 63.4%: above the range, so the Notices column flags it. Switch the Summary to sum of phase-segment percentiles and the P70 becomes $255.2M (63.2%, also above the range); the Notices column then shows about 74%, the confidence that $255.2M actually gives on the total.
Histogram
The Histogram shows Total Project Cost, YOE, and its distribution has two humps: about 59% of the runs sit in a lower hump around $199M and 41% in an upper hump around $283M, with a valley near $247M. The split is the bridge. Every iteration gets either E, a $3–10M rehabilitation (60% of them), or F, a $65–90M replacement (40%). The mean, $237.7M, falls between the humps, where few runs land. The P70, $272.3M, sits on the upper hump: with F in 40% of the runs, a 70% budget has to cover some of them (about a quarter of the runs with F stay within it). The P95 is $312.5M and the costliest iteration $369.8M. Sum of phase-segment percentiles adds each phase’s own P70, as if every phase hit its P70 at once, which is why it gives the higher figure. The Summary labels that figure “Sum of Phase-Segment P70s”; its notice gives the share of the iterations at or below it: 73.8%, in CY and YOE alike. With one segment, sum of segment percentiles gives the same answer as percentile of sum.
Sensitivity (Tornado)
The Sensitivity sheet lists, for each result, the 15 inputs with the strongest rank correlation. The chart shows the two results that matter most here.
- F and E lead on cost, from opposite sides (+0.83 and −0.74). They are the either/or pair: F happens in every iteration where E doesn’t, so each run gets a $3–10M rehabilitation or a $65–90M replacement. E occurring means F does not, so E correlates negatively with cost and finish although it is a threat. Each risk appears twice on the sheet, once for its cost (c) and once for its schedule (s), with similar values because both depend on whether it occurs; the chart shows the larger. G appears once: it has no cost.
- CN market conditions come next on cost. The sheet lists them by cell: BaseUncertainty!J46 is the chance of a worse CN market (+0.31) and I46 a better one (−0.29).
- G has no cost of its own but still shows on cost (+0.14). Its 12–36 months of delay cost $0.5M a month through the CN indirect delay cost, and the later finish adds escalation.
- G leads the finish date (+0.62), then F (+0.50), B (+0.45), E (−0.43) and C (+0.36). B and C add (Series = Yes), and the Direct link passes RW delay straight into CN. A shows +0.16 because its impact is negative: when A occurs, the finish moves earlier.
- D barely moves the finish (+0.03). CN delays run in parallel, so D’s 1–4 months count only when it is the longest CN delay, and F (6–12) or G (12–36) is often longer.
- The three minor groups barely register (0.02 or less on cost and on finish, so they are not charted). They occur in every run, so only their ±20% size varies, and that is small next to the other risks.
Tail Drivers
Tail Drivers show what the worst outcomes have in common. In the costliest 10% of iterations (Total Project Cost YOE above $301.6M), F occurs every time against 40% overall and D 77% against 60%; E never does. The delays behind that tail are F, G and E: G occurs in 26% of those runs against 16% overall. In the latest 10% of finishes (after 7 Sep 2032), G occurs in 99.9% against 16% overall. The minor groups occur in every run, so they never set a tail apart. The Tornado answers “what moves the result most?”; Tail Drivers answer “what does a bad outcome look like?”
The Tail Driver Explainer button next to each output’s name gives a plain-language account of that output, ending with a shape test of the whole distribution. For Total Project Cost, YOE it reports Two humps found: about 59% of the runs form a lower hump around $198.6M and 41% an upper hump around $282.9M, with the valley near $247.1M, and the average, $237.7M, falls between the two peaks. It then names the risk that sorts the runs into the two humps: F occurs in 97% of the runs above the valley and almost none below it. Total Project Duration and Total Project Completion Date report One hump, and no risk is named. To see the test change its answer, set F to Dormant (Try it).
Joint Confidence
The dashed crosshairs sit at the P70 cost ($272.3M YOE) and the P70 date (30 Aug 2031). A label in each corner of the chart gives the share and the number of all 10,000 iterations in that quadrant, and the four add up to 100%:
| Corner | Label | Share | Iterations |
|---|---|---|---|
| Lower left | Both met | 56.9% | 5,693 |
| Lower right | Cost met, schedule missed | 13.1% | 1,307 |
| Upper right | Both missed | 16.9% | 1,693 |
| Upper left | Cost missed, schedule met | 13.1% | 1,307 |
Each dashed line on its own splits the runs 70/30, but the two 70% shares overlap on only 56.9%, because a run can be on budget but late, or on time but over budget. Each of those two corners holds the 70% less the overlap: 13.1%. Move the crosshairs and the labels update. Only 1 in 4 iterations is drawn as a dot so the chart stays readable; the labels and the joint coverage count every iteration.
Does it assume cost and schedule are independent? No. The 56.9% is a straight count of the iterations that meet both targets. Each iteration’s cost and finish come from the same simulated run, so whatever links them in the model is already in the count. The two limits show where it sits:
- If cost and schedule were independent, it would be 70% × 70% = 49%.
- If they moved perfectly together, it would be 70%.
- This run gives 56.9%; the health check below the chart reports a rank correlation of 0.62 between cost and finish.
In this model, cost and schedule are linked through shared risk events (B, C, D, E and F each add cost and delay in the same iteration; F adds $65–90M and 6–12 months together), the $0.5M a month CN indirect delay cost (which turns G’s lawsuit delay into cost), and inflation (a later finish means more escalation in the YOE cost). They are not linked where the model leaves them apart: base cost and base duration variability are drawn separately, market conditions affect cost only, and a risk’s cost size and delay size are drawn separately unless you pair them on the Correlation sheet. If on a real project a long construction phase also tends to cost more, model that link (pair a risk’s cost and schedule, or raise the indirect delay cost) and the joint coverage moves toward 70%.
The purple curve shows every date and cost pair that gives 70% joint confidence. Being 70% confident of both means moving out to that curve, giving up some date, some cost, or both.
What-If
Each Register risk has one box, ten here (A–G and the three minor groups); tick it to switch the risk off. With the metric on Total Project Cost YOE, the panel removes the risk’s cost, its delay and the cost that delay adds (the CN indirect delay cost, and the escalation of work pushed later), and the risks that depend on it follow it. It shows the P70 without the risk (from $272.3M): F $212.0M, D $264.7M, B $266.5M, G $271.0M, C $271.4M, A $274.0M and E $297.7M; Minor PE-Seg 1 $271.3M, Minor RW-Seg 1 $271.7M and Minor CN-Seg 1 $271.7M.
- G has no cost of its own, yet switching it off lowers the P70 by about $1.3M. Its 12–36 months of delay cost $0.5M a month in CN and push the work later, where it escalates more.
- B takes C with it. C can only happen with B, so switching B off removes both (−$5.8M); C alone moves the P70 by about $0.9M.
- Switching E off raises the P70 by about $25M. F happens whenever E doesn’t, so without E every run gets the $65–90M replacement, and the cost distribution has one hump.
- Removing an opportunity raises the cost: without A the P70 is $1.7M higher.
- Minor PE-Seg 1 moves the P70 most of the three groups (−$1.0M, against −$0.6M for RW and for CN), more than its $0.64M expected cost. Its 0.5–0.7 month delay passes through the Direct links into RW and CN and pushes that work later, where it escalates more.
What-If doesn’t re-run the simulation: it reworks the example’s own runs. Setting a risk’s Risk Status to Dormant and re-running draws fresh numbers, so its figures differ slightly.
Try it
Change one thing, re-run, then compare with the results above. Make Series? and Dependency changes on Risk ID and synchronize: a sync rebuilds the Risk Register and keeps only its Risk Status, which you set on the Register itself. Put each change back before the next one. The F, Delay Dependent, C and indirect-cost rows are worked out from the example’s own iterations. The Delay Dependent and indirect-cost changes switch no risk on or off, so a re-run should give the same figures. The F and C rows are estimates: setting F to Dormant changes the random draws, so expect figures close to these rather than equal (ticking F on the What-If sheet shows its P70 cost and finish without a re-run), and the C row only says roughly how far the finish moves. The others say which way the results move.
| Change | What it shows | What to look for |
|---|---|---|
| Set F’s Risk Status to Dormant | Where the upper hump comes from. Risk Status is kept through a sync | P70 YOE $272.3M → about $212M; P70 finish 30 Aug 2031 → early May 2031; contingency 60.0% → about 25% CY, right at the bottom edge of the 25–60% national range (the Notices column flags it if it lands below 25%); the YOE contingency, about 27%, is inside. The cost distribution has one hump, and Total Project Duration and Completion Date now have two (about 85% / 15%): the Explainer names G |
| Set A’s Risk Status to Dormant | How much the opportunity pulls the project forward | The P70 finish moves later and the P70 cost rises a little |
| Switch RW → CN to Delay Dependent | An early RW finish no longer pulls CN forward; late finishes still push it | About 31% of the runs (those where RW finishes early) now finish later: P10 16 Oct 2030 → 6 Nov 2030, P50 14 May → 25 May 2031, P70 30 Aug → 1 Sep 2031, P90 7 Sep → 15 Sep 2032. The planned finish becomes 1 Sep 2030, because CN can’t start before its planned 1 Sep 2028 |
| Set B and C to Series = No | Parallel delays: only the longer RW delay counts | The runs with both B and C finish earlier, so the median and later finish percentiles move earlier, the P70 by about three weeks (the P10 does not move); cost changes little |
| Make C Independent at 18% | Same overall chance, but C no longer stacks on B | The finish percentiles barely move (at most about 10 days either way): B and C together become rarer, but C now also delays runs without B |
| Set CN Indirect Delay Cost to $0 | How delay turns into cost | P70 CY about $5.4M lower ($250.2M → $244.8M); G no longer moves the CY cost |
| Change the D ↔ E correlation from 0.7 to 0 | Correlation changes impact sizes, not whether risks occur | The P70 and P90 hardly move. See Notes |
Notes
- Why correlation barely moves the P70. CASTR correlates the size of two impacts; whether each risk occurs is drawn separately. D and E occur together in about 36% of the runs, and their size swings ($5–20M and $3–10M) are small next to F’s $65–90M on/off swing. Correlation matters when the paired risks are both likely and have wide ranges. To make risks happen together, use Mutually Inclusive dependency. To see correlation working, check the Risk Corr Outputs sheet (hidden: right-click any sheet tab and choose Unhide): this run achieves 0.69.
- These numbers are for CASTR Spreadsheet 75.7.0. A later version may change them slightly; this page is updated with each release.
Get the spreadsheet
The CASTR Spreadsheet is free. Download it, see the requirements and read about every input and results sheet.