Construction · Job profitability

Profit fade and gain

The change in a job's projected gross profit from one period to the next, or from bid to now. Fade means projected profit is falling; gain means it is rising.

Plan your metrics

What it is

Every month the PM updates the estimate of total cost. When the estimate rises faster than the contract value, projected profit falls. That decline is fade. When projected profit rises, it is gain.

Fade can be measured in margin points or in dollars, and against the bid or against the prior period.

Why operators track it

  • Early warning. Fade often shows up months before a job closes at a loss.
  • Estimating discipline. A pattern of fade across many jobs points to bids that were too optimistic.
  • Surety review. Surety underwriters read the trend in projected profit across periods, not just the current margin (Surety Bond USA).
  • Accountability. Tracking fade by PM shows whose forecasts move the most.

How it is calculated

Fade = projected margin (prior period or bid) − projected margin (now)

  • Projected margin = (revised contract value − estimate at completion) ÷ revised contract value.
  • Measure it in points (14.3% to 11.3% is 3.0 points) or in dollars of projected gross profit.
  • A negative fade is gain.

Worked example

Job 2417 was bid at $1,400,000 with a $1,200,000 budget, a 14.3% margin. Today the contract is $1,500,000 and the estimate at completion is $1,330,000, an 11.3% margin. That is 3.0 points of fade, or $30,000 of projected profit lost.

Projected margin at bid vs now, by jobJob 2417bid 14.3%now 11.3%−3.0 ptsJob 2420bid 18.6%now 17.4%−1.2 ptsJob 2431bid 13.5%now 11.7%−1.8 ptsFade in points = margin % at bid (or last period) − margin % now. Fade in dollars on job 2417:$200,000 margin at bid − $170,000 projected now = $30,000, even though the contract grew by $100,000.
Example data Black dot is margin at bid, red dot is projected margin now. All three jobs are fading; 2417 is fading fastest.

How to read it

  • Watch the direction over several months. One month of fade with a clear cause is different from steady fade.
  • Look at fade and over/under billing together. A fading job that is also underbilled deserves a closer look.
  • Compare fade across PMs and job types. Repeated fade on one job type suggests the estimate for that work needs revisiting.
  • Late gain is a signal too. Large gain near the end of a job can mean contingency was held back in the forecast.
  • Fade levels vary by contractor and job type, so we do not publish a benchmark.

Definitional choices and common pitfalls

  • Bid or prior period. Fade since bid shows the whole story; fade since last month shows what changed now. Many reports show both.
  • Points or dollars. Points compare jobs of different sizes. Dollars show the impact on company profit.
  • Change orders. Approved change orders change both contract and cost. Decide whether to separate fade on original scope from change order margin.
  • Snapshots needed. Fade needs saved monthly forecasts. Without history it cannot be calculated.
  • Completed jobs. Final margin vs bid margin on closed jobs is the cleanest view of estimating accuracy.

How different roles use it

Role How they use it
Owner / CEO Scans total fade across open jobs and asks about the largest.
CFO / controller Makes sure each faded job has an explanation before the WIP goes to the surety.
Project manager Explains fade on their jobs and updates the forecast.
Estimator Compares final margin to bid margin by job type to adjust future bids.

Questions it answers

  • Which jobs lost the most projected profit this month?
  • Is fade concentrated with one PM or one job type?
  • How much profit has faded since bid across all open jobs?
  • Are we seeing gain late in jobs?

How to present it in a report

  • One row per open job: margin at bid, last month, now, and change.
  • Sort by fade in dollars so the biggest impacts are on top.
  • A small trend line of projected margin per job.
  • A company total for fade since last month and since bid.
Customer report mockupExample data
Profit fade reportOctober 2026 · open jobs
Fade since bid$75,0003 jobs
Fade this month, job 2417$16,000vs September
Jobs fading3 of 3
JobPMBid marginLast monthNowFade since bid
2431A. Diaz13.5%12.0%11.7%−$35,000
2417J. Moore14.3%12.4%11.3%−$30,000
2420J. Moore18.6%17.6%17.4%−$10,000

Sorted by fade in dollars.

Data you need

Fields

