You closed forty jobs last year.How many taught you anything?
This is not a drift measurement, and that is the point. It will not tell you your labour ran 22% over, because in construction that number is usually unavailable rather than bad. Every project is a one-off, the job closed, the estimator moved to the next bid, and nothing came back. The failure is not a wrong number. It is the absence of one.
Almost every contractor closes jobs. Very few close the loop.
The last invoices land, retention is released, the job is marked complete and the file goes away. Nothing in that sequence requires anyone to ask what the job taught, and nothing routes an answer back to whoever priced it.
The estimate is organised the way work is priced. The job cost is organised the way work is paid for. When the two do not map, the variance is not unknown — it is unknowable, and no amount of discipline fixes it.
A firm can close every job cleanly, file every report, and change nothing. The loop looks healthy from every angle except the one that matters: whether a number a bid rests on ever moved.
Two thirds fed back, and the loop is still open.
Six closed jobs running the same logic the shipped engine runs. Set Basis updated to 1 on any single job and the second trigger releases — one job, anywhere, is the whole difference between a practice that learns and one that files.
1 job(s) whose cost codes do not map to the estimate: J-1085 — the comparison is not possible, not merely undone
no job in the register ever changed the estimating basis — the loop has never once closed
- Fix first
- J-1085 · Cost codes map to the estimate
- Out of scope
- none
Two thirds of these jobs fed back and the loop is still open. Set Basis updated to 1 on any single job and the second trigger releases — one job, anywhere, is the whole difference between a practice that learns and one that files. Fixing the cost-code mapping on J-1085 alone will not do it, which is the point.


