Stage status, actual dates and variance

Every stage carries a status, real start and finish dates, and how many days it ran over or under plan.

What it is

Four statuses — Planned, In Progress, Delayed, Completed — plus editable Actual Dates and a variance readout ('Actual: 7 days (planned 5) · +2 late'). Marking a stage in progress stamps the start; completing it stamps the end and computes actual days and variance.

Also called: planned vs actual · how late are we · stage running over · days behind

See it, piece by piece
01

Every stage records what it actually took, beside what you said it would

Marking a stage In Progress stamps the real start; completing it stamps the finish and works out the run — "Actual: 7 days (planned 5) · +2 late". Those durations used to be worked out on screen and thrown away, so every completed stage carried a blank actual duration behind it and no builder could say how long framing really takes on his own jobs. Both dates stay editable, because the crew tells you on Monday what happened on Friday.

Stage quick-edit
Post Set
Hostetler Equipment Shed
Start
Sep 29, 2026
End
Oct 8, 2026
Duration
9d
Stage ends after project end.
Status
plannedin progressdelayedcompleted
Crew
Crew A — Marcus Feld
Full DetailsCancelSave Changes
The status row, the two actual-date fields, and the variance line under them. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
02

The plan is frozen at kickoff so nobody can move the goalposts

Change a stage from five days to seven halfway through and the estimate you are measuring against moves with it — a job that ran two weeks over reads as on time, because the plan was quietly edited to match reality one stage at a time. What a stage was figured to take is locked the moment the job starts. Where it sits on the calendar stays free to move, because rescheduling a job that slipped is not the same act as re-estimating it.

03

Late and early are written on the bars themselves

A finished stage carries its variance on the bar — +3d in red, −2d in green — so the jobs that ran over are visible from the other side of the office without opening anything. The bar is the only place most people will ever look, which is why the number lives there instead of in a report someone runs at the end of a quarter.

Build Schedule
Project / Task
Hostetler Equipment ShedCrew A
Zimmerman Horse BarnCrew B
PermittingAug 4Aug 18
Dirt WorkAug 18Aug 22
ConcreteAug 22Aug 28
Material DeliveryAug 28Sep 1
Post SetSep 1Sep 11
Stoltzfus ShopCrew C
Byler BarndominiumCrew A
Jul 27Aug 2
Aug 3Aug 9
Aug 10Aug 16
Aug 17Aug 23
Aug 24Aug 30
Aug 31Sep 6
Sep 7Sep 13
Sep 14Sep 20
Sep 21Sep 27
Sep 28Oct 4
Oct 5Oct 11
Oct 12Oct 18
Oct 19Oct 25
Oct 26Nov 1
TODAY
Permitting 4/4
Post Set 3/6
Siding / Roofing 0/11
46% • 38d
Permitting+3d
Concrete
Post Set0/6
Permitting 1/4
Framing 0/6
Siding / Roofing 0/11
Permitting 0/4
Slab / Foundation 0/6
Post Set 0/6
Siding / Roofing 0/11
Shutdown week — Crew B
OVERLAP
Completed stage bars carrying their +3d and −2d variance chips. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
04

The numbers are computed once, not by whichever screen happened to save

Actual days and variance are worked out where they are stored, on every write, rather than being sent up by the screen doing the saving. The office, the crew's phone and the analytics all read one figure, so there is nothing to reconcile. The alternative is a bug on one screen quietly writing numbers every other screen then trusts.

05

Every change to an actual date says who moved it, and from what

Editing a real start or finish records the old value, the new value, the job, the stage and the person. Actual dates decide crew pay, delay claims and what the customer gets told, so a quiet correction three weeks after the fact is exactly the kind of thing you want a line about.

How it works
  1. 1updateTaskStatus updates local state first for instant response, then upserts the crew stage log in the background
  2. 2Actual start and end are separately editable, and every change writes an audit log entry naming the old and new values
  3. 3actual_days and variance_days are DERIVED in the database on every write rather than sent by the client
  4. 4Variance is measured against the baseline set at project start, not against a duration a mid-project edit could rewrite
  5. 5Selecting 'Delayed' opens the delay reporting flow instead of just flipping the status
Why we built it

Actual durations and variance were calculated and shown on screen, then thrown away — written into the page and never into the record, so the numbers survived one session and vanished on reload. Every completed stage in the system carried a blank actual duration behind it, which is why nobody could answer how long framing really takes on their own jobs. Actuals are recorded as they happen, against a plan frozen at the start, because you cannot measure 'we ran three days over' if the estimate quietly follows the actual around.

The problem
  • Variance metrics that were never persisted
  • Estimates silently following actuals so nothing could be measured
  • No record of when a stage really started or ended
Sound familiar?
What you get
Real durations captured per stage
Variance measured against what was actually promised
Numbers survive a reload and every future write path
What's inside

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →