TechLead
Lesson 16 of 30
5 min read
Project Management

Budgeting and Cost Management

Master project budgeting, cost estimation techniques, Earned Value Management (EVM) with all key formulas, and budget tracking

IT Project Cost Categories

Understanding where money goes in IT projects is the first step to effective budgeting. Unlike construction where materials are a major cost, IT projects are predominantly labor-driven — 60-80% of the budget goes to people.

Category Typical % Examples Control Strategy
Labor (Internal)50-70%Developer salaries, PM, QA, designCapacity planning, right-sizing team
Labor (External)10-20%Contractors, consultants, agenciesFixed-price contracts, clear SOW
Infrastructure5-15%Cloud (AWS/GCP/Azure), CI/CD, monitoringReserved instances, auto-scaling policies
Software & Licensing5-10%SaaS tools, IDE licenses, APIsNegotiate annual contracts, audit usage
Contingency10-15%Unknown risks, scope changesRelease only when needed with approval

Earned Value Management (EVM)

Earned Value Management is the gold standard for tracking project performance against the plan. It integrates scope, schedule, and cost into a single set of metrics that answer three questions: What did we plan to do? What did we actually do? What did it cost?

EVM Core Metrics

  • Planned Value (PV): The budgeted cost of work that SHOULD have been done by now
  • Earned Value (EV): The budgeted cost of work that HAS been completed
  • Actual Cost (AC): The actual cost incurred for work completed
  • Budget at Completion (BAC): The total project budget
// Earned Value Management Calculator
interface EVMData {
  budgetAtCompletion: number;  // BAC - total budget
  plannedValue: number;        // PV - what should be done by now
  earnedValue: number;         // EV - what has been done
  actualCost: number;          // AC - what it actually cost
}

interface EVMMetrics {
  // Variances
  scheduleVariance: number;    // SV = EV - PV (negative = behind schedule)
  costVariance: number;        // CV = EV - AC (negative = over budget)

  // Performance Indices
  schedulePerformanceIndex: number; // SPI = EV / PV (< 1 = behind schedule)
  costPerformanceIndex: number;     // CPI = EV / AC (< 1 = over budget)

  // Forecasts
  estimateAtCompletion: number;     // EAC = BAC / CPI
  estimateToComplete: number;       // ETC = EAC - AC
  varianceAtCompletion: number;     // VAC = BAC - EAC

  // Percent Complete
  percentComplete: number;          // EV / BAC
  percentSpent: number;             // AC / BAC

  // Health indicators
  scheduleHealth: 'ahead' | 'on-track' | 'behind' | 'critical';
  costHealth: 'under-budget' | 'on-budget' | 'over-budget' | 'critical';
}

function calculateEVM(data: EVMData): EVMMetrics {
  const { budgetAtCompletion: BAC, plannedValue: PV, earnedValue: EV, actualCost: AC } = data;

  const SV = EV - PV;
  const CV = EV - AC;
  const SPI = PV > 0 ? EV / PV : 0;
  const CPI = AC > 0 ? EV / AC : 0;
  const EAC = CPI > 0 ? BAC / CPI : BAC;
  const ETC = EAC - AC;
  const VAC = BAC - EAC;

  return {
    scheduleVariance: Math.round(SV),
    costVariance: Math.round(CV),
    schedulePerformanceIndex: Math.round(SPI * 100) / 100,
    costPerformanceIndex: Math.round(CPI * 100) / 100,
    estimateAtCompletion: Math.round(EAC),
    estimateToComplete: Math.round(ETC),
    varianceAtCompletion: Math.round(VAC),
    percentComplete: Math.round((EV / BAC) * 100),
    percentSpent: Math.round((AC / BAC) * 100),
    scheduleHealth: SPI >= 1.05 ? 'ahead' : SPI >= 0.95 ? 'on-track' : SPI >= 0.8 ? 'behind' : 'critical',
    costHealth: CPI >= 1.05 ? 'under-budget' : CPI >= 0.95 ? 'on-budget' : CPI >= 0.8 ? 'over-budget' : 'critical'
  };
}

// Example: Project at month 4 of 8
const monthFourEVM = calculateEVM({
  budgetAtCompletion: 800000,  // $800K total budget
  plannedValue: 400000,        // Should have completed $400K of work
  earnedValue: 350000,         // Actually completed $350K of work
  actualCost: 420000,          // Spent $420K doing it
});
// Result:
// SV = -50,000 (behind schedule by $50K worth of work)
// CV = -70,000 (over budget by $70K)
// SPI = 0.875 (87.5% schedule efficiency)
// CPI = 0.833 (83.3% cost efficiency)
// EAC = 960,000 (project will cost $960K at this rate)
// VAC = -160,000 (will be $160K over budget)

// Burn Rate Calculator
interface BurnRate {
  monthlyBurn: number;
  weeklyBurn: number;
  runwayMonths: number;
  projectedEndDate: Date;
  budgetSufficient: boolean;
}

function calculateBurnRate(
  totalBudget: number,
  spent: number,
  monthsElapsed: number,
  remainingWork: number // percentage
): BurnRate {
  const monthlyBurn = spent / monthsElapsed;
  const weeklyBurn = monthlyBurn / 4.33;
  const remaining = totalBudget - spent;
  const runwayMonths = remaining / monthlyBurn;
  const monthsNeeded = (remainingWork / 100) * (monthsElapsed / (1 - remainingWork / 100));

  const projectedEndDate = new Date();
  projectedEndDate.setMonth(projectedEndDate.getMonth() + Math.ceil(monthsNeeded));

  return {
    monthlyBurn,
    weeklyBurn: Math.round(weeklyBurn),
    runwayMonths: Math.round(runwayMonths * 10) / 10,
    projectedEndDate,
    budgetSufficient: runwayMonths >= monthsNeeded
  };
}

EVM Interpretation Guide

Metric Good Warning Critical
SPI>= 1.0 (on/ahead of schedule)0.8 - 0.99 (behind)< 0.8 (significantly behind)
CPI>= 1.0 (on/under budget)0.8 - 0.99 (over budget)< 0.8 (significantly over budget)
SV>= 0 (on/ahead)Negative (behind)< -15% of PV
CV>= 0 (on/under budget)Negative (over budget)< -15% of EV

Budget Management Tips

  • Track Weekly: Monthly tracking is too infrequent for IT projects. By the time you catch an overrun, it is too late.
  • Separate Contingency: Keep contingency as a separate line item. Do not let the team treat it as available budget.
  • Watch CPI Trends: A CPI that has been below 1.0 for 3+ months rarely recovers. Act early.
  • Include All Costs: Do not forget infrastructure, licensing, training, and opportunity costs.

Continue Learning