About $4,500 a Month to About $100: The Run-Rate Math of Leaving the Cloud
In 2019 we paid Amazon Web Services an average of about $4,500 a month. Today our infrastructure runs for about $100 a month, on hardware we own.
That is the headline. This post is the math behind it: what the run rate was at its worst, what it is now, what replaced each line on the bill, and what the $100 leaves out. The full decade-long story, from our first cloud function to the exit, is in the companion piece, $244K Later: Why We Left AWS for Our Own Hardware.
The win, in one table
| Peak cloud (2019) | Today | |
|---|---|---|
| Average monthly cost | about $4,500 | about $100 |
| Yearly cost | $53,674 invoiced ($39,689 after credits) | about $1,200 |
| Highest single month | $24,473 (Dec 2019) | about $100 |
| Cloud functions | 97 at peak | none; scheduled scripts instead |
| Buzzwords calculations | switched off, priced out | running again |
Against the 2019 invoices, the yearly difference is $53,674 − $1,200 = $52,474. Against what we actually paid after credits, it is $39,689 − $1,200 = $38,489 a year. Both are honest comparisons, and the second is the conservative one.
The more meaningful number is in the last row. As Jacob, our CEO, puts it, the cloud costs to run Buzzwords and RoboTrader were breaking the bank. Buzzwords' calculations were the clearest casualty. They ran on cloud functions against a cloud database, and in Jacob's words, "a single day of calculations cost a fortune." On our own hardware those calculations are effectively free, and in September 2026 the engine came back online at buzzword.today.
What a month used to look like
The worst month was December 2019. The invoice came to $24,473, and $20,759 of that was Lambda. That one month held every dollar of Lambda we spent in 2019.
At today's run rate, $24,473 would cover about 245 months of infrastructure ($24,473 ÷ $100), or a bit over 20 years. To be fair to AWS, they later issued an $11,079 credit against that bill. Even after the credit, the month cost $13,394, which is about 134 months, or 11 years, at today's rate.
The run rate, year by year
Here is the average monthly bill for each year since 2019, computed from the invoices (year total ÷ 12):
| Year | Invoiced | Average per month |
|---|---|---|
| 2019 | $53,674 | ~$4,470 |
| 2020 | $21,381 | ~$1,780 |
| 2021 | $20,613 | ~$1,720 |
| 2022 | $49,880 | ~$4,160 |
| 2023 | $33,788 ($29,833 after credits) | ~$2,820 (~$2,490 net) |
| 2024 | $15,272 | ~$1,270 |
| 2025 | $5,776 | ~$480 |
| 2026 (Jan–Feb) | $336 | ~$170 |
Two things stand out.
First, the line doesn't go down smoothly. 2020 and 2021 looked like progress, then 2022 nearly matched the 2019 run rate. The invoices show why: EC2 compute, DynamoDB, the support plan, managed MySQL, storage and the governance tooling were all still billing while the replacements came up. We were running both worlds at once. The companion piece breaks that year down line by line.
Second, the last few hundred dollars are stubborn. In 2025 we were still paying about $480 a month, and in early 2026 about $170. Cutting from $4,500 to $500 took years. Cutting from $500 to zero is taking more than a year on its own, because what's left is the boring stuff: archived storage, DNS and the account structure itself.
What replaced each line on the bill
Lifetime service totals tell you where the money went. These lines reconcile to the invoices but may not capture every charge, so read them as "at least".
| Cloud line (lifetime) | What replaced it |
|---|---|
| EC2 compute, $87,281 | Virtual machines on servers we own |
| Lambda, $33,137 | Python scripts on cron |
| Business Support, $21,399 | Us. We own the 3 a.m. pages now |
| Managed MySQL (RDS), $20,601 | MySQL we run ourselves |
| S3 storage, $16,946 | Our own disks and backups |
| DynamoDB, $16,100 | CouchDB, same single-table data model |
| CloudWatch, $11,720 | Our own monitoring scripts and agents |
| WAF, Config, CloudTrail, $12,994 | Our own edge and our own audit trail |
The WAF, Config and CloudTrail figure adds $6,364 + $3,772 + $2,858.
The biggest single change was moving from per-call pricing to a fixed cost. In the cloud, the Buzzwords calculation was expensive because every step was metered: each function call, each database read, each log line. On hardware we own, a calculation that runs all day costs the same as one that doesn't run at all. That is why "effectively free" is the right phrase. The marginal cost is close to zero once the machine is paid for and switched on.
Another favorite example comes from RoboTrader. Twenty-four of its cloud functions were the same time-window code, deployed once per window, from one minute to ten weeks. On a cron schedule, that became one script with a parameter.
What the $100 leaves out
This is where cloud-exit posts usually get vague, so here is what the number doesn't include.
It's an estimate. About $100 a month is our estimate for power and internet. It hasn't been audited, and we won't pretend it's exact.
It excludes the hardware. We already owned the machines, so the monthly figure doesn't include what they cost to buy or what it will cost to replace them. If you're starting from zero, you have to price that in.
It excludes our time. AWS Business Support cost us $21,399 over the years. Now support is us. Disks fail, power blips, certificates expire, and backups need checking. Some of that work is done by our AI agents, and some of it lands on a human at a bad hour.
It isn't zero cloud yet. Two months of 2026 invoices still total $336. We'll call this finished when that line reads $0.
None of this changes the answer for us. Even if the true all-in cost were several times the estimate, it would still be a fraction of the run rate we left. But the honest version of the math names what's missing.
The good, the bad and the ugly
The good. The run rate fell from about $4,500 a month to about $100. The workload we couldn't afford in the cloud is running again. And every dollar is now predictable: no metered surprises, no line items for services we forgot about.
The bad. It took years. The run rate was still about $1,270 a month in 2024 and about $480 a month in 2025. For years we paid for an exit we hadn't finished.
The ugly. In 2022, two years into the move, our run rate climbed back to about $4,160 a month, almost the 2019 peak. Running both worlds at once costs more than running either one alone.
If you're doing the same math
- Compare run rates, not totals. Lifetime spend is a good story. The monthly run rate is what drives the decision.
- Price the fan-out. A workload that's cheap per call can be ruinous per day. Model a full day of real traffic before you ship it.
- Count the overlap. Budget for paying twice while both systems run. Then shorten that window on purpose.
- Chase the last $500. The tail looks small, but it adds up. Ours was about $480 a month for all of 2025.
- Be honest about your own cost. Power, internet, hardware and your time. If the math still works with all four, go.
Want the same result for your cloud bill?
We cut our own AWS bill from $53,674 a year (2019, as billed) to about $100 a month, and we kept every product. That work is led by an AWS Certified Solutions Architect – Professional who holds six AWS certifications, including DevOps Engineer – Professional and Security – Specialty. Because we built these platforms on AWS first, we know what belongs in the cloud, what to bring onto your own hardware, and how to move it without breaking anything. Send us your bill and we'll show you where the money goes.
Get a cloud cost review · See our services
Further reading: $244K Later: Why We Left AWS for Our Own Hardware · Leaving AWS: 97 functions, our own hardware · The Buzzwords revival · buzzword.today
Part of the Cloud Exit series on d-e-v.com. Previous: $244K Later, the full decade story. Next: "DynamoDB to CouchDB: Why We Left NoSQL for NoSQL."




Add new comment
Comments
Comments appear after review.