Field What it means Example value
Job The project, with PM and job type Job 2417
Original contract and budget Contract and estimated cost at bid $1,400,000 / $1,200,000
Revised contract value Contract plus approved change orders $1,500,000
Estimate at completion Cost to date plus cost to complete $1,330,000
Forecast period The month the forecast was saved Oct 2026

What the raw data looks like

Example data A few rows as they might come out of the source system.

Job Period Revised contract Estimate at completion Projected margin
2417 Bid $1,400,000 $1,200,000 14.3%
2417 Aug $1,450,000 $1,253,000 13.6%
2417 Sep $1,500,000 $1,314,000 12.4%
2417 Oct $1,500,000 $1,330,000 11.3%

Where this data usually lives

  • Construction ERP and accounting holds job cost, budgets, billing, AP, and AR. For example: Sage 300 Construction and Real Estate, Viewpoint Vista (Trimble), and Foundation. Some smaller contractors use general accounting software such as QuickBooks with jobs set up as projects.
  • Project management often holds change orders, commitments, and project documents. For example: Procore.
  • Spreadsheets often hold forecasts, logs, or the report itself.

The same field can live in more than one system. Agree with the customer which one is the source of truth.

Common data gaps and traps

  • No forecast history. Many systems overwrite cost to complete each month. Ask whether past forecasts are saved.
  • Forecasts kept in spreadsheets. The PM's real forecast may never reach the ERP.
  • Original budget changed. If the bid budget is edited later, fade since bid disappears.
  • Change orders entered late. A late change order makes margin jump down then up.

FAQ

What is profit fade in construction?
A drop in a job's projected gross profit from one period to the next, or from bid to now.
What is profit gain?
The opposite of fade: projected profit rises, often because costs came in under the forecast.
Why do sureties care about fade?
They read the trend in projected profit to judge whether jobs will finish where the contractor said. See Surety Bond USA.
For your data teamFormula variants, tables, SQL sketch, and dashboard spec

Formula details

projected_margin_pct = (revised_contract - eac) / revised_contract
projected_gp          = revised_contract - eac
fade_pts_mom          = projected_margin_pct[prev] - projected_margin_pct[now]
fade_pts_bid          = margin_pct_at_bid - projected_margin_pct[now]
fade_usd_bid          = gp_at_bid - projected_gp[now]

Worked example detail

Job Bid margin Now Fade (pts) Fade ($)
2417 14.3% 11.3% 3.0 $30,000
2420 18.6% 17.4% 1.2 $10,000
2431 13.5% 11.7% 1.8 $35,000

Tables and fields

Table Fields Notes
job_forecasts job_id, period, revised_contract, cost_to_date, cost_to_complete One row per job per month. Never overwrite.
jobs job_id, pm_id, job_type, original_contract, original_budget

SQL sketch

SELECT f.job_id, f.period,
       (f.revised_contract - (f.cost_to_date + f.cost_to_complete)) / NULLIF(f.revised_contract,0) AS margin_pct,
       LAG((f.revised_contract - (f.cost_to_date + f.cost_to_complete)) / NULLIF(f.revised_contract,0))
         OVER (PARTITION BY f.job_id ORDER BY f.period)
       - (f.revised_contract - (f.cost_to_date + f.cost_to_complete)) / NULLIF(f.revised_contract,0) AS fade_pts_mom
FROM job_forecasts f;

Build spec

Copy this into a ticket. It lists the grain, inputs, logic, and edge cases.

metric: construction.profit_fade
grain: one row per job per period
inputs:
  - revised_contract
  - cost_to_date
  - cost_to_complete
  - original_contract
  - original_budget
logic:
  - eac = cost_to_date + cost_to_complete
  - margin_pct = (revised_contract - eac) / revised_contract
  - fade_pts = prior margin_pct - current margin_pct (positive is fade)
  - fade_usd = prior projected_gp - current projected_gp
edge_cases:
  - revised_contract = 0: return null
  - first period: compare to bid
  - job closed: freeze final margin

As a dashboard card

  • Table of jobs sorted by fade, with a sparkline of projected margin per job and a KPI for total fade in dollars.

Common mistakes

  • Overwriting forecasts so there is no history.
  • Mixing points and dollars in one column.
  • Treating gain as always good without asking why.

Version 1.0 · Last reviewed 2026-10-20 · Machine-readable definition