Harshal Gajjar

Harshal Gajjar is an AI Forward-Deployed Engineer at C3 AI, based in the San Francisco Bay Area. Harshal leads Agentic AI harness development for the Forward-Deployed Engineering organisation at C3 AI, and since January 2026 has been building a stealth-mode startup in the Agentic AI space. Harshal cofounded Shram.io in 2024, where he led the pivot from a Jira-competitor product to an AI assistant that reached #2 Product of the Day on Product Hunt.

Harshal holds an M.S. in Computer Science (Machine Learning specialisation) from Georgia Tech and a B.Tech in Computer Science from IIT Dharwad, where he was part of the institute's foundational class. He spent three summers at Wolfram Research in Boston — first as a summer researcher in 2018, then as an instructor for high-school students in 2019 and 2020 — and was a Wolfram Student Ambassador throughout his undergrad.

Outside of work, Harshal is a long-distance cyclist and a vertical and horizontal caver, active with the San Francisco Bay Chapter (SFBC) grotto. In 2019 he was part of the Hubballi Bicycle Club Guinness World Record for the longest single line of bicycles.

Contact Harshal at mail@harshalgajjar.com.

Your Mac mini costs $1.35 a month, and no cloud provider comes close

I was about to build a feature. Then I did the arithmetic.

I build reminal, a tool for reaching your terminal from your phone. The natural next feature seemed obvious: reminal new machine. One command, a cloud VM appears, you own it, it shows up on your phone, you tear it down when you're done. Spawn boxes like you spawn tabs.

Before writing the provider integration I sat down to check whether the thing actually made sense for the people who'd use it. It turns out it makes overwhelming sense for one group, no sense at all for another, and — the part I didn't expect — the two groups want architecturally opposite things.

The consumer number that ends the argument

The consumer pitch for a cloud VM is "replace the machine humming in your closet." Lots of people run an always-on box at home — a Mac mini, an old laptop, a NUC — as a place to leave things running. Put it in a datacenter instead. Better uptime, better bandwidth, no fan noise.

So what does the closet machine actually cost to run?

A Mac mini idles around 4 W and peaks near 65 W. Call it 10 W average for a box that's mostly idle with occasional real work. That's 10 W × 730 h = 7.3 kWh a month. At the US residential average of 18.44¢/kWh (EIA, August 2026), 7.3 × $0.1844:

$1.35 a month. Sixteen dollars a year.

The closest cloud equivalent I could find — Hetzner's CAX31, 8 ARM vCPUs and 16 GB — runs €20.99 plus €0.50 for the IPv4, about $24.95 a month at current rates.

That's 18× the cost, for a machine with substantially worse single-core performance that can't run macOS. And that's against a mini you own, where the hardware is sunk. Buy one new to make the comparison fair and cloud still loses: the entry mini is now $899 — an M6 with a 12-core CPU, a 12-core GPU, 16 GB of unified memory at 153 GB/s and a 256 GB SSD — and a bit over a third of that comes back at resale in four years, so about $566 of real depreciation over 48 months. That's $11.79/month, plus the $1.35 of power: $13.14/month all-in. Cloud loses that one too, about 1.9:1.

There's no clever framing that rescues the owned case: hardware you already have is sunk cost, nearly free next to a monthly VM bill. New hardware at $899 is a closer call than it was when the mini started at $599 — but the amortized cost still lands comfortably under the cloud number.

Unless you turn it off

The one variable that changes the picture is duty cycle. The CAX31 works out to $24.95 ÷ 730 h = $0.0342/hour, so if you only pay while the machine exists:

Hours/monthCloudvs. mini you own ($1.35)vs. mini bought new ($13.14)
30 (1 h/day)$1.03cloud winscloud wins
60 (2 h/day)$2.05mini winscloud wins
120 (4 h/day)$4.10mini winscloud wins
240 (8 h/day)$8.21mini winscloud wins
730 (always on)$24.95mini wins 18×mini wins 1.9×

Two break-evens fall out, each just the mini's monthly cost divided by $0.0342/hour: $1.35 ÷ $0.0342 ≈ 40 hours a month against hardware you already own, and $13.14 ÷ $0.0342 ≈ 384 hours a month against buying it new.

Under about an hour and a half a day, cloud wins. Above it, the closet wins — and if the closet is already occupied, it wins by an order of magnitude.

So the consumer version of this feature isn't "replace your home machine." It's "rent a second machine for an hour." Those are different products with different UIs, and only one of them survives contact with a spreadsheet.

The exception worth naming: GPUs. A cloud RTX 4000 Ada runs about $0.84/hour. Twenty hours a month is $16.72, against $1,000+ to buy the card. There's no duty cycle at which owning wins for occasional GPU work. If your consumer story involves a GPU, everything above inverts.

