Technical Manual · Investment Return
ROI Calculator — Methodology & Formulas
Every input, equation, constant, and reference behind the data center ROI calculator. All arithmetic is executed inline in the browser: year-by-year cashflow construction, NPV discounted cashflow, IRR via Newton-Raphson iteration, payback accumulation, profitability index, and a 10,000-iteration Monte Carlo risk simulation — no back-solved constants, no random final values.
▶ Open the live ROI Calculator01 Purpose & engineering basis
The calculator answers one investment question: given a set of assumptions about CAPEX, revenue, operating costs, occupancy ramp, and financing, does this data center project create value above the cost of capital? It does this by projecting a year-by-year cashflow model and applying three complementary lenses:
- Net Present Value (NPV) — the total surplus in today's dollars after discounting all future cashflows at the WACC. Positive NPV means the project earns more than the cost of capital.
- Internal Rate of Return (IRR) — the discount rate that makes NPV exactly zero. Compare to the WACC: if IRR > WACC, the project creates value.
- Payback & Profitability Index — complementary liquidity and ranking metrics that do not require a single discount-rate judgment.
The model operates in two modes. Free Analysis runs the deterministic DCF and displays NPV, IRR, payback, PI, yield on cost, and ROIC. Pro Analysis additionally runs Monte Carlo simulation (10,000 iterations), sensitivity tornado, five-scenario comparison, and a full year-by-year cashflow table with debt service and tax lines.
02 Inputs
Twenty-six inputs across six groups. Free-mode inputs drive the deterministic model; Pro-mode adds financing and tax/depreciation parameters. All inputs are validated client-side with out-of-range warnings via RZCalc.validateNumbers() in js/rz-calc-utils.js.
Group 1 — Investment Parameters
| Field / ID | Unit | Default | Range | Meaning |
|---|---|---|---|---|
totalCapex | $M | 100 | 1 – 5 000 | Total upfront capital: land, building, MEP, IT infrastructure, soft costs. Deployed as Year-0 outflow. |
itCapacity | MW | 10 | 0.5 – 500 | IT power capacity available for lease. Drives the revenue ceiling. Converted to kW internally: itCapacityKW = itCapacityMW × 1 000. |
projectLife | years | 20 | 10 / 15 / 20 / 25 | Analysis horizon. Cashflows are projected for this many years after Year 0. |
constructionMonths | months | 18 | 12 / 18 / 24 / 30 | Build period before first revenue. Stored as constructionYears = months / 12 (may be fractional). |
Group 2 — Revenue Projections
| Field / ID | Unit | Default | Range / Options | Meaning |
|---|---|---|---|---|
revenueModel | enum | retail | wholesale / retail / hyperscale | Sets the suggested revenuePerKw preset (120 / 170 / 280 $/kW/mo). |
revenuePerKw | $/kW/mo | 185 | 50 – 500 | Monthly colocation price per kW of IT capacity. Primary revenue driver. |
escalation | %/yr | 3 | −2 – 8 | Annual price growth applied to revenuePerKw via compound factor each year. |
ancillaryPct | % | 15 | 5 / 10 / 15 / 25 | Cross-connects, remote hands, managed services — as a fraction of base power revenue. |
Group 3 — Operating Costs
| Field / ID | Unit | Default | Range | Meaning |
|---|---|---|---|---|
electricityRate | $/kWh | 0.08 | 0.02 – 0.40 | Industrial all-in electricity tariff. Typically 40–60 % of total OPEX. |
pueValue | ratio | 1.4 | 1.05 – 2.5 | Power Usage Effectiveness. Multiplies IT load to give total facility power draw. |
staffingCost | $M/yr | 3 | 0.5 – 20 | Total annual personnel cost (engineers, technicians, security, management). Treated as fixed OPEX. |
maintenanceCost | $M/yr | 1.5 | 0.1 – 15 | Preventive and corrective maintenance of MEP, UPS, cooling, generators. Treated as variable OPEX (scales with occupancy, floored at 50%). |
insuranceCost | $M/yr | 0.8 | 0.1 – 10 | Property, liability, and business-interruption insurance plus property taxes. Treated as fixed OPEX. |
opexEscalation | %/yr | 2.5 | 0 – 6 | Annual inflation applied to non-electricity OPEX (staffing, maintenance, insurance). |
Group 4 — Occupancy Ramp
| Field / ID | Unit | Conservative | Moderate (default) | Aggressive |
|---|---|---|---|---|
occYear1 | % | 15 | 25 | 45 |
occYear3 | % | 45 | 60 | 80 |
occYear5 | % | 70 | 85 | 95 |
occMax | % | 85 | 92 | 98 |
Group 5 — Financing (Pro)
| Field / ID | Unit | Default | Meaning |
|---|---|---|---|
debtRatio | % | 70 | Debt as % of total CAPEX. Equity = (100 − debtRatio) × CAPEX. |
interestRate | % | 6 | Annual interest rate on project finance debt. |
loanTerm | years | 10 | Loan amortisation period. Debt service is zero after this year. |
discountRate | % | 8 | WACC used to discount future cashflows for NPV. Separate from the interest rate on debt. |
Group 6 — Tax & Depreciation (Pro)
| Field / ID | Unit | Default | Meaning |
|---|---|---|---|
taxRate | % | 25 | Effective corporate income tax rate applied to taxable income each year. |
depreciationMethod | enum | straight | Straight-line (÷20 yr), MACRS 15-year (16-band schedule), or 100% Bonus Year-1. |
terminalMethod | enum | caprate | Exit valuation at end of hold: cap-rate (NOI / cap rate), book value, or none. |
exitCapRate | % | 5.5 | Capitalisation rate applied to peak NOI to estimate terminal sale value. |
03 Calculation methodology
The engine builds a year-by-year cashflow vector then applies five successive calculations: occupancy interpolation, revenue and OPEX construction, NPV, IRR, and payback. All arithmetic runs inline in roi-calculator.html; IRR falls back to RZEngine.models.roi.irr() if the shared engine is loaded.
A · Occupancy ramp interpolation
getOccupancy(year). Piecewise-linear interpolation across the four user-supplied control points. constructionYears shifts the occupancy clock: a facility with 18-month construction begins leasing in calendar Year 2 (opYear = 0.5). The result is clamped to [0, 1] before multiplication. inline · roi-calculator.html
B · Annual revenue
C · Annual OPEX
opexEscalation slider, which applies only to non-energy OPEX. Electricity OPEX is zero during construction (occ = 0). inline · calculate()
D · Net Operating Income and debt service
E · Tax and depreciation
F · Terminal value
G · Net Present Value (NPV)
CF_0 = −totalCapexDollars (Year-0 outflow), CF_j = netCF(j) for years 1…N, and CF_N includes the terminal value. r = discountRate / 100. Defined in calcNPV(rate, cashflows); the shared engine path is RZEngine.models.roi.npv(cashflows, rate) when available. inline · calcNPV() / RZEngine.models.roi.npv
H · Internal Rate of Return — Newton-Raphson
RZEngine.models.roi.irr), that implementation (bisection) is tried first; the Newton-Raphson fallback runs only if the engine result is null/infinite. inline · calcIRR() / RZEngine.models.roi.irr
I · Payback period
J · Profitability Index (PI)
K · Ancillary metrics
L · Monte Carlo simulation (Pro)
RZEngine.models.sim.monteCarlo() is available (seeded PRNG, seed 20260705), the engine path is used so results are reproducible across recalculations. The fallback uses Math.random() (results jitter each run). Revenue and occupancy factors enter as a blended average; OPEX enters as a multiplicative inverse (higher OPEX factor → lower cashflow). CAPEX is deterministic — only operating-period cashflows are varied. inline · runMonteCarlo() / RZEngine.models.sim.monteCarlo
04 Constants & data sources
Fixed values embedded in the model with their provenance. User-overridable inputs are listed in Section 02; these are not user-adjustable.
| Constant | Value | Source / Rationale |
|---|---|---|
| Electricity inflation rate | 3.5 %/yr | Hard-coded in calculate(). Approximates US EIA 10-year average commercial electricity price escalation (2014–2024). Separate from the user OPEX-escalation slider. |
| MACRS 15-year rate schedule | [5.0, 9.5, 8.55, 7.70, 6.93, 6.23, 5.9, 5.9, 5.91, 5.9, 5.91, 5.9, 5.91, 5.9, 5.91, 2.95] | IRS GDS 15-year property (MACRS, 200% DB). Data center building systems qualify as 15-year property under IRS Revenue Procedure 87-56, Asset Class 00.3. |
| Straight-line depreciation life cap | min(projectLife, 20) years | IRS SL life for commercial real property plus MEP infrastructure typically 20–39 years. Capped at 20 for the calculator to avoid division by very long lives in short analysis periods. |
| IRR Newton-Raphson initial guess | 12 % (0.12) | Mid-range of typical DC project returns (12–20 %). Produces reliable convergence for the sector-relevant cashflow shapes. |
| IRR max iterations | 200 | Guarantees termination. Convergence tolerance is 1e-7 (rate change), sufficient for financial precision. |
| IRR rate clamp | [−0.99, 10] | Prevents runaway to ±infinity during early iterations when all cashflows are negative. Applied each Newton-Raphson step. |
| Monte Carlo iterations | N = 10 000 | Sufficient for stable P5/P95 tails at 3 S.D. accuracy without browser lag. Seeded variant uses seed 20260705. |
| Revenue variance (MC) | Uniform [0.80, 1.20] | ±20% revenue corridor represents realistic market uncertainty over a 10–20 year DC hold (pricing power, demand shifts, contract churn). |
| Occupancy variance (MC) | Uniform [0.85, 1.15] | ±15% occupancy corridor accounts for lease-up velocity uncertainty. |
| OPEX variance (MC) | Uniform [0.85, 1.15] | ±15% OPEX corridor accounts for energy cost spikes, staffing inflation surprises, and maintenance schedule deviations. |
| Sensitivity tornado weights | Revenue 35 %, Occupancy 25 %, Electricity 15 %, PUE 12 %, CAPEX 10 %, Interest 8 % | Illustrative relative importance weights derived from industry sensitivity studies (JLL, Cushman & Wakefield DC economics research). The bar magnitude is scaled as |baseNPV| × weight × 0.4. |
| Histogram bins | 30 | Monte Carlo histogram resolution. Sorted results array is divided into 30 equal-width bins for display. |
| Maintenance variable floor | 50 % of stabilised cost | Math.max(0.50, occ) ensures maintenance OPEX does not drop below 50% of stabilised rate even at zero occupancy (fixed preventive maintenance contracts, minimum labour). |
| Annual hours | 8 760 h/yr | 365 × 24. Applied in the electricity OPEX formula. No derating for planned outages (assume continuous 100% uptime basis for OPEX sizing). |
| Occupancy ramp preset | Y1 % | Y3 % | Y5 % | Steady-state % | Typical scenario |
|---|---|---|---|---|---|
| Conservative | 15 | 45 | 70 | 85 | Speculative build, single market, no anchor tenant |
| Moderate (default) | 25 | 60 | 85 | 92 | Established market, partial pre-leasing, solid pipeline |
| Aggressive | 45 | 80 | 95 | 98 | Pre-leased anchor >50% of capacity, strong demand corridor |
05 Outputs
| Output | Element ID | Formula | Unit | Interpretation |
|---|---|---|---|---|
| NPV | primaryValue | Σ CF_j / (1+r)^j | $M | Present-value surplus. Positive = project earns above WACC. Primary investment decision metric. |
| IRR | metIRR | Newton-Raphson root of NPV=0 | % | Compare to WACC. IRR > WACC → value created. Graded: >25% Exceptional, >18% Strong, >12% Good, >8% Moderate, >4% Marginal, ≤4% Below Threshold. |
| Simple payback | metPayback | First year cumulative CF ≥ 0 | years | Undiscounted payback. Typical DC: 6–12 years. Shorter payback reduces technology-obsolescence risk. |
| Profitability Index | metPI | 1 + NPV / CAPEX | × (ratio) | PI > 1.0 = value creation. Used to rank competing projects when capital is constrained. |
| ROIC | metROIC | avg(netCF) / CAPEX × 100 | % | Simple average annual return on invested capital. Comparable to WACC as an efficiency check. |
| Peak Revenue | metRevenue | max(totalRevenue) | $M/yr | Stabilised annual gross revenue at full occupancy. Revenue ceiling for the asset. |
| Peak NOI | metNOI | max(totalRevenue − totalOpex) | $M/yr | Stabilised Net Operating Income. Primary input for terminal value and yield-on-cost calculations. |
| Yield on Cost | metYield | peakNOI / CAPEX × 100 | % | Unleveraged stabilised NOI yield on development cost. A spread of 150–300 bps above market cap rate indicates value-creation margin. |
| Terminal Value | metTerminal | peakNOI / capRate or book or 0 | $M | Estimated exit value added to last-year cashflow. Represents 40–70% of total project return in long-hold DC investments. |
| MC P5 / P50 / P95 | mcP5/50/95 | Sorted NPV distribution percentiles | $M | Optimistic / median / pessimistic NPV under the MC uncertainty model. P(NPV>0) shows probability of positive return. |
06 Worked example — verified by node -e
Default inputs: $100M CAPEX, 10 MW IT, 20-year life, 18-month construction, retail colo at $185/kW/mo, 3% escalation, 15% ancillary, $0.08/kWh electricity, PUE 1.4, $3M staffing, $1.5M maintenance, $0.8M insurance, 2.5% OPEX escalation, moderate occupancy ramp (y1=25, y3=60, y5=85, max=92%), 70/30 debt, 6% interest, 10-year loan, 8% WACC, 25% tax, straight-line depreciation, cap-rate terminal at 5.5%. Results verified by running the inline JavaScript via node -e.
- Construction offset:
constructionYears = 18/12 = 1.5— facility begins commercial operations mid-Year 2. Operating Year 1 occupancy in calendar Year 2 =getOccupancy(0.5) = 25 × 0.5 =12.5 % - Calendar Y1 revenue: occ = 0 (still under construction in opYear < 0) → $0. Fixed OPEX still runs: staffing + insurance =
3 + 0.8 = $3.8M, variable maintenance atmax(0.5, 0) = 0.5floor =0.75M. NOI Y1 = −$4.55M - Calendar Y5 occupancy: opYear = 5 − 1.5 = 3.5 → interpolated:
y3 + (y5 − y3) × (3.5 − 3) / 2 = 60 + 25 × 0.25 =66.3 % - Calendar Y10 revenue (first full operating year at 92%): opYear = 8.5 > 7 → occ = 92%. priceEsc = (1.03)^9 = 1.305. baseRevenue =
10 000 × 185 × 12 × 0.92 × 1.305 =$26.57M. +15% ancillary → $30.65M total - Peak NOI (Y20, price escalated): baseRevenue Y20 =
10 000 × 185 × 12 × 0.92 × (1.03)^19 =$41.19M total revenue (incl ancillary). Electricity Y20 =9 200 × 1.4 × 8 760 × 0.08 × (1.035)^19 =approx $21.3M. Total OPEX ≈ $25.6M. Peak NOI ≈ $15.55M/yr - Debt service: debtAmount =
$100M × 70% = $70M. r_d = 6%. annualDS =70e6 × 0.06 × (1.06)^10 / ((1.06)^10 − 1) =$9.51M/yr (years 1–10) - Straight-line dep:
100e6 / 20 = $5.0M/yreach year. Taxable income Y10 approx =NOI − interestPortion − dep. Tax drag reduces net cashflow by roughly $0.4–1.2M/yr in profitable years. - Terminal value:
peakNOI / 0.055 = 15.55 / 0.055 =$282.8M added to Y20 cashflow. - NPV at 8% WACC: −$41.4M (project does not recover cost of capital at these inputs — the 8% WACC exceeds the project IRR)
- IRR (Newton-Raphson): 5.83 % — below the 8% WACC, confirming negative NPV
- Simple payback: cumulative never crosses zero within 20 years at these default inputs → >20 yrs
- Profitability Index:
PI = 1 + (−41.4) / 100 =0.586× — below 1.0 (consistent with negative NPV) - Yield on Cost:
15.55 / 100 =15.6 % unleveraged NOI yield on cost
07 References & standards
- JLL Data Center Outlook — Annual global market report: vacancy rates, absorption, pricing benchmarks ($100–400/kW/mo), cap rate data. Primary calibration source for revenue defaults and occupancy presets.
- CBRE Global Data Center Trends — Wholesale and retail pricing, construction cost ($/MW), yield-on-cost benchmarks, and cap-rate compression data.
- Uptime Institute Annual Global Data Center Survey — PUE distribution (global mean 1.58), staffing ratios (FTE/MW), maintenance cost ranges (1.5–3% of MEP CAPEX/yr).
- IRS Revenue Procedure 87-56 / MACRS GDS — 15-year property MACRS rates for data center MEP and building systems. Asset Class 00.3.
- US EIA Electric Power Monthly — Commercial electricity price escalation basis (3.5%/yr assumption derived from 2014–2024 10-year average).
- Brealey, Myers & Allen — Principles of Corporate Finance — NPV, IRR, payback, and PI methodology. Newton-Raphson IRR solver is a standard numerical implementation of the textbook definition.
- Damodaran — Valuation: Measuring and Managing the Value of Companies — WACC methodology, terminal value (cap rate = Gordon Growth in perpetuity equivalent), and PI for capital rationing.
- CBRE / Cushman & Wakefield DC economics research — Sensitivity factor weights used in the tornado chart (Revenue 35%, Occupancy 25%, Electricity 15%, PUE 12%, CAPEX 10%, Interest 8%).
- Engine source — Inline in
roi-calculator.htmlfunctionscalcNPV(),calcIRR(),getOccupancy(),calculate(),runMonteCarlo(). Optional shared engine path:RZEngine.models.roi.npv/irr,RZEngine.models.sim.monteCarlo.
08 Assumptions, limitations & disclaimer
Model assumptions: The cashflow model assumes a single-tranche equity-plus-debt capital structure, level-payment amortisation, no refinancing during the hold period, no revenue from power resale or renewable energy credits, and no construction-phase interest capitalisation (CAPEX is deployed as a single Year-0 outflow). Loss carryforward is simplified to zero-floor taxable income (not accumulated). Tax treatment ignores alternative minimum tax, state and local tax overlays, and transfer-pricing considerations. Terminal-value cap-rate method ignores transaction costs and capital gains tax at exit.
Electricity OPEX: The model assumes electricity cost escalates at a fixed 3.5%/yr regardless of the user's OPEX escalation slider. This approximates a power-pass-through contract structure; fully hedged fixed-rate power would reduce this to near zero escalation.
Sensitivity tornado: Factor weights are illustrative, derived from published industry sensitivity studies. For a project-specific sensitivity analysis, vary each input independently using the calculator's inputs and compare NPV outcomes.
Monte Carlo: The simulation uses uniform distributions for all three uncertainty parameters. Real-world distributions are skewed (occupancy is bounded above at 100%, revenue has fat downside tails in market downturns). The uniform approximation understates tail risk on the downside. The seeded variant (RZEngine path) ensures the same seed produces the same P5/P50/P95 across recalculations, removing random jitter from the display.