← all posts
// economics · hardware-roi

AI hardware ROI for an edge or SBC AI fleet: the utilization curve

Picture forty Raspberry Pis bolted along the rafters of a warehouse, each one running a small vision model against its own camera feed, waiting for someone to walk into frame. Add a management node, a shelf of accelerators, enclosures, power supplies. That's an edge fleet. Most of every node's day is spent doing nothing you'd pay for.

That workload profile shows up everywhere: always-on sensing, OCR, vision, voice, a smart-home hub, narrow automation close to the sensor. The alternative isn't always another edge box: sometimes a central server, sometimes cloud event processing that wakes only on events, sometimes a deterministic sensor wired to an if-statement. No model required. The fleet buys low per-node power, a fast local response, less data leaving the building, hardware placed near the sensor. What you're really paying for is one reliable decision made at the right place. Tokens and accelerator-hours are just the units you measure along the way.

what the fleet actually costs, node by node

Fixed cost is what you pay whether the node ever fires or not: accelerator, host board, memory, storage, networking, power supply, cooling, enclosure, spares, tax, shipping, installation, reserved capacity. Variable cost moves with the work: electricity, any paid API tokens still routing the hard cases, data transfer, and support that scales with incidents rather than the calendar. Human review sits in between: dedicated staff is fixed, per-exception reviewers are variable.

Strip out anything the organization would have bought anyway. A developer's laptop doesn't become an AI cost because it flashed an SD card once. A memory upgrade bought specifically so a model would fit does.

Effective cost per hour is annual fixed spend divided by the hours you can honestly call productive, plus whatever varies hour to hour. That denominator is where almost everyone quietly cheats.

cost typebehaves like
fixedpresent whether the node is idle or busy
variablescales with actual work done
mixedfixed with dedicated staff, variable per incident

Measure the same workload across local, rented, and API routes before committing capital, the same triage you'd build into a local-first cascade for any other workload. Log accepted tasks, severe failures, input/cached-input/reasoning/output volume, retries, abstentions, human repair minutes, queue/first-token/completion time, p95, hours active/resident-idle/asleep/unavailable, wall energy and its cooling share, and maintenance time.

the hours nobody schedules for

Here's the number that gets fudged: annual capacity. There are 8,760 hours in a year, and it's tempting to use that as the denominator no matter what the fleet actually does. Don't. A node asleep overnight draws almost nothing, but it still cost capital to buy and install, capital that doesn't care the node was resting.

Idle states aren't interchangeable. A workstation that sleeps overnight has different economics from a server holding several models resident in memory for instant answers. Meter both separately. On shared systems watch queueing and abandoned requests: a request someone gave up on costs money for nothing. On an edge fleet, multiply update, replacement, backup, and travel time by node count: forty Pis don't fail once, they fail forty times. Operational labor, not electricity, usually dominates the bill on a fleet shaped like this.

Build low, base, and high demand curves, and watch daily peaks and p95 latency: a machine scheduled at full capacity has no headroom left for an interactive request. Batch work can fill quiet hours, but only if the organization genuinely needs that work done. The real risk isn't the accelerator, it's maintenance scaling with node count, storage failing quietly, installation labor piling up, accelerators fragmenting across incompatible generations, half the fleet never leaving prototype status. Keep every assumption visible in a small table with a source and a date attached, and skip the false precision of three decimal places.

a wrong answer twice is not cheaper

Quality has to enter the model or the exercise lies to you. If the cheap route needs two attempts and five minutes of human correction, that correction time is part of its cost, not a footnote. What matters is the cost of the completed, correct result, not the first draft. Run it the other way too: a small local model that reliably clears one narrow task shouldn't get priced against a frontier API cranked to maximum reasoning effort. That's not a fair fight.

This is also where it's worth pricing an hour of rented GPU time against buying outright, while the demand curve is still unclear. Rental carries its own hidden costs: persistent storage, image preparation, transfer, minimum billing increments, the automation to spin instances up and down, and the instance someone forgot to kill, idling on the meter. A short rental benchmark before a purchase order is cheap insurance against buying the wrong node forty times over. It's the same instinct behind distrusting a flat-rate plan on a spiky workload, the same reason a subscription is often the wrong shape for AI spend: you end up paying for capacity you may not use.

the number you write down and revisit

Payback month is the first month cumulative discounted benefit clears cumulative cost. ROI over whatever horizon you pick is net discounted benefit divided by discounted cost. Both need a conservative useful life and honest residual value, and both require admitting hardware can run fine mechanically while being economically dead: the model it was sized for moved on, or the vendor dropped support.

Productivity claims need a realization factor before they go near the spreadsheet. Saving a developer ten minutes doesn't hand the business ten minutes of revenue. It only counts if it avoids a hire, cuts outsourced spend, increases what actually ships, or shortens a queue that was genuinely binding. Run the whole model once with productivity value set to zero. If the hardware can't justify itself without a speculative time-savings story, that's worth knowing before the purchase order, not after.

State the break-even boundary in terms you can check later: accepted tasks per month, productive hours, the maximum API cost per task that would flip the decision, or a minimum useful life below which it stops making sense. A number like that is easy to revisit. A narrative recommendation isn't; nobody remembers which assumptions it was built on six months later.

Put a retest date on the calendar and name the triggers: volume moves materially, a model change shifts the quality bar, API prices move, the power contract changes, a major component reaches end of support. None of that makes the fleet a bad idea. It just means the ROI was never a property stamped onto the GPU in the rack. It's a relationship between one workload, one alternative, and a set of assumptions with a date on them, and the tradeoff I make on purpose is sizing the fleet for demand I can defend today, not the peak I might someday have, which means some spike, someday, gets handled by an expensive API call instead of hardware I already own.

#hardware-roi#cost#self-hosting