Ramps are where two quotes most often hide a difference. Vendor A might charge full price from month one; Vendor B might give a large discount for the first quarter, then step up. Comparing only the headline month-one price flatters B; comparing only the steady-state price flatters A. Neither number is the deal.
The effective rate is a weighted average: multiply each step's monthly price by the share of term months it covers, then sum. In formula form, effective rate = sum over steps of (step price x step months / total months). This is a deterministic calculation you can put in a spreadsheet column, and it answers the question "what did I actually pay per core-hour over the whole term?"
def effective_rate(steps):
# steps: list of (price_per_core_hour_month, months)
total_months = sum(m for _, m in steps)
return sum(p * m for p, m in steps) / total_months
vendor_a = effective_rate([(1.00, 12), (1.00, 24)]) # flat
vendor_b = effective_rate([(0.60, 3), (1.10, 9), (0.95, 24)]) # ramp
print(vendor_a, vendor_b) # 1.0 vs 1.0 (rounded from 0.9966...)
Work the numbers by hand once to see why the shape matters. Vendor A: 1.00 for 36 months gives 1.00. Vendor B: 0.60 for 3, 1.10 for 9, 0.95 for 24 gives (0.60x3 + 1.10x9 + 0.95x24) / 36 = (1.80 + 9.90 + 22.80) / 36 = 34.50 / 36 = 0.958. On paper B is about 4 percent cheaper over the term. But if your forecast only supports 20 months of use, A's cumulative spend is 20.00 per core-hour-month and B's is 1.80 + 9.90 + 0.95x8 = 19.30. B still wins, narrowly, but the margin shrinks and the risk of unused months now sits on B's later, higher steps. Run the effective rate at your expected utilization and at the full term, and if the ranking flips between the two, that flip is the finding.
Two adjustments belong in this block. Time value of money: if you pay upfront, discount future months before averaging, or you will overprice offers that take their money later. Contract mechanics: some reservations bill a flat holding fee whether or not the capacity runs, plus a separate usage rate (Spheron on flex reservations). Put the holding fee in the price column and keep the usage rate as a second column so the effective rate does not silently assume full utilization.