The part every table above gives the cloud for free

All of that puts a monthly dollar figure next to a monthly dollar figure and quietly lets you assume the two boxes are interchangeable. They are not. $899 doesn't buy the same machine at a higher price — it buys a much larger machine, and the cloud does not sell that machine at $25.

$899 mini (M6, 16 GB / 256 GB)Hetzner CAX31 ($24.95/mo)
Single-core (Geekbench 6)~3,800+1,036
Multi-core (Geekbench 6)~15,000+5,477
Cores12 native (2 super + 4P + 6E)8 shared Ampere Altra vCPUs
Memory16 GB unified @ 153 GB/s16 GB
Storage256 GB local NVMe160 GB local NVMe
GPU / Neural Engine12-core GPU + Neural Enginenone
OSmacOSLinux only

That's roughly 3.7× the single-core performance per thread and half again as many cores, the same 16 GB of memory but unified on-package at 153 GB/s rather than a shared allocation, and a real GPU and Neural Engine — for less per month than the cloud box costs.

Two rows are closer than the rest and I'd rather name them than bury them. Memory is a flat tie at 16 GB each. And storage is 256 GB against 160 GB — both local NVMe, so it's a capacity lead and not much of a speed one, and 256 GB is genuinely tight for a box you intend to keep four years.

Everywhere else it's a rout, and the escape route is expensive. To match the mini's single-core performance you have to leave shared vCPUs entirely for a dedicated-core instance, and a CCX33 (8 dedicated AMD vCPUs, 31 GB) runs about $188/month — for a Geekbench single-core score around 2,032, still barely half the mini's, and still no GPU, no Neural Engine, and no macOS at any price on the mainstream clouds. Apple silicon in the cloud does exist (MacStadium, AWS EC2 Mac) and starts around $0.65–1.00/hour with multi-day minimums — call it $400–700 a month — because you're renting a whole physical Mac, which is exactly the thing sitting on your desk for a one-time $899.

So on a pure dollars-per-month line the buy-new case sits at 1.9×. Weight the two boxes by what they actually compute and the gap widens enormously: at equal monthly cost the mini is several times the machine, and at equal performance the cloud is roughly fourteen times the price — $188/month for a box that still loses on single-core, against $13.14/month amortized.

The caveat that keeps this from being a fan post: most closet workloads — an agent looping, a build, a bot, a cron job — don't saturate even the CAX31, so the extra mini horsepower is latent capacity, not realized savings. The performance argument bites exactly when your work is CPU- or GPU-bound, and not much otherwise. And it doesn't touch the duty-cycle math at all: under an hour and a half a day, cloud still wins on cost, and a bigger idle machine just means more capability sitting switched off.

The business number that ends a different argument

Now price the same VM as a business input. A fully-loaded US developer costs roughly $100/hour, or $1.67/minute. Convert infrastructure into developer-minutes by dividing the monthly bill by $1.67:

Infrastructure$/month= dev time/month
One Hetzner CX23, always on$6.954.2 minutes
One machine0 small, always on$9.495.7 minutes
Ten CX23s, always on$69.5042 minutes
Twenty CX23s, always on$139.001 h 23 min
GitHub Codespaces, 2-core, 160 h/mo$28.8017 minutes

A box has to save under five minutes a month to pay for itself. Twenty boxes have to save under an hour and a half, collectively, across a team.

No business declines this on cost. Which means every minute spent optimizing the cost of business dev VMs is wasted — the decision was never financial. It's about isolation, parallelism, whether the box has your tools on it, and how fast it comes up. Cost only reappears at hundreds of always-on instances, and by then it's a fleet-management problem, not a pricing one.

The asymmetry, which is the actual finding

Here's what I didn't see coming. Both segments want a cloud VM. They want opposite machines.

Business wants the box always on. It's a place things run — a build, an agent, a long job. Idle time costs four minutes of salary a month, so nobody thinks about it. Persistent presence is the entire value: it's there when you reach for it.

Consumer economics only work below roughly a ninety-minute daily duty cycle. Which means the machine must be off — suspended, destroyed, scaled to zero — for most of its life. For this user, the desirable steady state is not running.

That's not a preference difference. It's an architectural one, and it lands directly on the thing I'd already built.

reminal keeps a lightweight background host on every machine you own, so an idle box still appears in your list and can spawn a session on demand. Idle-but-reachable is the whole point. But a machine that is always reachable is a machine that is always billing — so for the consumer case, my architecture treats the economically correct state as a failure. An offline machine renders as a problem, when for that user it's the goal.

