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.
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.
| Job | PM | Bid margin | Last month | Now | Fade since bid |
|---|---|---|---|---|---|
| 2431 | A. Diaz | 13.5% | 12.0% | 11.7% | −$35,000 |
| 2417 | J. Moore | 14.3% | 12.4% | 11.3% | −$30,000 |
| 2420 | J. Moore | 18.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.
Related metrics
- Gross margin by job: the margin that fades.
- Cost to complete: the forecast that drives it.
- Job cost variance: the same movement in budget dollars.
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.