How the gate works, in one image
Eight closed jobs, six signals each and a two-trigger feedback gate — one picture of why a register where 71% of jobs fed back still comes back LOOP OPEN.
View & embed the full diagramWhat it prints, on the 8-job example that ships with it.
Verbatim stdout, not a mock-up. Zero dependencies, Python 3.8+, fully offline.
ESTIMATE-TO-ACTUAL FEEDBACK GATE — EAF-099 ============================================================================== J-1041 Northgate Clinic 2026-02-14 83 FED BACK J-1052 Harbor Point Retail 2026-03-28 83 FED BACK J-1063 Westline Warehouse 2026-04-19 75 FED BACK J-1074 Cedar Ridge Apartments 2026-05-30 83 FED BACK J-1085 Municipal Annex 2026-06-11 33 LOST <- no cost-code mapping J-1096 Riverside Pump Station 2026-07-02 75 FED BACK J-1107 Fairmount School 2026-07-25 - OUT OF SCOPE J-1118 Glenview Medical 2026-08-08 67 PARTIAL ------------------------------------------------------------------------------ JOBS IN SCOPE: 7 (FED BACK 5 / PARTIAL 1 / LOST 1) 71% fed back Out of scope: 1 job(s) — J-1107 Jobs that changed the estimating basis: 0 of 7 GATE FIRED: 1 job(s) whose cost codes do not map to the estimate: J-1085 — the comparison is not possible, not merely undone GATE FIRED: no job in the register ever changed the estimating basis — the loop has never once closed VERDICT: LOOP OPEN Jobs that taught you nothing: J-1085 Fix first: J-1085 · Cost codes map to the estimate
Five of seven jobs read FED BACK and 71% of the practice fed back, which is a respectable number. Both triggers still fire. One job's cost codes do not map to its estimate, so that comparison was never possible — and across the whole register, not one job ever changed the estimating basis. That second line is a condition on the register rather than on any row, and it is the one a share can never see.
Three rules the verdict is held to.
It computes no variance, no productivity factor and no unit cost, and it never says what anything should have cost. Measuring drift assumes the loop already exists. In construction, that is the assumption that is usually false.
One sloppy closeout on a chaotic project does not mean your firm never learns, and a worst-of rule would say it did — which would make the instrument useless within a quarter, because every firm has one bad job.
A comparison that was never possible, and a register where nothing ever changed the basis. The second reads the whole register rather than any row, because six jobs each scoring 83 with nobody touching the basis is exactly the shape of a firm with excellent paperwork and no learning.
- Closeout completerequired
- Final costs closed and reconciled — not still trickling in. Required.
- Cost codes map to the estimaterequired
- Actual codes map back to the estimate's own line structure. Required, and the first gate trigger.
- Variance causes named
- Every material variance has a cause: scope change, productivity, pricing error, quantity error. Not just a number.
- Estimator saw the result
- The person who priced it received it. A report sent to an inbox is not an estimator seeing the result.
- Basis updated
- The unit cost or assembly actually changed — or a decision was recorded not to change it.
- Comparison retrievable
- You could produce it today without rebuilding it from invoices.
Clear about the lane. No inflated promises.
- A deterministic read on whether closed jobs reach the next estimate.
- A detector for a comparison that was never possible in the first place.
- A ninety-minute closeout session that actually feeds back, written down.
- The one-time cost-code mapping fix that unblocks every future closeout.
- Offline. Nothing is uploaded and nothing phones home.
- A variance report, a productivity factor, or a unit cost.
- A reader of your accounting system, estimate, or job costs.
- A claim that your numbers are good — only about whether anyone found out.
- A drift measure for repeated production. That is a different instrument.
- An implementation service for your cost-code structure.
On the verdict name: EVERY JOB FEEDS THE NEXT ESTIMATE AS DESCRIBED is a statement about the register as you filled it in. Nobody read your job costs.
The firm that wants next year's estimates to beat this year's.
- Contractors whose estimating basis has not moved in years.
- Firms where closeout happens and nothing comes of it.
- Estimators who suspect an assembly is wrong and cannot prove it.
- Anyone about to buy estimating software that assumes this loop exists.
- Tell you how far off an estimate was.
- Read or reconfigure your accounting system.
- Produce a unit cost you can price with.
- Decide whether a variance was somebody's fault.
The rest of the loop.
The front of the same loop. That one closes the gaps before a bid goes out; this one asks whether the job it became ever came back.
Where a quantity variance often starts. If a takeoff came off a sheet at an undeclared scale, the cause you are looking for is upstream of the estimator.
The drift instrument, for repeated production rather than one-off projects. It measures how far off you were; this one asks whether anybody ever found out.
The questions contractors actually ask before running this on their own jobs.
It is a $99 deterministic gate that grades whether closed jobs ever taught anyone anything, and returns EVERY JOB FEEDS THE NEXT ESTIMATE AS DESCRIBED, LOOP LEAKING, or LOOP OPEN. For each recently closed job you mark six signals — closeout complete, cost codes map to the estimate, variance causes named, estimator saw the result, basis updated, comparison retrievable — and it returns the verdict, the share of jobs that fed back, and the one thing to fix first. It ships a zero-dependency Python engine, a live-formula Excel workbook, two playbooks and a worked 8-job example.
Because in construction that number is usually unavailable rather than bad, and the difference matters. Every project is a one-off, so there is no repeated production run to average. The jobs closed, the estimator moved to the next bid, and nothing came back — the failure is not a wrong number, it is the absence of one. Measuring drift assumes the loop already exists. This asks whether it exists at all, which in most firms is the question that is actually open.
Because a loop is a property of a practice, not of any one job. One sloppy closeout on a chaotic project does not mean your firm never learns, and a worst-of rule would say it did — which would make the instrument useless within a quarter, since every firm has one bad job. So the practice reads on the share of in-scope jobs that fed back: 80% or better is the top band, 50% or better is leaking. The gate is what handles the failures a share cannot see.
It fires when a job's actual cost codes do not map back to the estimate's own line structure, and it forces LOOP OPEN whatever the share says. The estimate is built the way work is priced — by division, by assembly. The job cost is captured the way work is paid for, by cost code. When those do not map, the variance is not merely unknown, it is unknowable, and no amount of closeout discipline fixes it. It is also invisible to anyone measuring drift, because there is nothing to measure. The included mapping guide covers the one-time fix.
It fires when no job anywhere in the register ever changed the estimating basis — the loop has never once closed. It is a condition on the group rather than on any row, which is unusual, and it earns its place arithmetically: six jobs each scoring 83 with nobody ever touching the basis would otherwise read as a healthy practice. That is precisely the shape of a firm with excellent paperwork and no learning. One basis update anywhere releases it, and recording a deliberate decision to change nothing counts.
A calibration tool assumes the comparison exists and measures the drift in it, which is the right instrument for repeated production where you make the same part many times and can accumulate enough closed jobs per category to trust an average. Construction has neither condition. This grades whether the comparison happens and reaches anyone, and it is deliberately silent about magnitude. The two can disagree in both directions: a shop can have tight measured drift on the categories it tracks and no closeout process for the rest, or a disciplined loop that has just found a large variance.
Yes, by marking it out of scope, and the count of those is printed on every run in plain sight — a waiver you cannot see is a waiver you can abuse. A blank in-scope answer counts as IN scope, so a missing answer can never quietly shrink the practice being graded. Two signals, closeout complete and cost codes map to the estimate, cannot be marked not-applicable at all: the engine refuses the input rather than dropping it, because marking one N/A would remove it from the divisor and from the gate at the same time.
It is for a contractor who wants next year's estimates to be better than this year's, and it is meant to be run against your last six to ten closed jobs in an afternoon. The honest answer on who it is not for: anyone looking for a variance report, a productivity factor, or a unit cost. It reads no accounting system, computes no variance, and never says what anything should have cost. It makes no claim that your numbers are good — only about whether anyone ever found out.
Close the job.
Then close the loop.
One purchase, lifetime access, 12 months of updates. $99, once.
Honest boundary: a feedback-loop aid. It grades a register you fill in — it reads no accounting system, computes no variance, and never says what anything should have cost.
Sold by RedHub AI LLC · Secured by Stripe · redhub.ai