Fixing it isn't cosmetic. It means a third machine state — suspended — where the local record persists, the machine is genuinely gone from the network, and waking it goes through the provider's API rather than the relay. Nothing about ownership or presence gives you that for free. It only becomes visible when you price the idle hours.

Two smaller things the math settled

Billing granularity is a red herring. A 20-minute session costs about $0.011 billed by the minute or by the second, and $0.0342 on Hetzner's hourly (you buy the whole hour). The entire spread is two cents. Choose a provider for its suspend semantics, its API, or its boot time — never for billing resolution. It changes how the number reads, not what it is.

For consumers the risk isn't cost, it's forgotten cost. $25/month of VM that someone stopped using is invisible inside a company and a support ticket at consumer scale. Idle auto-destroy, a cap on machine count, and a visible running total are consumer requirements. For business they're barely worth building.

What I'm doing with this

I'm still building reminal new machine. But I'm not positioning it as a replacement for the machine in your closet, because that claim doesn't survive $1.35 a month. It's a way to get an extra box for an hour — and for teams, a way to stop running five things serially on one laptop.

The general lesson is cheaper than the specific one. The same feature, priced against two different alternatives, produced two different products with incompatible defaults. Not two markets to segment later — two architectures, diverging at the point where you decide what "idle" means. That's worth finding before you write the provider integration, not after.

Read the original version, as published 13 August 2026 ($599 mini, $18.14 CAX31)

Preserved unedited apart from heading levels. Every number here is superseded by the version above.

The consumer number that ends the argument

A Mac mini M4 idles around 4 W and peaks near 65 W. Call it 10 W average for a box that's mostly idle with occasional real work. That's 10 W × 730 h = 7.3 kWh a month. At the US residential average of 18.44¢/kWh, that's $1.35 a month. Sixteen dollars a year.

The closest cloud equivalent I could find — Hetzner's CAX31, 8 ARM vCPUs and 16 GB — runs €15.99 plus €0.50 for the IPv4, about $18.14 a month.

That's 13× the cost, for a machine with worse single-core performance that can't run macOS. And that's against a mini you own, where the hardware is sunk. Buy one new to make the comparison fair and cloud still loses: $599 up front, a bit over a third of that back at resale in four years, is about $379 of real depreciation over 48 months — $7.90/month — plus the $1.35 of power, so $9.25/month all-in. Cloud loses that one too, about 2:1.

Unless you turn it off

The CAX31 works out to $18.14 ÷ 730 h = $0.0248/hour, so if you only pay while the machine exists:

Hours/monthCloudvs. mini you own ($1.35)vs. mini bought new ($9.25)
30 (1 h/day)$0.75cloud winscloud wins
60 (2 h/day)$1.49cloud winscloud wins
120 (4 h/day)$2.98mini winscloud wins
240 (8 h/day)$5.96mini winscloud wins
730 (always on)$18.14mini wins 13×mini wins 2×

Two break-evens fall out: $1.35 ÷ $0.0248 ≈ 54 hours a month against hardware you already own, and $9.25 ÷ $0.0248 ≈ 371 hours a month against buying it new.

Under two hours a day, cloud wins. Above it, the closet wins — and if the closet is already occupied, it wins by an order of magnitude.

The exception worth naming: GPUs. A cloud RTX 4000 Ada runs about $0.84/hour. Twenty hours a month is $16.72, against $1,000+ to buy the card. There's no duty cycle at which owning wins for occasional GPU work.

The business number that ends a different argument

A fully-loaded US developer costs roughly $100/hour, or $1.67/minute:

Infrastructure$/month= dev time/month
One Hetzner CX22, always on$4.662.8 minutes
One machine0 small, always on$9.495.7 minutes
Ten CX22s, always on$46.6028 minutes
Twenty CX22s, always on$93.2056 minutes
GitHub Codespaces, 2-core, 160 h/mo$28.8017 minutes

A box has to save under three minutes a month to pay for itself. No business declines this on cost, which means every minute spent optimizing the cost of business dev VMs is wasted — the decision was never financial.

The asymmetry, which is the actual finding

Business wants the box always on. Consumer economics only work below roughly a two-hour daily duty cycle — the machine must be off for most of its life. For this user, the desirable steady state is not running. That's not a preference difference. It's an architectural one, and it lands directly on the thing I'd already built: reminal treats idle-but-reachable as the whole point, which for the consumer case means my architecture renders the economically correct state as a failure.

Two smaller things the math settled

Billing granularity is a red herring. A 20-minute session costs about $0.011 by the minute and $0.0248 on Hetzner's hourly. The entire spread is a penny and a half.

For consumers the risk isn't cost, it's forgotten cost. $18/month of VM that someone stopped using is invisible inside a company and a support ticket at consumer scale.

#reminal#tools#fde#economicsreminal on GitHub