AI hardware ROI for a shared team GPU server: break-even against commercial APIs
So the number on the vendor's pricing page isn't the other side of the ledger from a GPU quote. Not even close. A shared box costs money whether it's busy or idle at 2 a.m.; an API bill only moves when tokens move. That's why this is harder than the afternoon spreadsheet everyone wants to run.
The thing you're pricing is a finished task, not a token
Picture the machine: a multi-user Linux host, one or more GPUs, memory for resident models, storage, networking, monitoring, an owner. The workload: coding assistants, retrieval, extraction, evaluation, scheduled jobs from several people. The alternative: commercial APIs or rented inference at the same traffic. Local buys pooled utilization, data control, stable model versions, reusable capacity. Price one accepted task at the p95 latency you need; tokens and GPU-hours are intermediate numbers. One input-token rate is the wrong comparison: you need quality, cached and output tokens, tool calls, retries, and review that catches mistakes. Keep prices dated in a worksheet, not prose.
Two piles of money, and one formula that separates them
Everything is spent once, or spent per task.
break_even_tasks = local_fixed_cost / (api_cost_per_accepted_task - local_variable_cost_per_task)
Hardware, installation, reserved capacity are fixed. Electricity, tokens, transfer, support scale with work. Human review is odd, fixed as an operator, variable per exception. The bill of materials needs every incremental piece, accelerator through tax, minus what the team would buy anyway: a laptop running a coding assistant isn't an AI cost; a memory upgrade bought only to fit a model is. Run the quality-gated workload down both paths and log outcomes, token mix, retries and repairs, latency against p95, idle versus active hours, energy, maintenance. Correction time counts toward the finished result; don't judge a narrow specialist against a frontier model at full effort. Same discipline as a cost modeled like a real invoice: separate fixed from variable first.
A quiet fan doesn't mean the machine is free
Utilization is something you measure, not a promise. The real risk is queues, idle capacity, operational labor, single-host outages, demand outgrowing the shape you bought. Build low, base, high demand curves against peak and target p95: a maxed-out box has no room for an interactive request, and batch work counts only if it would run anyway. Idle states differ: a workstation asleep overnight isn't a server holding resident models; meter shared systems for queueing and abandoned requests. Edge fleets multiply update, replacement, backup, travel time by node count; labor there can outrun electricity. Comparing raw token volume is the recurring mistake, local and API models fail differently; keep assumptions dated, not hidden behind decimal precision.
The payback month, and the number you should distrust
Payback month is the first month cumulative discounted benefit crosses cumulative cost. ROI is net discounted benefit over discounted cost across your horizon; both need conservative useful life and residual value, since hardware often outlasts the model generation that makes it obsolete. Productivity claims need a realization factor: ten saved minutes isn't ten minutes of revenue, it counts only if it avoids a hire, cuts outsourced spend, raises output, or shortens a binding queue. Run the model once with that number at zero: a purchase surviving only on hoped-for time savings is the same mistake as assuming a flat subscription is the safe default. Weigh renting: hourly rental earns its premium while demand and shape stay uncertain, but it carries storage, image prep, minimum billing, and idle instances people forget.
Where the line sits, and where I still don't have one
Buy only once demand plausibly clears break-even inside a defensible horizon: accepted tasks a month, productive GPU-hours, the maximum API cost per task that still loses, or the minimum useful life the box needs. A number like that is something a colleague can argue with next quarter; a paragraph of reasoning isn't. Set a retest date and triggers for an early one: volume moving materially, a model swap changing the quality gate, prices shifting, the power contract renewing, a component reaching end of support. None of that tells me how to handle the case that bothers me: a team with lumpy demand, quiet stretches then a month that blows past every curve, where rental math and ownership math are both a little wrong. I don't have a clean rule for that yet.