Construction Management
Project scheduling, estimation, and contracts.
Construction Management
Construction management encompasses the planning, coordination, and control of construction projects from inception to completion. This discipline integrates technical knowledge with management skills to deliver projects on time, within budget, and to specified quality standards while ensuring safety.
Project Delivery Methods
Design-Bid-Build (Traditional)
- Owner contracts separately with designer and contractor
- Sequential process: design completed before bidding
- Clear separation of design and construction responsibilities
Advantages: Competitive pricing, clear scope Disadvantages: Longer duration, potential for claims
Design-Build
- Single entity responsible for both design and construction
- Overlapping design and construction phases
- Single point of responsibility
Advantages: Faster delivery, single point of contact Disadvantages: Less owner control, difficult to compare bids
Construction Management at Risk (CMAR)
- CM provides pre-construction services during design
- CM guarantees maximum price (GMP)
- Early contractor involvement
Advantages: Early cost input, collaborative approach Disadvantages: Potential conflicts of interest
Integrated Project Delivery (IPD)
- Multiparty agreement with shared risk and reward
- Collaborative decision-making
- Building Information Modeling (BIM) integration
Cost Estimation
Types of Estimates
| Type | Accuracy | Purpose | Basis |
|---|---|---|---|
| Conceptual | -30% to +50% | Feasibility | $/SF, historical |
| Preliminary | -15% to +30% | Budget | Major quantities |
| Detailed | -10% to +15% | Bid | Complete takeoff |
| Bid | -5% to +10% | Contract | Detailed pricing |
Cost Components
Direct Costs:
Labor Cost:
Productivity:
Material Cost:
Equipment Cost:
Indirect Costs (Overhead)
Project Overhead:
- Field office and supervision
- Temporary facilities
- Safety and security
- Insurance and bonds
General Overhead:
- Home office expenses
- Corporate administration
- Typically 5-15% of direct costs
Markup
Contingency: Typically 3-10% depending on project risk
Project Scheduling
Work Breakdown Structure (WBS)
Hierarchical decomposition of project scope:
- Project
- Phases
- Work packages
- Activities
Critical Path Method (CPM)
Activity Parameters:
- Duration (D)
- Early Start (ES)
- Early Finish (EF) = ES + D
- Late Start (LS)
- Late Finish (LF) = LS + D
- Total Float (TF) = LS - ES = LF - EF
Forward Pass (calculate ES, EF):
Backward Pass (calculate LS, LF):
Critical Path: Activities where TF = 0
Project Duration: EF of final activity
Activity Relationships
| Type | Notation | Description |
|---|---|---|
| Finish-to-Start | FS | Successor starts after predecessor finishes |
| Start-to-Start | SS | Successor starts after predecessor starts |
| Finish-to-Finish | FF | Successor finishes after predecessor finishes |
| Start-to-Finish | SF | Successor finishes after predecessor starts |
Lag: Delay between activities (positive value) Lead: Overlap between activities (negative lag)
Program Evaluation and Review Technique (PERT)
Three-Point Estimate:
Where:
- = optimistic duration
- = most likely duration
- = pessimistic duration
Standard Deviation:
Project Duration Variance:
Probability of Completion:
Where = specified duration, = expected duration.
Resource Leveling
Objective: Minimize resource fluctuations while maintaining project duration
Methods:
- Activity splitting
- Float utilization
- Duration extension (if necessary)
Schedule Compression
Crashing: Add resources to reduce duration
Where:
- = crash cost
- = normal cost
- = normal duration
- = crash duration
Fast-Tracking: Overlap sequential activities
Contract Administration
Contract Types
Lump Sum (Fixed Price):
- Fixed total price for defined scope
- Contractor assumes cost risk
- Requires complete design
Unit Price:
- Price per unit of work
- Quantities may vary
- Final cost = (Unit Price × Actual Quantity)
Cost-Plus:
- Reimbursement of actual costs plus fee
- Owner assumes cost risk
- Variations: Cost + Fixed Fee, Cost + Percentage, GMP
Payment Terms
Progress Payments:
Retainage: Typically 5-10% withheld until completion
Change Orders
Typical markup on changes: 15-25%
Claims and Disputes
Common claim types:
- Delay claims
- Changed conditions
- Acceleration
- Scope changes
Project Control
Earned Value Management (EVM)
Key Metrics:
Planned Value (PV): Budgeted cost of work scheduled
Earned Value (EV): Budgeted cost of work performed
Actual Cost (AC): Actual cost of work performed
Budget at Completion (BAC): Total project budget
Cost Performance
Cost Variance:
Cost Performance Index:
- CPI > 1: Under budget
- CPI < 1: Over budget
Schedule Performance
Schedule Variance:
Schedule Performance Index:
- SPI > 1: Ahead of schedule
- SPI < 1: Behind schedule
Forecasting
Estimate at Completion (EAC):
If future work at budgeted rates:
If future work at current CPI:
Combined index:
Estimate to Complete:
Variance at Completion:
To-Complete Performance Index:
Construction Safety
Key Metrics
Incident Rate:
Experience Modification Rate (EMR): Comparison to industry average
Safety Management
- Hazard identification
- Risk assessment
- Control measures hierarchy:
- Elimination
- Substitution
- Engineering controls
- Administrative controls
- Personal protective equipment (PPE)
Real-World Application: Project Schedule Development
Developing a CPM schedule for a building construction project.
Schedule Analysis Example
import math
from collections import defaultdict
# Activity data: (ID, Duration, Predecessors)
activities = {
'A': {'name': 'Site Preparation', 'duration': 5, 'predecessors': []},
'B': {'name': 'Excavation', 'duration': 8, 'predecessors': ['A']},
'C': {'name': 'Foundation', 'duration': 12, 'predecessors': ['B']},
'D': {'name': 'Underground Utilities', 'duration': 6, 'predecessors': ['B']},
'E': {'name': 'Structural Steel', 'duration': 15, 'predecessors': ['C']},
'F': {'name': 'Roofing', 'duration': 8, 'predecessors': ['E']},
'G': {'name': 'Exterior Walls', 'duration': 10, 'predecessors': ['E']},
'H': {'name': 'MEP Rough-in', 'duration': 12, 'predecessors': ['D', 'E']},
'I': {'name': 'Interior Finishes', 'duration': 18, 'predecessors': ['F', 'G', 'H']},
'J': {'name': 'Final Inspections', 'duration': 3, 'predecessors': ['I']},
}
# Forward pass
es = {}
ef = {}
def get_es(act_id):
if act_id in es:
return es[act_id]
preds = activities[act_id]['predecessors']
if not preds:
es[act_id] = 0
else:
es[act_id] = max(get_ef(p) for p in preds)
return es[act_id]
def get_ef(act_id):
if act_id in ef:
return ef[act_id]
ef[act_id] = get_es(act_id) + activities[act_id]['duration']
return ef[act_id]
# Calculate ES and EF for all activities
for act_id in activities:
get_ef(act_id)
# Project duration
project_duration = max(ef.values())
# Backward pass
ls = {}
lf = {}
# Find successors for each activity
successors = defaultdict(list)
for act_id, data in activities.items():
for pred in data['predecessors']:
successors[pred].append(act_id)
def get_lf(act_id):
if act_id in lf:
return lf[act_id]
succs = successors[act_id]
if not succs:
lf[act_id] = project_duration
else:
lf[act_id] = min(get_ls(s) for s in succs)
return lf[act_id]
def get_ls(act_id):
if act_id in ls:
return ls[act_id]
ls[act_id] = get_lf(act_id) - activities[act_id]['duration']
return ls[act_id]
# Calculate LS and LF for all activities
for act_id in activities:
get_ls(act_id)
# Calculate float and identify critical path
print(f"CPM Schedule Analysis")
print(f"=" * 70)
print(f"\n{'Activity':<5} {'Name':<22} {'Dur':>4} {'ES':>4} {'EF':>4} {'LS':>4} {'LF':>4} {'TF':>4} {'Crit':<5}")
print("-" * 70)
critical_path = []
for act_id in sorted(activities.keys()):
tf = ls[act_id] - es[act_id]
is_critical = tf == 0
if is_critical:
critical_path.append(act_id)
print(f"{act_id:<5} {activities[act_id]['name']:<22} {activities[act_id]['duration']:>4} "
f"{es[act_id]:>4} {ef[act_id]:>4} {ls[act_id]:>4} {lf[act_id]:>4} {tf:>4} {'YES' if is_critical else '':<5}")
print(f"\nProject Duration: {project_duration} days")
print(f"Critical Path: {' -> '.join(critical_path)}")
# Calculate critical path length
cp_duration = sum(activities[a]['duration'] for a in critical_path)
print(f"Critical Path Duration: {cp_duration} days")
Your Challenge: Earned Value Analysis
Perform earned value analysis for a construction project to assess performance.
Goal: Calculate EVM metrics and forecast final project cost and completion.
Problem Setup
import math
# Project data at month 6 status date
project_status = {
'budget_at_completion': 2500000, # $
'planned_duration': 12, # months
'current_month': 6,
# Work packages with planned and actual progress
'work_packages': [
{'name': 'Foundations', 'budget': 400000, 'planned_pct': 100, 'actual_pct': 100, 'actual_cost': 420000},
{'name': 'Structural', 'budget': 600000, 'planned_pct': 80, 'actual_pct': 70, 'actual_cost': 450000},
{'name': 'MEP', 'budget': 500000, 'planned_pct': 50, 'actual_pct': 40, 'actual_cost': 230000},
{'name': 'Exterior', 'budget': 350000, 'planned_pct': 30, 'actual_pct': 25, 'actual_cost': 100000},
{'name': 'Interior', 'budget': 450000, 'planned_pct': 10, 'actual_pct': 5, 'actual_cost': 30000},
{'name': 'Sitework', 'budget': 200000, 'planned_pct': 60, 'actual_pct': 55, 'actual_cost': 115000},
]
}
BAC = project_status['budget_at_completion']
# Calculate EVM metrics
PV_total = 0
EV_total = 0
AC_total = 0
print(f"Earned Value Management Analysis - Month {project_status['current_month']}")
print(f"=" * 75)
print(f"\n{'Work Package':<15} {'Budget':>10} {'PV':>10} {'EV':>10} {'AC':>10} {'CV':>10} {'SV':>10}")
print("-" * 75)
for wp in project_status['work_packages']:
pv = wp['budget'] * wp['planned_pct'] / 100
ev = wp['budget'] * wp['actual_pct'] / 100
ac = wp['actual_cost']
cv = ev - ac
sv = ev - pv
PV_total += pv
EV_total += ev
AC_total += ac
print(f"{wp['name']:<15} ${wp['budget']:>9,} ${pv:>9,.0f} ${ev:>9,.0f} ${ac:>9,.0f} ${cv:>9,.0f} ${sv:>9,.0f}")
print("-" * 75)
print(f"{'TOTAL':<15} ${BAC:>9,} ${PV_total:>9,.0f} ${EV_total:>9,.0f} ${AC_total:>9,.0f} "
f"${EV_total-AC_total:>9,.0f} ${EV_total-PV_total:>9,.0f}")
# Calculate performance indices
CV = EV_total - AC_total
SV = EV_total - PV_total
CPI = EV_total / AC_total
SPI = EV_total / PV_total
print(f"\nPerformance Indices:")
print(f" Cost Variance (CV): ${CV:,.0f}")
print(f" Schedule Variance (SV): ${SV:,.0f}")
print(f" Cost Performance Index (CPI): {CPI:.3f}")
print(f" Schedule Performance Index (SPI): {SPI:.3f}")
# Status interpretation
cost_status = "Under budget" if CPI > 1 else "Over budget"
schedule_status = "Ahead of schedule" if SPI > 1 else "Behind schedule"
print(f"\nProject Status:")
print(f" Cost: {cost_status} ({abs(1-CPI)*100:.1f}%)")
print(f" Schedule: {schedule_status} ({abs(1-SPI)*100:.1f}%)")
# Forecasting
EAC_cpi = BAC / CPI # Assuming current performance continues
EAC_combined = AC_total + (BAC - EV_total) / (CPI * SPI)
ETC = EAC_cpi - AC_total
VAC = BAC - EAC_cpi
print(f"\nForecasting:")
print(f" Estimate at Completion (EAC): ${EAC_cpi:,.0f}")
print(f" Estimate to Complete (ETC): ${ETC:,.0f}")
print(f" Variance at Completion (VAC): ${VAC:,.0f}")
# To-Complete Performance Index
TCPI = (BAC - EV_total) / (BAC - AC_total)
print(f" To-Complete Performance Index (TCPI): {TCPI:.3f}")
if TCPI > 1.1:
print(f" WARNING: Meeting budget will be very difficult (TCPI > 1.1)")
elif TCPI > 1.0:
print(f" CAUTION: Improvement needed to meet budget")
else:
print(f" Project can meet budget with current performance")
# Schedule completion estimate
months_remaining = project_status['planned_duration'] - project_status['current_month']
estimated_duration = project_status['current_month'] + months_remaining / SPI
schedule_variance_months = estimated_duration - project_status['planned_duration']
print(f"\nSchedule Forecast:")
print(f" Estimated completion: Month {estimated_duration:.1f}")
print(f" Schedule variance: {schedule_variance_months:+.1f} months")
What corrective actions would you recommend based on this analysis, and how would you prioritize them?
ELI10 Explanation
Simple analogy for better understanding
Self-Examination
How is the Critical Path Method used to determine project duration and identify critical activities?
What are the main components of a construction cost estimate and how are they developed?
What are the key differences between lump sum, unit price, and cost-plus contracts?
How does the earned value method track project performance in terms of schedule and cost?
What are the primary responsibilities and relationships in a typical construction project organization?