This sheet is read before or after the session, not during it. It carries the CPM the game computes, the productivity and money models with their provenance, the whole calls deck, every debrief question, the measured seeds and the vocabulary. The 75-minute plan is on Sheet IG-01.
How to read the labels. Every claim-bearing block on this sheet opens with one of six words. Live computed now from real input. Measured a real measurement, stated with what produced it. Sourced from a cited external source. Reasoned derived by argument from stated premises — the authors' own call. Scripted a hand-authored fixture. Illustrative a made-up number chosen to show a shape. A qualifier may narrow a label; it never replaces one.
Live The engine runs a precedence-diagram CPM with finish-to-start, start-to-start and finish-to-finish relationships and lags in working days. Nothing is declared critical in the data file; criticality is computed, every single turn, from the live state of the job.
Walk the network in topological order. An activity's early start is the latest demand any predecessor
places on it: FS requires predecessor EF + lag; SS requires predecessor ES + lag;
FF requires predecessor EF + lag − duration. Early finish is ES + duration. The largest
EF in the network is the project duration. In the tutorial that is 29 working days.
Start from the project end and walk back. Late finish is the earliest demand any successor places on you:
FS gives successor LS − lag; SS gives successor LS − lag + your
duration; FF gives successor LF − lag. Late start is LF − duration. Total float is
LS − ES.
Total float is how long an activity can slip before the project slips. Free float is how long it can slip before it disturbs the early start of its own successor. Students collapse these two into “spare time” and it costs them. In Racer Commons at baseline, MEP rough-in on Level 1 (MEP1) carries 9 days of total float and 1 day of free float. Spend three days on it and the finish date has not moved — but Level 2 rough-in cannot start when it wanted to, and the next card that lands on that branch has nowhere to go.
Lags are how the schedule expresses trade overlap, and they are most of the compression already built
into the plan. Steel walks up the building on SS+4: Level 2 erection starts four days after
Level 1 starts, not after it finishes. Drywall, finishes and MEP each ladder up on SS+2 —
two days, which is tight enough that a trade normally has two or three fronts open at once and one crew to
feed them. Curtain wall follows exterior framing on SS+5. Commissioning finishes two days
after Level 3 finishes (FF+2) because it cannot close out ahead of the work it is testing.
Remove those lags and the 134-day contract is not buildable. Add a day to an SS
predecessor and the successor moves with it, which is not obvious to a student staring at a bar chart.
| Act | Description | Preds | Dur | ES | EF | LS | LF | TF | FF |
|---|---|---|---|---|---|---|---|---|---|
| T1 | Mobilize | — | 3 | 0 | 3 | 0 | 3 | 0 | 0 |
| T2 | Excavate | T1 FS0 | 5 | 3 | 8 | 3 | 8 | 0 | 0 |
| T3 | Footings | T2 SS2 | 6 | 5 | 11 | 5 | 11 | 0 | 0 |
| T4 | Footing cure (fixed) | T3 FS0 | 4 | 11 | 15 | 11 | 15 | 0 | 0 |
| T5 | Site utilities | T2 FS0 | 4 | 8 | 12 | 11 | 15 | 3 | 3 |
| T6 | Slab on grade | T4, T5 FS0 | 5 | 15 | 20 | 15 | 20 | 0 | 0 |
| T7 | Slab inspection (fixed) | T6 FS0 | 2 | 20 | 22 | 20 | 22 | 0 | 0 |
| T8 | Steel frame | T4 FS0 | 7 | 15 | 22 | 15 | 22 | 0 | 0 |
| T9 | Roof & dry-in | T8, T7 FS0 | 4 | 22 | 26 | 22 | 26 | 0 | 0 |
| T10 | Closeout | T9 FS0, T6 FF1 | 3 | 26 | 29 | 26 | 29 | 0 | 0 |
Live Critical path T1–T2–T3–T4–T8–T9–T10. T6 and T7 also carry zero total float — a parallel critical branch of identical length, which is worth naming out loud, because students expect exactly one path. T5 is the only activity in the job with float, and it has three days. The engine's self-tests check all sixty numbers in this table against the hand calculation, so if a student says the software is wrong, run the self-tests from the Settings menu in front of them.
One indexing note. The game numbers days from 0 and treats finish as exclusive, so EF = ES + duration. Textbook tables that number days 1 through n (start day inclusive, so EF = ES + duration − 1) read one higher on ES and LS; EF and LF come out identical. A three-day activity at the start is ES 0 / EF 3 here and ES 1 / EF 3 there, and its LS is one higher there for the same reason. Say this once at the board and nobody argues about it later. (Earlier printings of this note named EF and LF as the pair that shifts; that was wrong, and the fact-preservation check passed it — a check that every token still lands cannot tell a true sentence from a false one.)
Because it is recomputed every Monday against reality, not read off a baseline. Completed activities are pinned to the dates they actually happened; work in progress is anchored to its real start with its remaining duration recalculated from the crews now on it; work not yet started cannot begin before today. Consume float on a branch and the branch goes critical; accelerate the old critical chain and the path jumps somewhere else. The game announces the move and names the activity it moved to. Ask the class to predict it before the week runs — that prediction is Stage 2's Predict card, and the game captures it.
Float is measured to project completion, so it is never negative. If the job is running twelve days behind you will not see −12 in the float column; the network re-baselines against its own computed finish, and performance against the contract is reported separately, in calendar days early or late, which is the number that gets priced. Students who have seen negative float in P6 need this said explicitly.
Concrete cure and inspection holds are non-compressible. Footing cure, foundation wall cure, slab cure, deck cure and all four inspection holds burn exactly one working day per working day. No crew count, no overtime level and no expediting fee touches them, and the check sits at the only place in the engine where progress is ever made, so there is no path around it. Rain does not stop them either.
Live This is the mechanism the game is built on, and until this edition it was documented only here — a learner could not see that the rolls were seeded. It is now on screen in the Stage 3 Details drawer as well.
The roll a call is judged against is a hash of the seed and the call's identifier, and nothing
else: not the week you answered, not the order you played, not anything any team did.
Every team on your seed faces the identical roll on every call. What differs is the bar that roll has
to clear. Two teams both looking at 0.31: the one that bought the exposure down to 3% is covered, the one
that left it at 45% is not, and what separates them is a decision made in week 1, not a die thrown in
week 9. Two engine self-tests hold this — identical rolls across two games on a seed, and rolls
unchanged after a whole game played differently — but the stronger move is simpler: the same roll is
printed in the debrief of the team that complained and in the debrief of the team that beat them. The seed
string is hashed and upper-cased first, so msu-1 and MSU-1 are the same run.
Live Overtime is set per trade, per week, and it is the decision students get wrong most confidently. The model gives a grace period with no measurable loss, then compounds a weekly efficiency decay down to a floor. A 50-hour week gets two weeks of grace, then loses 10% per week to a floor of 0.75. A 60-hour week gets one week of grace, then loses 15% per week to a floor of 0.62. The cost premium, by contrast, applies in full from the very first week and never decays: 1.375× the daily rate at 50 hours, 1.75× at 60.
| Consecutive week | 50 hr — efficiency | 50 hr — net progress | 60 hr — efficiency | 60 hr — net progress |
|---|---|---|---|---|
| Week 1 | 1.00 | 1.250 | 1.00 | 1.500 |
| Week 2 | 1.00 | 1.250 | 0.85 | 1.275 |
| Week 3 | 0.90 | 1.125 | 0.72 | 1.084 |
| Week 4 | 0.81 | 1.013 | 0.62 | 0.930 |
| Week 5 and after | 0.75 | 0.938 | 0.62 | 0.930 |
| Labour cost, every week | 1.375× | 1.750× | ||
Measuredfrom the engine, 2026-09-16
Every cell above was read back out of src/engine.js by calling
TO.Model.otEfficiency and TO.Model.otProductivity, not transcribed. The table is
what the game does.
Both halves of this, please. Overtime genuinely accelerates at the start: 1.25× and 1.50× in week one are real, and a team that uses a 50-hour week as a two-week burst on a driving activity is playing well. Point at week 4. A fourth consecutive 50-hour week delivers 1.3% more progress than straight time and costs 37.5% more labour on every crew-day. By week 5 the crew is producing less than it would have on forty hours, and still billing the premium. Sixty-hour weeks cross the line a week earlier, in week 4, and settle at 0.930 — seven per cent below straight time, at 75% more cost, forever.
Reasoned This is the authors' modelling choice, argued from the premises below rather than read off a source, and it is labelled that way deliberately.
Business Roundtable is generally read as putting sustained 60-hour productivity near 66% of baseline. Taken literally that nets 1.50 × 0.66 = 0.99, which is fractionally better than the 50-hour floor of 1.25 × 0.75 = 0.94 — a non-monotonic pair that would teach the wrong lesson, that if you are going to burn the crew out you may as well do it at sixty. The report's own conclusion is that sustained 60-hour operations do not buy schedule, so the model uses a steeper floor of 0.62 to reproduce that conclusion rather than that arithmetic. An engine self-test asserts sustained 60s are worse than sustained 50s, which is the property the choice exists to protect.
Disclosure on the 66% and 75% figures. The 1980 Business Roundtable report is available only as a scanned PDF with no text layer, so this lane could not read those two numbers first-hand. They are carried as the reading the model was built against, not as figures verified here. What all three sources below do agree on, and what the model asserts, is narrower and enough: sustained overtime at any level settles below straight time while costing 37% to 75% more, so it is a burst tool for a defined push and nothing else.
In the model, one week back at straight time resets the streak completely: the next 50-hour week starts again at 1.25. Real recovery is gradual, and the literature does not support instant reset. Students will find this and try to alternate weeks to farm the grace period. Let them, then ask what a foreman would say about a crew that goes on and off overtime every other week — turnover, absenteeism and the quality rework that neither this model nor the citations below capture.
All three were re-checked on 2026-09-16. Where a publisher refuses automated access or publishes only a scan, that is stated rather than papered over.
Sourced Business Roundtable, Report C-2, Scheduled Overtime Effect on Construction Projects, Construction Industry Cost Effectiveness Project, November 1980. Catalogue record: trid.trb.org/View/206774 (TRB, verified live 2026-09-16). Full report scan: mail.curt.org/pdf/156.pdf — an image scan with no text layer. The TRB abstract states that operations exceeding 60 hours weekly for over two months “reduce productivity and increase labor costs without meaningful schedule benefits”, which is the conclusion the model reproduces. Still the most-cited document in this argument, and short enough to assign.
Sourced H. R. Thomas and K. A. Raynar,
“Scheduled Overtime and Labor Productivity: Quantitative Analysis,”
ASCE Journal of Construction Engineering and Management, vol. 123, no. 2, 1997, pp. 181–188,
DOI 10.1061/(ASCE)0733-9364(1997)123:2(181)
qualifier: publisher page returns 403 to automated access; abstract not read first-hand.
The same work is published by the Construction Industry Institute as SD-98 (August 1994), which
is readable:
construction-institute.org — SD-98
(verified live 2026-09-16). Quoting it directly: “Work weeks of 5 and 6 days show losses of
efficiency of 12 and 14 percent, respectively”, from 121 weeks of data across
four active industrial construction projects. This is where the grace period comes from:
“About 25 percent of the time efficiency is not impaired for durations of 2 to 4 weeks. However, on
average, there is a likelihood of productivity degradation, even for 1- to 2-week periods.”
Correction carried in this edition. Earlier printings of this sheet said this study “tempers the Roundtable's steeper claims with field data”, and described a measured range of “no loss to 25%”. Both were wrong, and reading the source is what found it. SD-98's own conclusion is that “the BRT curve is a reasonable average estimate of productivity losses caused by overtime” — the two sources agree. And its 25% is how often efficiency is unimpaired for two to four weeks, not a bound on the loss; the measured losses are 12% and 14%. A good five-minute discussion: why is a reader so ready to believe two sources disagree?
Sourced The flat factors students will meet in practice — 50 hours = 92%, 60 hours = 82%, applied across an overtime period — trace to a Bureau of Labor Statistics study of repetitive manufacturing work, not to construction qualifier: attributed to Kossoris, “Hours of Work and Output”, BLS Bulletin 917 (1947) on search summary only — not fetched by this lane. MCAA’s own Bulletin OT1 (2011 revision, How to Estimate the Impacts of Overtime on Labor Productivity) is a week-by-week curve instead, reaching 72% and 61% by week 10. Those two figures are confirmed: long-intl.com — Labor Productivity Loss Calculation for Overtime (verified live 2026-09-16) quotes OT1's table as PI 0.95 at week 1 and 0.72 at week 10 for a 50-hour week, and 0.91 then 0.61 for a 60-hour week. The game ramps toward the lower Roundtable floors, and a flat 92% against a curve that ends at 75% is a good five-minute argument.
Illustrativequalifier: the shape is the classic crash curve; the three marginal-output steps are chosen to show it, not measured Crews are limited per trade and the second crew of a trade is the B team: it works around the first, shares the hoist, the laydown and the foreman's attention. Marginal output runs 1.00, 0.80, 0.65, so two crews deliver 1.80 crew-days a day, not 2.00 — doubling up buys about 44% off the duration for 100% more labour. That is the classic crash-cost curve: always available, never free, worth it only when the activity is driving the finish. No activity accepts more than two crews and no trade hires past two, so what students feel is the 1.00-to-0.80 step. Steel erection is capped at one crew throughout, so the front half of the job cannot be crashed with bodies at all.
A new crew costs 60% of a week's rate as a one-time mobilization (a second concrete crew: $11,400 against concrete's $19,000 weekly), charged only above the highest headcount you have ever carried, so cutting back and re-hiring later is free. A trade is on the roster only while it has a work front open — in a genuine gap it demobilises and stops billing — but while it is on site, any crew you are carrying and have not put on a front bills at half rate for doing nothing, shown as hollow amber pips with the daily cost beside them. That is the price of an unopened work front, and it is why sequencing to keep crews fed matters as much as sequencing to protect the critical path.
Adding a crew takes two weeks' notice: decide on Monday of week 12 and they stand on the floor on Monday
of week 14, because the sub has to find bodies and does not keep them in the yard. Releasing one is
immediate and free. The board shows what is coming as dashed pips reading +1 arrives wk 14, and
the mobilization charge lands when you order, not when they arrive. That lag is the point — manpower
is committed against a schedule nobody has seen yet, so a team that waits until a trade is visibly behind
orders too late to help and then pays the crew to stand around after the crisis. And the fronts outnumber
the crews: on any given week you should expect at least one trade, and often two, with more open work in
front of it than one crew can feed — MEP, drywall and finishes each ladder up three floors on a
two-day stagger. No allocation covers everything, deliberately. Float stops being decoration the moment the
question turns from “what do we work on” into “what do we starve this week”.
Illustrativequalifier: 25% per crew over, floored at 35%, is a teachable shape rather than a measured productivity loss A zone holds a limited number of crews comfortably: three on the site, two on each of Levels 1, 2 and 3, two on the roof, two on the exterior envelope. Past the cap, everyone in that zone loses 25% per crew over, floored at 35%. Four crews in a two-crew zone deliver 4 × 0.50 = 2.0 crew-days a day — what two crews deliver, for twice the money. Two and two across two zones gets you 4.0; five in that zone gets 1.75, less than two.
The best moment for this is Level 1 late in the job. ELEV is twelve days of work in zone L1 with a cap of two, and it sits there while insulation, drywall and finishes all want the same floor. A team that puts two drywall crews on DRY1 while the elevator crew is still in the zone takes 25% off everybody, including the elevator, which is on a different branch entirely.
Illustrativequalifier: a plausible small-commercial pro
forma chosen so schedule dominates the score — not a real project's numbers Read straight out
of src/data.js:
| Contract value | $4,450,000 | Subcontract buyout and materials of $2,600,000 are committed at award and no decision moves them. Margin is thin on purpose. |
| General conditions | $3,600 / calendar day | Burns seven days a week, weekends included. Every week you save is $25,200. |
| Liquidated damages | $14,000 / calendar day | Past contract completion: 134 working days = 186 calendar days from Mon 7 Sep 2026, i.e. 12 Mar 2027. |
| Early completion bonus | $1,600 / calendar day | Capped at 20 days, so $32,000 maximum. Deliberately modest. |
| Overtime premium | 1.375× / 1.75× | On worked crew-days, at 50 and 60 hours. |
| Expedite fees | $7,500–$24,000 | Card by card; buys back a stated number of delay days. |
| Judgment calls | $1,900–$22,000 | Priced per option, paid the week you decide. §4. |
A week late costs $123,200 in general conditions and liquidated damages before you count labour; a week early returns $36,400 while the bonus cap holds. That 3.4:1 asymmetry should govern every expedite decision and every call, and almost no first-year student computes it unprompted. Score is profit: contract plus change orders, less buyout, labour, general conditions, event and call costs, expedite fees and hiring, less liquidated damages, plus bonus.
Name the liquidated damages figure as a modelling choice before a sharp student does. Fourteen thousand a day on a $4.45M job is steeper than most real contracts this size, where LDs sit nearer actual carrying cost; it is set there so schedule rather than cost-cutting dominates the score. Asking the class what behaviour a $2,000-a-day LD would produce instead is a better five minutes than defending the number.
Measuredqualifier: computed from the engine's own CPM and the playtest harness at build, 2026-09-16; one crew per activity, no overtime Unimpeded, the network runs 89 working days against a 134-day contract — 45 working days, 63 calendar days, of cushion, which sounds generous until the deck goes to work on it. On the seeds in §6, a team that absorbs everything and never intervenes finishes 4 to 32 calendar days late and averages $2,604 — break-even, near enough — going negative on three of the eight. A team that reads float, prices its calls, orders manpower ahead of need and only fights the weather when the exposed work has no float averages $114,531. The whole game lives in that gap, and the gap is wider than earlier printings said: the figures here are the harness's own output, written by the build.
Correction carried in this edition. Earlier printings said “89 working days
against a 126-day contract — 53 calendar days of cushion” and gave the contract as 176 calendar
days. MAIN_NETWORK.contractWorkingDays is 134, and 134 working days from 2026-09-07
lands 2027-03-12, which is 186 calendar days. The date was right; the two day-counts and the cushion
were left over from an earlier edition.
Profit is still the score, but the game keeps the second set of books every contractor lives by. Costs go out weekly — labour, general conditions, the subcontract buyout drawn as work goes in. Revenue comes back monthly: a pay application billed against the schedule of values, paid about thirty days later, with 5% retainage held until closeout and released two weeks after the ribbon. The gap between those curves is the classic cash valley, financed on a line of credit at real interest (Illustrative ~9.4% APR) that comes off the score. The HUD carries the cash position all game — a team can be projecting a healthy profit while sitting $1,000,000 into the bank's money, which is precisely the conversation worth having out loud.
Week one opens with the schedule-of-values call: price it straight and finance the valley honestly, or front-load it so the job carries itself — against a 30% seeded chance the owner's reviewer audits a mid-job application and kicks it back three weeks. Both branches chart in the debrief's cash curve, valley marked in red with the interest bill printed under it. The misconception this section exists to kill: profitable and solvent are the same thing. They are not, and the S-curve chart is the proof.
Every trade carries a standing score you never see as a number — the crew card shows
SOLID / WARY / BURNED. Sustained 60-hour weeks, a second week of 50s, joint-checking their
supplier, or leaving mobilized crews idle all grind it down; steady work slowly rebuilds it. A wary sub
takes an extra week to field a crew you order. A burned one drags five per cent on everything. So overtime
costs three times: premium pay, decayed productivity, and a subcontractor who has stopped answering first.
It recovers — slowly — which makes “rest the sub” a real scheduling move.
A call is a judgment made before the work, whose consequence lands somewhere else. There are sixteen in Racer Commons and three in the tutorial. Each offers two or three options; each carries a price you pay this week — money, sometimes days — and an exposure: the probability the deferred consequence fires. Nothing is hidden. The card prints the exposure as a percentage and names the activity where it will show up, so it is a priced bet with the odds on it, which is what a real one is.
| The call, and where it lands | What you can buy | Price today | Exposure |
|---|---|---|---|
| Bearing at column line 4 — offered wk 1 at FTG, lands at INSP1: +3 days on the hold and $8,500 | Pour to plan | — | 45% |
| Field determination by the EOR | $3,200 + 2 d | 14% | |
| Over-excavate and add rebar | $9,800 + 1 d | 3% | |
| Start rough-in before the building is dry — offered at MEP1, lands at INSP3: tear out three days of MEP1 and MEP2, $7,400 | Start now, weather be damned | — | 40% |
| Temporary enclosure on the open elevations | $8,600 | 7% | |
| Hold rough-in until the building is dry | 4 d | 0% |
Not answering is answering. Every call defaults to its first option, which is always the free one and always the most exposed, and the card says so in as many words. A team that clicks Commit through the job has taken the 45%, the 40%, the 44% and all the rest without ever deciding to. That is not a gotcha; on a real job the default happens while you are busy.
The debrief prints one row per call: Week / Call / You chose / Cost / Exposure / The roll / Outcome. The last column is a verdict, and the verdicts are a two-by-two.
| The roll went your way | The roll went against you | |
|---|---|---|
| You bought the exposure down | Covered — never in doubt | Unlucky: you covered it and it still bit |
| You left yourself exposed | Got away with it | Went against you — and you were exposed |
The diagonal is the whole lesson. “Got away with it” is where the leaderboard's luckiest team lives, and it is the box that wins games and ends careers; “unlucky: you covered it and it still bit” is where a team that did everything right can be sitting. A good decision can have a bad outcome and a bad decision can have a good one. If you take one habit out of this sheet, take the habit of making a team defend a call before you show them the roll.
Weather-exposed work stands down on rain days by default and you lose them. You may instead work through:
70% production in the wet, $2,600 a rain day in pumping and protection, and a chance of placing something
you take back out — min(0.62, 0.16 × rain days), so a one-day blip is 16% and a
three-day washout is 48%, which are properly different decisions. Damage costs two days of rework on an
in-progress concrete activity and $5,200. Weather is something you act on rather than read, and it asks one
question: does the exposed work have float? Standing down on roofing with six days of it is free;
standing down on foundation walls at zero is a week of liquidated damages.
Every card that names activities carries a week window derived from where those activities sit in this project's own schedule, so a late rebar delivery cannot land ten weeks after the last pour went in. The window is computed from the network alone — the critical-path dates stretched to the pace a real run takes — which means it is identical for every team on a seed and the fairness guarantee is untouched. It also means the ten-activity tutorial is never told its curtain wall is late, because it has not got one. If a team is running far enough ahead that a card still arrives after the work it names is finished, the news says so plainly: no impact, you are ahead of this one. That is a reward, and it is worth pointing out when it happens.
Almost every call in the deck is a legitimate judgment with defensible answers on both sides. One is not. In week six or thereabouts, with the foundation walls up and green and nothing bracing them, backfill is sitting on the schedule. Waiting for strength and backfilling both sides evenly costs three days and carries no exposure. Engineered kickers buy those three days back for $6,400. And then there is the third option: backfill high against one side now and keep the machine moving — free, saves the three days, and marked ⚠ UNSAFE on the button, with the reason printed underneath before anybody clicks it.
Why it is not presented as a trade-off, and why it stays in. It is in the game deliberately, because schedule pressure producing an unsafe shortcut is not a hypothetical in this industry and naming it in a classroom is cheaper than meeting it on a jobsite. But it is not offered as one side of a balanced judgment, because it is not one: an unbraced, uncured foundation wall with fill on one side only is loaded in a direction nobody designed for, and when one lets go it rotates in on whoever is standing in the excavation. It is an OSHA excavation and structural-stability violation before it is a schedule decision. Presenting it as a trade-off would teach that the cost is dollars and days, when the cost is a person.
The important part is what happens afterwards. If a team takes it, the debrief opens — above the profit, before they can see their score — with a red block naming the call, quoting what they chose, and explaining why it is not available to them as professionals. It fires whether or not the wall stood. If the roll went their way the block says so in as many words: and it held. That is the most dangerous possible outcome, because it teaches you it was fine. If a team took it and topped the leaderboard, run the debrief in that order anyway: read the block, then read the number, then ask the room whether they would sign that decision with their own name on the citation. That is the whole lesson, and it lands better than any amount of safety lecturing because they chose it themselves under pressure you built.
Three calls are buyouts: structural steel at footings, $15,500; switchgear and the elevator at slab on grade, $22,000; curtain wall at the structural inspection, $18,500. Pre-buying sets a flag, and when the matching late-delivery card comes up the news reads “no impact — you bought that package out early”. No delay, no expedite fee, nothing to recover from — a late delivery has become the consequence of a decision made twenty weeks earlier rather than pure bad luck. Say the other half too, or you are teaching insurance instead of judgment: covering all three costs $56,000 against a deck that may never deal you the card, and on a seed where the glazing card never comes up that $18,500 bought nothing and was still not a bad decision.
Worth saying out loud at the board, because students read it as one: a fee always buys back some of a late delivery and never all of it. The engine caps recovery one day short of the delay at every difficulty, and if that leaves nothing to buy the offer is simply not made. A hot shot — a dedicated truck sent for one load rather than waiting for the scheduled run — recovers one of the two days on a short rebar shipment. It does not un-ship it. An engine self-test asserts no expedite ever buys back more days than the delay cost.
Sheet IG-01 carries these as five cards for use in the room, and the demo carries them as its on-screen refutation bank. This is the long version, with the exact moment in the run that exposes each.
Students treat any non-zero float column as permission. The exposure is the MEP branch. At baseline, MEP2 and MEP3 carry 8 and 4 days of total float and the rough-in inspection hold INSP3 carries 4. Then the switchgear card lands (“Gear that used to take 12 weeks now takes 30”, from week 8) for two days, and the failed rough-in inspection lands (fire-caulk missing at thirty-odd penetrations, from week 9) for three days on a hold nothing can compress. Two cards, five days on a branch that had four — and INSUL, which needs both the rough-in inspection and the curtain wall, is now on the critical path with drywall and finishes stacked behind it. Ask the team that spent that float in week 6 what they thought it was for. (Ask the team that pre-bought the switchgear how much of this they saw at all.)
The free-float half of this is sharper still: MEP1 has 9 days of total float but only 1 day of free float. Slip it three days and the project has not moved, but Level 2 rough-in cannot start when it wanted to. Total float belongs to the path and gets consumed by whoever spends it first; free float is the only part that is genuinely yours.
Two exposures, and you want both. The first is arithmetic: any team that puts drywall or finishes on 50-hour weeks and leaves them there is producing 0.938 of a straight-time week by week 5 while paying 1.375. Pull their week-by-week overtime log onto the projector next to the table in §2.
The second is structural and better. When the rough-in inspection fails and adds three days to INSP3, teams reach for overtime and it does nothing, because holds and cures are non-compressible. Same with the four-day deck cure DKC between the Level 3 deck pour and the structural inspection: a team crashes DECK3 with a second concrete crew, buys 44% off a four-day activity, and hands most of it straight back to the cure. Ask what they bought for that money.
At baseline the path runs through foundations, steel, deck and cure, the structural inspection, envelope, drywall, finishes, commissioning, final inspection and punchlist — and ROOF, roofing membrane and flashing, sits off it with six days of float. Roofing is weather-flagged, and the curtain wall (ENV2) cannot start until the roof is finished. Two rain days on roofing plus the membrane-backorder card and the roof is critical, at which point the glazing card that arrives later matters twice as much as it would have. The question for the debrief is not whether they saw the announcement — it is whether anyone changed their allocation the week before, when the float column was down to one day and still technically positive.
Rain days only stop weather-flagged work: earthwork, concrete placement, roofing and envelope. Nothing else in the building is exposed. The clean demonstration is the same card in two places. “Ground is soup” costs earthwork and concrete up to three days; drawn in week 3 it takes three days off excavation, footings or foundation walls, all of which are critical, and the project moves. Drawn in week 18, with the building dried in and drywall and finishes running, it costs exactly nothing. Same card, same three days, same seed. And a cure keeps curing through a washout — a rained-out week still advances FTGC.
Name the boundary out loud, because it is a modelling decision and not an accident. Steel erection carries no weather flag, so the wind-advisory card stops glazing and sheathing and leaves the crane alone, and real erectors do stand down in 40 mph gusts. Whether a boundary drawn for teachability is drawn in a defensible place is a good question for the room; an engine self-test enforces it in both directions, so no activity outside those four trades can be flagged and no weather card can claim a trade with no exposed work.
The gambler's fallacy in a hard hat, and the most expensive habit on this list, because the job keeps rewarding it right up until it does not. A team pours to plan at column line 4, the seed's roll comes in at 0.61, the inspector takes the pads without comment, and they leave convinced they read the geotech. They read nothing: they took a 45% chance of a three-day hold and $8,500 on a foundation inspection and the roll — the roll every other team in the room was handed — landed above the line.
Put their calls table beside the row of a team that bought the same call down to 3%. Same seed, same roll, one verdict reading “Got away with it” and the other “Covered — never in doubt”. Then price it in front of them. If the branch that hold lands on still has float, pouring to plan cost an expected $3,800 and the $9,800 was wasted money. If the foundation branch has gone critical — two rain days on excavation will do it — three days at $17,600 a calendar day turns the free option into an expected $27,000 and makes $9,800 the cheapest thing on the card. The question is never “did it work out”, it is “what was it worth on the Monday you decided, given where the float was”. Then ask which team they would want running the next job.
Eleven, in the order they usually land. Sheet IG-01 asks for two or three; these are all of them.
Any string works — it is hashed, and it is upper-cased first, so msu-1 and
MSU-1 are the same run. Announce the difficulty with it: the deck is rolled from seed
and difficulty together, so a team on the wrong setting is not playing your game and its score does
not belong on your leaderboard. Check a seed before class by watching a do-nothing baseline run; you want
one where absorbing everything finishes late enough to hurt but not so late that good play cannot recover
it.
| Seed | Wks | Defaults vs contract | Defaults | Wks | Judgment vs contract | Judgment | Character |
|---|---|---|---|---|---|---|---|
| MSU-2601 | 29 | 13 days late | $101,030 | 28 | 6 days late | $219,540 | Middle of the road. Good first run. |
| TOPPING | 28 | 4 days late | $189,705 | 26 | 10 days early | $291,147 | The one where a well-played job beats the contract date and collects the bonus. |
| FALL26 | 30 | 18 days late | −$66,095 | 29 | 11 days late | $48,916 | The defaults lose real money; judgment recovers it. |
| WK7 | 30 | 21 days late | −$124,984 | 28 | 7 days late | $90,898 | The defaults lose real money; judgment recovers it. Widest spread on the sheet. |
| BLUE | 29 | 14 days late | $4,342 | 28 | 7 days late | $105,972 | Middle of the road. Good first run. |
| GOLD | 32 | 32 days late | −$350,637 | 30 | 21 days late | −$165,670 | Punishing: even judgment loses money here. Not a first-run seed. |
| CMGT-201 | 29 | 12 days late | $1,617 | 28 | 7 days late | $72,223 | Middle of the road. Good first run. |
| CALLOWAY | 28 | 4 days late | $265,852 | 28 | 4 days late | $253,221 | Rewards nerve: the free options clear their thresholds, so the team that spent nothing beats the team that covered. Best debrief seed on the sheet. |
Across the eight seeds the defaults average $2,604 and go negative on three; judgment averages $114,531 and wins on seven of the eight. Well-played runs land between 26 and 30 weeks; the defaults between 28 and 32. The best finish observed was 126 working days, eight working days inside the contract, on one of the eight seeds — so the early bonus is reachable, though nobody has come near the 20-day cap.
Some seeds reward caution and some punish it, and that is a feature. On CALLOWAY the free options happen to clear their thresholds, so the team that spent nothing on the calls beats the team that covered them, and you will hear about it. Do not apologise and do not reroll. When a team complains, put the two calls tables side by side and read the exposure column rather than the profit column: the careful team paid twenty thousand or so to be covered on decisions it could not see the end of, while the lucky team carried 40-odd per cent four or five times and was owed a bad week that never came. Then ask the room to replay the seed with the same calls and predict who wins. Nothing changes, because the rolls are fixed, and that is the moment a student hears the difference between a repeatable process and a result.
Easy draws zero or one non-weather card a week, scales every delay, hold, cost and productivity loss to 60%, and takes a day off every rain forecast. Standard is the same card count at full severity. Hard draws one or two non-weather cards a week, scales severity to 130%, and adds a rain day. Severity scales delay days, hold days, event costs, expedite fees and the days an expedite fee buys back, so hard is harder because more goes wrong, not because the remedies quietly stop working. Use Standard for a first session, Easy if this is the class's first exposure to CPM at all, and Hard for a second run on a seed they have already seen.
The game is fully playable on a phone: under tablet width the interface folds into two tabs, SITE and MEETING, with the commit button always in reach — useful when a team of three has one laptop and two phones. The identity is Murray State throughout: navy and gold, the horseshoe, the pennant on the field office, and gold hard hats on every crew. The critical path stays red. Some things are sacred.
The engine has no clock, no network call and no unseeded randomness. Same seed plus same decisions produces the same profit to the dollar, and this is one of the checks in the self-test suite. So a disputed score can be reproduced by replaying the seed with the team's decision log, and a team whose browser dies can rebuild from where they were. Settings runs the whole self-test suite, including the tutorial CPM checked against the hand calculation in §1 and the two checks that hold the calls fair — thirty-six checks, live, in front of the class. Running them is a surprisingly good two minutes of teaching if a student is convinced the software cheated.
Correction carried in this edition. Earlier printings said “twenty-eight
checks”. node src/engine.js --test reports 36 passed, 0 failed, 36 total.
The usual failure is a team that deliberates every week. Plenty of weeks carry a clear forecast, no open call and one card that misses their live work fronts entirely; those should commit in seconds. Tell the room at the checkpoint: read the news, ask whether it touches anything with zero or one day of float, and if it does not, commit. Save the deliberation for the 16 calls, the weather weeks with critical work exposed, and the two or three weeks where manpower has to be ordered before the need is visible.
Every call is written the way it would be said on a jobsite, which means a first-year hits words they have never met: a proof roll that pumped, cylinder breaks, embeds, dry-in, fire-caulk at a penetration, shop drawings, a hot shot. Each call carries a What this actually means panel that unfolds under the text and explains the term and why it matters. The same terms are in the hover glossary in the game, which is the authoritative copy; this is the printable extract. You do not need to pre-teach any of it — but tell the room the panel is there, because students who do not know a word will guess rather than ask.
| Critical path | The longest chain of dependent activities through the network. Every activity on it has zero total float, so a day lost on any of them is a day lost on the whole project. Computed fresh every week, not fixed at baseline — it moves. |
| Total float | How many working days an activity can slip before it delays project completion. Shared along a chain: spend it on one activity and the ones after it no longer have it. |
| Free float | How many days an activity can slip before it delays the very next activity. Belongs to that activity alone. Always less than or equal to total float. |
| Float tail | The thin bar after an activity on the Gantt: the days it could slip before it pushes something else. |
| Lag | An enforced wait built into a relationship. FS+4 means the successor starts four working days after the predecessor finishes. Cure and inspection holds are modelled as activities rather than lags so you can see them sitting on the critical path. |
| FS / SS / FF | Finish-to-Start (the ordinary case); Start-to-Start (the successor may begin once the predecessor has run for the lag — how overlapping floor-by-floor work is really scheduled); Finish-to-Finish (the successor cannot finish until the predecessor does, plus lag — commissioning cannot close out ahead of finishes). |
| Crash | Shortening an activity by adding resources. Always costs more per day saved than working normally, so it only pays on the critical path. |
| Trade stacking | More crews in a zone than it can hold. Everybody loses productivity: same hoist, same laydown, same access. Four crews in a two-crew zone do not do four crews of work. |
| Overtime decay | Sustained overtime loses productivity week over week — fatigue, absenteeism, and the difficulty of keeping extended crews supplied with work and material. Past a point a 60-hour week produces less than a 40-hour week did and costs 75% more. |
| General conditions | The cost of simply being on site: supervision, trailer, temp power, fencing, dumpsters, insurance. Burns per calendar day whether or not anybody is productive, which is why an idle week still costs real money. |
| Liquidated damages | A fixed sum per calendar day owed to the owner for every day past contract completion. Not a penalty in law — an agreed estimate of the owner's loss. Accrues on calendar days, weekends included. |
| Buyout | The subcontracts and materials committed at award. Fixed at this point in the job — you are managing the schedule and the crews, not renegotiating the buyout. |
| Expedite | Paying a premium to recover time on a late delivery: premium freight, buying somebody else's production slot, a substitute assembly. Buys back days, never all of them. |
| Total float remaining | The sum of total float across every activity still to be done — how much cushion is left in the whole schedule. It falls as events consume it. |
| Proof roll | A loaded truck driven slowly across prepared subgrade while the inspector watches the ground under the tyres. How you find soft spots before you build on them. |
| Pumping | When subgrade flexes and rebounds in a visible wave behind a truck tyre. The soil is too wet or too soft to carry a slab, and it has to be undercut and replaced. |
| Undercut | Digging out unsuitable soil and replacing it with compacted stone so the slab has something to bear on. |
| Bearing capacity | How much load the soil under a footing can carry before it settles or fails, in pounds per square foot. The geotechnical report gives a design value and the footings are sized to it. |
| EOR | Engineer of Record — the licensed engineer who sealed the structural drawings. A field determination from them is a written call an inspector will accept. |
The screen is the source of truth for this table. The game's glossary is generated from
src/app.js; this sheet is a print convenience and may lag it.