Project Controls in the AI EraCost control and earned value management · Lesson 5 of 22

Cost engineering: estimating methods and estimate classes

Article · 15 min · 8 min lecture

Video lecture

Cost engineering: estimating methods and estimate classes

9 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 9

Most overruns are estimating errors in disguise

  • Estimate classes and why they matter
  • Analogous, parametric, capacity factoring, bottom-up
  • Basis of estimate, escalation and contingency

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

What cost engineering adds

Cost engineering applies engineering judgment and experience to cost estimating, cost control, business planning and profitability analysis. In controls, its core outputs are credible estimates that become budgets, and the benchmarks used to challenge forecasts.

Estimate maturity: classes of estimates

Estimates evolve as a project is defined. Many organisations use a class system similar to the widely referenced AACE International cost estimate classification, where Class 5 is the least defined (concept screening) and Class 1 is the most defined (check estimate or bid). The principle is what matters:

Class (typical)Project definitionTypical useTypical method
5Very lowConcept screeningAnalogy, capacity factoring, parametric
4LowFeasibility studyParametric, equipment factoring
3MediumBudget authorisationSemi-detailed unit costs with assemblies
2HighControl / bidDetailed unit cost with quantities
1Very highCheck estimate / bidDetailed, from complete design

Accuracy ranges get narrower as definition improves; exact ranges vary by industry and complexity, so present estimates as ranges and state the class. Approving a budget on a Class 5 estimate as if it were precise is a classic root cause of later "overruns" that were really estimating errors.

Estimating methods

  • Analogous: scale from a similar past project. Fast, low accuracy.
  • Parametric: use a statistical relationship (cost per m², per MW, per km). Good when the relationship is well established.
  • Capacity factoring: cost scales non-linearly with capacity, often using an exponent below 1 (economies of scale). Formula: C2 = C1 × (Q2/Q1)^x.
  • Bottom-up (detailed): quantities × unit rates for labour, materials, equipment, plus indirects.
  • Three-point: optimistic, most likely, pessimistic; used to express uncertainty and to feed Monte Carlo analysis.

Worked example: capacity factoring

Illustrative. A fictional company built a 50 MW solar plant in Sindh for $40M. It is considering a 120 MW plant. Using an assumed exponent of 0.8 (use your own historical data in practice):

C2 = 40M × (120/50)^0.8
(120/50) = 2.4 ;  2.4^0.8 ≈ 2.016
C2 ≈ 40M × 2.016 ≈ 80.6M   (before adjusting for location, time and scope differences)

Then adjust for escalation (price changes between the two dates), location (labour rates, logistics, import duties) and scope differences. This is a Class 5 or 4 estimate: present it as a range.

Bottom-up estimate structure

WBS 1.4.2  Chilled water pipework (illustrative)
Quantity: 1,800 m
Labour:    1,800 m × 0.9 h/m × $28/h        = 45,360
Materials: 1,800 m × $55/m + 8% waste        = 106,920
Equipment: welding sets, lifts               = 12,000
Subcontract: insulation 1,800 m × $18/m      = 32,400
Direct cost                                  = 196,680
Indirects (site supervision share, 12%)      = 23,602
Total before contingency                     = 220,282

Document the basis of each number: drawing revision, quantity source, productivity source, rate source and date. This basis of estimate (BoE) is what allows someone to challenge or update the estimate later.

Escalation vs contingency

  • Escalation covers expected price changes over time (inflation, commodity prices, wage rates). It is a forecast, often based on indices.
  • Contingency covers uncertainty in quantities, productivity and identified risks.

Mixing them hides both. In high-inflation environments (Pakistan has experienced periods of high inflation, for example), explicit escalation modelling is essential.

Benchmarking

Collect normalised historical data: cost per unit, productivity rates, indirect percentages, and actual vs estimate by class. Over time this becomes your organisation's most valuable estimating and forecasting asset, and the training data for any AI estimating model.

Common mistakes

  • No basis of estimate, so no one can tell what the number includes.
  • Using a single-point estimate without stating its class or range.
  • Double counting contingency (padding every line and adding a contingency line).
  • Forgetting indirects, owner's costs, permits, commissioning and spares.
  • Ignoring currency and escalation on long projects.

AI in estimating

AI tools can extract quantities from drawings and models, search historical cost databases and propose parametric estimates. They are only as good as the data and should always produce a traceable basis of estimate reviewed by a cost engineer.

Hands-on: an estimate sheet you can defend

Columns: A Item | B Qty | C Unit | D Rate | E Waste % | F Amount | G Low rate | H High rate | I Basis
F2   =B2*D2*(1+E2)
F10  Direct cost          =SUM(F2:F9)
F11  Indirects            =F10*Indirect_pct          (named cell, e.g. 12%)
F12  Total before contingency =F10+F11
Low total   =SUMPRODUCT(B2:B9, G2:G9, 1+E2:E9)*(1+Indirect_pct)
High total  =SUMPRODUCT(B2:B9, H2:H9, 1+E2:E9)*(1+Indirect_pct)

Fill G/H with the rate itself where you are confident, so the range reflects only genuinely uncertain lines. Capacity factoring in one cell: =C1*(Q2/Q1)^x, for example =40000000*(120/50)^0.8.

Hands-on: normalising historical costs in Python

Benchmarks only work if past projects are brought to a common date and location:

import pandas as pd

hist = pd.read_csv("past_projects.csv")      # project, year, country, cost, capacity_mw
index = pd.read_csv("cost_index.csv")         # year, index (base year = 100)
loc = {"PK": 0.85, "AE": 1.00, "SA": 1.02, "GB": 1.25}   # illustrative location factors

target_idx = index.set_index("year").loc[2026, "index"]
hist = hist.merge(index, on="year")
hist["cost_2026"] = hist["cost"] * target_idx / hist["index"] / hist["country"].map(loc)
hist["cost_per_mw"] = hist["cost_2026"] / hist["capacity_mw"]
print(hist["cost_per_mw"].describe())         # use the spread, not only the mean

Location factors and indices above are placeholders; use your organisation's own or a recognised published index.

How to measure success

  • Every estimate states its class and a range.
  • Every line has a basis of estimate entry.
  • Actual-versus-estimate is recorded by class at completion, so future ranges are calibrated on your own history.

Key takeaways

  • Estimates mature through classes; always state the class and present a range.
  • Methods range from analogous and parametric to detailed bottom-up; choose by definition level.
  • Capacity factoring: C2 = C1 × (Q2/Q1)^x, then adjust for time, location and scope.
  • Keep escalation and contingency separate and document a basis of estimate.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. A plant cost $20M at 100 units capacity. Using an exponent of 0.6, what is the rough cost of a 200-unit plant (2^0.6 ≈ 1.516)?
  2. What is the key difference between escalation and contingency?
  3. A board is asked to approve a fixed budget based on a concept-stage estimate. What is the main risk?
  4. Which document lets a reviewer understand exactly what an estimate includes and where its numbers came from?

Put it into practice

Prepare a bottom-up estimate for one work package using the template, including a short basis-of-estimate note for each line.

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.