Skip to main content
DoneThat

AI Adoption GuideConstructionClose

Estimating Benchmark Update

ML updates internal cost and duration benchmarks from final outturn data for use in future bid estimating.

Construction processBidAwardPlanMobilizeBuildInspectHandoverClose

By Don, DoneThat’s AI coach · updated

A cited proposal is the only change that should reach the rate file

The close-stage output is a proposed benchmark change, not a live edit to the estimating library. Each proposal names the code or assembly, shows the current library value, shows what closed outturn implies for cost and for duration, and cites the outturn record that produced those figures. Estimating signs before anything in the live file moves. If the outturn record is missing, incomplete, or cannot be mapped to a single reusable unit, the proposal stays empty. Empty is a valid quality result. Filling the gap with a guessed rate is not.

This is a quality gate, not a completeness exercise. A model that always emits a number will train the next bid on jobs that never actually finished. The library estimators open on a live tender should only contain rates someone in estimating has accepted, with a trail back to a closed job.

Cost, quantity, and schedule actuals usually already live in the same class of construction platforms estimators already use, including Autodesk and Procore. The work at close is narrower: read those actuals, refuse to invent what they do not contain, and put a human signature between the closed record and the rate file used for future bids.

Treat anything short of final outturn as missing

Final outturn means remaining cost and remaining time will not move the unit you intend to reuse. Before you propose a rate, confirm the commercial close is far enough along that variations or change orders on that code are agreed or coded, remaining accruals are allocated, and the quantity you will divide into is the installed quantity. Bid quantity is the wrong denominator when the job grew, shrank, or was remeasured.

Duration needs its own completeness test. Production time comes from as-built activities against installed quantity, not from a schedule that is still being forecasted. If access, follow-on trades, or weather standing are still bundled into the activity dates, you do not yet have a duration actual for that unit.

Writing a rate from a half-closed job is the failure that looks the most like diligence. The code shows complete in the cost system while snagging or punch-list labour is still charging, a variation is still in dispute, or retention adjustments have not landed. Averaging that spend into a unit rate produces a figure you can put in a spreadsheet and still be wrong. The rule does not change because a model did the division: no stable outturn record, no proposal. Leave cost empty, leave duration empty, or leave both empty. Do not emit a draft rate that someone will paste into the library under time pressure.

Cost and duration can close on different days. A code can have a clean final cost and an unusable as-built duration, or the reverse. Split the proposal. Sign the field that has a cite. Keep the other field empty.

A closed duration here is not a substitute for CPM schedule generation from scope on the next job. The next critical path still has to be built from that job's constraints.

Assemble cost and duration proposals with a cite to the closed record

A usable proposal is attributable outturn cost and, when the as-built supports it, duration, each cited to the closed record. Work one estimating code or assembly at a time.

Map the estimating item to the cost code and to the installed quantity source. If one cost code covers several assemblies, or several codes were rolled into one bid line, stop. A blended unit is not a benchmark you can reuse with a straight face. The proposal stays empty until the mapping is unambiguous, or until estimating decides the blend is the thing they want to store, with that limitation written on the cite.

Attribute cost that belongs in the reusable unit, and only that cost. Preliminaries, site establishment, crane or hoist taken as a lump, weather standing, and variation extras that will not recur on a clean future tender do not belong in the production unit. Mixing prelims into unit rates is how the next estimate double-counts site overhead or carries a site-specific condition into a standard rate. If the outturn cannot separate prelims from the unit, you do not have a unit-rate update. You have a job-level note. Put that with lessons learned knowledge base extraction, not in the rate file.

Compute the candidate cost rate from attributable outturn cost divided by installed quantity. Compute the candidate duration from as-built production, quantity over working time on that activity, only if the activity cite is clean. Each figure in the proposal needs a source: job identifier, cost-code mapping, quantity source, and activity identifier when duration is included. Also record inclusions, exclusions, and the current library value so the signer can see the delta without hunting.

Illustrative path, not a measured result: hang-and-finish drywall on a closed education fit-out. Installed area is known. The cost code still includes a share of site supervision because the job never split prelims. Punch-list labour is still charging to the same code. A complete cost proposal waits until that labour is coded off the assembly, pulls supervision out of the unit or refuses the unit update, and cites the final cost set plus the as-built quantity. Duration is proposed only if the as-built shows crew time against that area without access delays sitting inside the same dates. If punch-list work is still open, the whole proposal is empty. If prelims cannot be stripped, the unit-rate fields stay empty and the observation goes to lessons learned.

Compare the candidate with history before it becomes the new normal

A single closed job is evidence, not a replacement library. Compare the candidate against similar historical bids and closed jobs. The question is whether this outturn sits inside the existing spread or outside it, and whether the difference is a condition that will not repeat. Retrieval of like work is the check against promoting an outlier; use historical bid RAG retrieval for that comparison.

An outturn from a job that was won low and then lost money on this code can still be recorded. It should not silently become the rate you bid next time. Flag that context on the proposal so estimating sees it before sign-off, including whether abnormally low bid detection already marked the original tender.

Do not interpolate a missing field from similar jobs in this workflow. Similarity search is for the reviewer's eye. It is not permission to synthesize a number the closed record never produced.

Keep the live library unchanged until estimating signs the cite

Overwriting the library without a cite is the failure you cannot cheaply undo. Once a rate is in the file people copy into a live tender, it will appear in bids before anyone notices the source was a half-closed job or a blended prelim. Require the cite as a hard field: no job, no mapping, no quantity basis, no write. Version who signed, which outturn they signed, and which fields they left empty.

Signing is an estimating decision about future use, not a click that accepts a model output because the queue is long. The signer accepts the cite, the inclusions, and the scope of reuse: which building types, which regions, which procurement route. A rate that is true for that closed fit-out may be wrong for a new-build envelope.

What stayed empty stays empty through sign-off. Missing outturn, unmapped codes, mixed prelims, and incomplete duration remain blank. After sign-off, the benchmark is available to the next estimate as a better prior. It does not replace reading the next job, checking historical bids, or testing whether a price is abnormally low. The library is only as honest as the closed records you allowed into it.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first