Lesson 04 / 10
Comparison with On-Premises
The measure of capital expense against operating expense: in the same 36-month usage curve, the break-even month landing at 15, 19, and 13 under the visible total, and at 36, past the window, and 23 under the full total, the items hidden under own hardware holding 64%, 55%, and 48% of the total, and 13% under renting, and the winner shifting as the exit month moves from 12 to 36 — from renting to own hardware in the flat curve, and back to renting in the peak-forming curve. Costs are fictional and are written in a fictional unit.
Published Updated
In this lesson
- Runs capital expense against operating expense on the same usage curve and works out the break-even month
- Varies the usage curve across flat, peak-forming, and growing forms and shows where the break-even point shifts
- Counts the cost's hidden items by name: operating labor, facility, per-request fee, exit fee
Contents
The previous lesson compared three deployment layouts in terms of control, fixedness, and elasticity, and no money changed hands anywhere in it. Yet the difference between “100% fixed reserved capacity” and “0%” really shows itself in a payment form: one up front and once, the other continuous and by usage. This lesson runs those two payment forms on the same usage curve.
The result of the comparison cannot be reduced to a single sentence, because the result depends on the shape of the usage curve and how long you stay. These two variables are what is measured: the month capital expense’s cumulative spend drops below operating expense — the break-even point — and where that point shifts as the curve changes.
Every cost in this lesson is fictional. There is no real currency, real price list, or real
provider; everything is written in a fictional unit (fu). The meaning of the numbers is not in
their size but in their ratios to one another.
Two Payment Forms and Six Items
The example is the course’s fictional regional measurement network: the reading collector, the validator, billing and work-order services, a nightly batch job, five teams. Both the network and the services are fictional; the cost structure below is a model.
CC19: the model runs a 36-month window; every cost is fictional and written in fu. CC20:
under own hardware, 110 fu is paid once per capacity unit, the smallest purchase is 4 units, and
unit lifespan is 36 months; each installed unit adds 3 fu of operating labor a month, and a 20 fu
facility fee accrues every month the setup stays up. CC21: under renting, the unit-month is 12
fu; each unit-month covers 36,000 requests, and every 1,000 requests cost 0.05 fu, meaning 1.8 fu
of request fee is added per unit-month; a one-time 250 fu exit fee accrues at exit. CC22:
capacity meets demand every month; own hardware is purchased in four-unit blocks and never reduced,
renting matches demand exactly every month. CC23: the visible total counts only the two
visible items — the hardware’s upfront cost and the unit-month lease; the full total counts all
six items. CC24: at exit, 40% of own hardware’s residual book value comes back; under renting,
the exit fee is added once.
// cloud/cost.mjs — the model that runs capital expense against operating expense on the same // usage curve. All costs are FICTIONAL and are written in a fictional unit (fu); there is no // real currency, real price list, or real provider. No randomness. export const MONTHS = 36; export const F = { upfront: 110, // own hardware: per capacity unit, once (fictional fu) block: 4, // own hardware: smallest purchase lifespan: 36, // own hardware: unit lifespan (months) labor: 3, // own hardware: per installed unit per month (operating labor) facility: 20, // own hardware: fixed per month (power, cooling, siting) rent: 12, // renting: unit-month (on-demand capacity) request: 1.8, // renting: per-request fee per unit-month exit: 250, // renting: once at exit (data transfer) recovery: 0.4, // own hardware: recoverable share of residual book value at exit }; // Cost items: side, visible (read at first glance in the contract/invoice), description. export const ITEM = ` hardware-upfront own visible operating-labor own hidden facility-power-cooling own hidden unit-month-lease rent visible per-request-fee rent hidden exit-fee rent hidden` .trim().split("\n").map((r) => { const [name, side, v] = r.trim().split(/\s+/); return { name, side, visible: v === "visible" }; }); const BASE = { flat: () => 5, peak: (m) => (m >= 14 && m < 20 ? 16 : 5), growing: (m) => 3 + 0.4 * m, }; export const curve = (name) => Array.from({ length: MONTHS }, (_, m) => Math.ceil(BASE[name](m))); // mode "visible": only the visible items are counted. mode "full": every item is counted. export function run(curveName, mode) { const T = curve(curveName), g = (name) => mode === "full" || ITEM.find((k) => k.name === name).visible; const purchases = []; // {month, units} own-hardware purchases let cap = 0; const own = [], rent = []; let ownSum = 0, rentSum = 0; for (let m = 0; m < MONTHS; m++) { while (cap < T[m]) { cap += F.block; purchases.push({ month: m, units: F.block }); } if (g("hardware-upfront")) ownSum += purchases.filter((x) => x.month === m).length * F.block * F.upfront; if (g("operating-labor")) ownSum += cap * F.labor; if (g("facility-power-cooling")) ownSum += F.facility; if (g("unit-month-lease")) rentSum += T[m] * F.rent; if (g("per-request-fee")) rentSum += T[m] * F.request; own.push(ownSum); rent.push(rentSum); } return { T, purchases, cap, own, rent }; } // Break-even: the first month (1-based) the own-hardware cumulative spend drops to or below rent. export function breakEven(r) { for (let m = 0; m < MONTHS; m++) if (r.own[m] <= r.rent[m]) return m + 1; return null; } // Exit: net cost if leaving that month. Under own hardware, a share of the residual book value of // units purchased so far comes back; under renting, an exit fee is added once. export function exitCost(r, month, mode) { const residual = r.purchases.filter((x) => x.month < month).reduce((s, x) => s + x.units * F.upfront * Math.max(0, F.lifespan - (month - x.month)) / F.lifespan, 0) * F.recovery; const extra = mode === "full" ? F.exit : 0; return { own: Math.round(r.own[month - 1] - residual), rent: Math.round(r.rent[month - 1] + extra) }; }
// cloud/measure.mjs — the break-even point, how it shifts when the usage curve changes, and hidden items. import { run, breakEven, exitCost, curve, ITEM, F, MONTHS } from "./cost.mjs"; const write = (w, ...s) => console.log(s.map((v, i) => (w[i] < 0 ? String(v).padEnd(-w[i]) : String(v).padStart(w[i]))).join("")); const CURVE = ["flat", "peak", "growing"]; const R = Object.fromEntries(CURVE.flatMap((c) => ["visible", "full"] .map((mode) => [`${c}-${mode}`, run(c, mode)]))); const month = (b) => (b === null ? `>${MONTHS}` : b); console.log(`${MONTHS}-month window; all costs are FICTIONAL and are written in a fictional unit (fu). ` + `capacity unit: upfront ${F.upfront}, rent ${F.rent}/month`); const A = [-24, 9, 12, 34]; console.log("\n1. cost items (visible = read at first glance in the contract)"); write(A, "item", "side", "visible", "fictional fee"); const FEE = { "hardware-upfront": `${F.upfront} fu / unit, once`, "operating-labor": `${F.labor} fu / installed unit-month`, "facility-power-cooling": `${F.facility} fu / month`, "unit-month-lease": `${F.rent} fu / unit-month`, "per-request-fee": `${F.request} fu / unit-month`, "exit-fee": `${F.exit} fu, once` }; for (const k of ITEM) write(A, k.name, k.side, k.visible ? "yes" : "no", FEE[k.name]); const B = [-10, 12, 12, 10, 15, 13]; console.log("\n2. break-even month: when own hardware overtakes renting"); write(B, "curve", "lowest", "highest", "purchase", "visible total", "full total"); for (const c of CURVE) { const T = curve(c); write(B, c, Math.min(...T), Math.max(...T), R[`${c}-full`].cap, month(breakEven(R[`${c}-visible`])), month(breakEven(R[`${c}-full`]))); } const C = [-10, 13, 11, 13, 14, 11, 13]; console.log(`\n3. cumulative spend at month ${MONTHS} (fu) and the hidden share`); write(C, "curve", "own visible", "own full", "hidden (%)", "rent visible", "rent full", "hidden (%)"); const share = (v, f) => `${Math.round(f - v)} (${Math.round(((f - v) / f) * 100)})`; for (const c of CURVE) { const v = R[`${c}-visible`], f = R[`${c}-full`], i = MONTHS - 1; write(C, c, v.own[i], Math.round(f.own[i]), share(v.own[i], f.own[i]), v.rent[i], Math.round(f.rent[i]), share(v.rent[i], f.rent[i])); } const D = [-10, 12, 12, 12, 12, 12]; console.log(`\n4. net cost by exit month under the full ledger (fu; ` + `${F.recovery * 100}% of residual book value comes back)`); write(D, "curve", "exit month", "own", "rent", "gap", "winner"); for (const c of CURVE) for (const m of [12, 24, 36]) { const e = exitCost(R[`${c}-full`], m, "full"); write(D, c, m, e.own, e.rent, e.own - e.rent, e.own < e.rent ? "own" : "rent"); }
36-month window; all costs are FICTIONAL and are written in a fictional unit (fu). capacity unit: upfront 110, rent 12/month 1. cost items (visible = read at first glance in the contract) item side visible fictional fee hardware-upfront own yes 110 fu / unit, once operating-labor own no 3 fu / installed unit-month facility-power-cooling own no 20 fu / month unit-month-lease rent yes 12 fu / unit-month per-request-fee rent no 1.8 fu / unit-month exit-fee rent no 250 fu, once 2. break-even month: when own hardware overtakes renting curve lowest highest purchase visible total full total flat 5 5 8 15 36 peak 5 16 16 19 >36 growing 3 17 20 13 23 3. cumulative spend at month 36 (fu) and the hidden share curve own visible own full hidden (%) rent visible rent full hidden (%) flat 880 2464 1584 (64) 2160 2484 324 (13) peak 1760 3872 2112 (55) 2952 3395 443 (13) growing 2200 4216 2016 (48) 4488 5161 673 (13) 4. net cost by exit month under the full ledger (fu; 40% of residual book value comes back) curve exit month own rent gap winner flat 12 1173 1078 95 rent flat 24 1819 1906 -87 own flat 36 2464 2734 -270 own peak 12 1173 1078 95 rent peak 24 2684 2817 -133 own peak 36 3735 3645 90 rent growing 12 1123 1175 -52 own growing 24 2499 2900 -401 own growing 36 3864 5411 -1547 own
The numbers are in the measurement class; their inputs are CC19–CC24, and all of them are fictional costs.
The Break-Even Point
The second table runs the same calculation twice. The visible total counts only the two items read at first glance in the contract: the hardware’s upfront cost and the unit-month lease. Under this count, break-even is month 15 in the flat curve, month 19 in the peak-forming curve, month 13 in the growing curve. These three numbers are where the sentence “it pays for itself in two years” comes from.
The full total counts all six items, and across the same three curves break-even shifts to month 36, past the window, and month 23. The shift is 21 months in the flat curve, past the window in the peak-forming curve, 10 months in the growing curve. The break-even point is not a fact but a result of which items were taken into the count; the gap between the two totals shows that the sides of the argument are often not measuring the same thing.
Where Break-Even Shifts When the Curve Changes
The three curves run the same service under three different demand shapes. In the flat curve, demand is 5 units for all 36 months; own hardware buys 8 units because of the four-unit block, and carries the extra for its entire lifespan. Under the full total, break-even sits right at the end of the window — meaning it only breaks even if you stay for the full three years.
In the peak-forming curve, demand climbs from 5 to 16 units over six months and then drops back. Own hardware climbs to 16 units to cover that peak and keeps holding 16 even after the peak has passed; renting pays through the peak and then comes back down. Under the full total, break-even falls outside the window. A single six-month peak reverses a three-year investment decision.
In the growing curve, demand climbs steadily from 3 to 17 units. Here own hardware gives the earliest break-even (month 23), because renting pays a little more every month and total rent reaches 5,161 fu by month 36 — the highest of the three curves. Where renting costs you is a predictably growing load; there, nothing is gained from elasticity, because capacity never comes back down in the first place.
Hidden Items
The third table writes the gap between the two totals as an item. Under own hardware at month 36, the visible total is 880 fu in the flat curve and the full total 2,464 fu: 1,584 fu hidden, 64% of the total. It is 55% in the peak-forming curve and 48% in the growing curve. The hidden items have known names — operating labor per installed unit and the monthly facility fee — and neither shows up in a purchase decision, because neither appears on the hardware invoice.
Under renting the same share is 13% across all three curves, and its only source is the per-request fee. The share being low and constant does not mean renting is more honest; renting’s biggest hidden item is not in this table at all, because that item is born only at exit.
The direction the hidden share moves from curve to curve says something too. Under own hardware the share is highest in the flat curve (64%) and lowest in the growing curve (48%) — because as upfront hardware spending grows in the growing curve, the visible item’s share grows with it. In other words, the hidden part of the ledger is largest under low usage: when hardware is used lightly, the upfront cost stays small, but operating labor and the facility fee run at full strength from day one. Under renting, the share staying independent of the curve is because that side’s hidden item is proportional to usage.
The Exit Month Changes the Winner
The fourth table cuts the same three curves at three different exit months and counts the exit items too: under own hardware, 40% of residual book value comes back; under renting, a 250 fu exit fee is added.
In the flat curve, renting leads by 95 fu at month 12, own hardware leads by 87 fu at month 24, and by 270 fu at month 36. In the peak-forming curve the lead flips twice: renting at month 12, own hardware at month 24, renting again at month 36 (by 90 fu). In the growing curve own hardware leads at all three cuts, and the gap widens to 1,547 fu by month 36.
The peak-forming curve flipping direction twice is this lesson’s main finding. There is no correct answer to the decision; what determines the answer is how long you stay, and that duration is unknown at decision time. What own hardware loses on early exit is the 60% of residual book value that never comes back; what renting loses on late exit is the accumulated unit-month lease. Both sides are buying a kind of lock-in: one to an asset, the other to a contract.
Summary
- The break-even month is 15, 19, and 13 under the visible total; 36, past the window, and 23 under the full total. The shift is 21 months, past the window, and 10 months in turn; break-even is not a fact but a result of which items are taken into the count.
- Under own hardware, hidden items hold 64%, 55%, and 48% of the total at month 36; under renting the same share is 13% across all three curves, and its only source is the per-request fee.
- In the peak-forming curve, own hardware climbs to 16 units and keeps holding them even after the peak passes; a single six-month peak throws the full-total break-even outside the 36-month window.
- Where renting costs you is a predictably growing load: there, total rent climbs to 5,161 fu by month 36, and break-even drops to month 23.
- The exit month changes the winner: in the flat curve, renting at month 12, own hardware at months 24 and 36; in the peak-forming curve the lead flips twice (renting at month 12, own hardware at month 24, renting again at month 36).
- The hidden items have known names — operating labor and facility under own hardware, the per-request fee and the exit fee under renting; neither appears on the document the decision is made from.
Next Step
This lesson turned renting’s cost into money and showed that the winner changes depending on which items the count takes in. But one item was never asked throughout the whole table: when something goes wrong in the rented service, who was supposed to have done it. The operating-labor item is a single number under own hardware; under renting, part of that labor passes to the provider — but exactly which part? The next lesson builds a responsibility matrix: item by item, which side, how many items fall into the gap, and how many overlap.
To keep your progress and take notes, Log in
My notes
Log in to take notes.