Heroku to AWS Migration: When It Costs More Than It Saves
A founder asked if rising Heroku costs meant moving to AWS. The honest answer was no. Here is the math, and the ten-minute fix we did instead.
Andrii Nasadchuk, Founder & CEO · November 11, 2026 · 5 min read
"Heroku keeps getting more expensive. Should we move to AWS?"
A founder asked us exactly that this week. Their Heroku bill had crept up month after month, someone on a forum had said AWS is cheaper, and a Heroku to AWS migration started to look like the responsible thing to do.
Our honest answer was no.
The bill was around $170 a month. AWS would have been cheaper on paper, no argument there. But rebuilding the setup on AWS (database, app servers, deploys, environment config, SSL, logs, backups) would have taken us up to a full day. That one day of engineering costs more than a whole year of the price difference.
What we did instead took ten minutes: we went through the bill line by line, found an add-on nobody was using, and turned it off.
This post is about why that was the right call, how to run the same math on your own product, and when moving to AWS actually does make sense.
The math founders skip: migration cost vs monthly savings
Cloud pricing comparisons almost always compare invoices. "Heroku charges X for this, AWS charges Y for the same thing." That is a fair comparison of prices, and a bad comparison of costs, because it leaves out the most expensive line item: the engineering time to move.
The question to ask is simple. How many months of savings does it take to pay back the migration?
months to break even = one-time migration cost / monthly savings
Plug in realistic numbers for a small product. Say AWS saves you somewhere between $40 and $60 a month on a $170 bill. That is roughly $500 to $700 a year. A full day of a senior engineer's time, which is what a careful migration of even a simple app takes, usually costs more than that. So you spend the money now and break even somewhere past the twelve month mark.
And that is the optimistic version, because it assumes the migration is the only cost.
What AWS costs beyond the invoice
Heroku is expensive per unit of compute because you are paying for things you never see. On AWS, those things become your job:
- Setup: VPC, security groups, IAM roles, a managed database, a load balancer, certificates, a deploy pipeline. None of it is hard. All of it takes time.
- Upkeep: OS and runtime updates, database version upgrades, rotating credentials, watching for alerts. Expect a few hours a month that nobody budgets for.
- Knowledge risk: on Heroku, almost any developer can deploy. On a custom AWS setup, the person who built it becomes the person who has to fix it at 11pm.
- Surprise billing: AWS has more knobs, and more ways to get charged for one you forgot. Data transfer and idle resources are classic examples.
None of this means AWS is bad. We use it a lot. It means the cheaper invoice is paid for with time, and for a small team, time is the scarcest thing they have.
Most infrastructure questions from founders are not technical. They are "is this worth my money right now".
What we did instead: a ten-minute Heroku bill audit
Before anyone migrates anything, we open the billing page and read it like an expense report. In this case, one add-on was being paid for every month and nothing in the app depended on it anymore. We checked, turned it off, and the bill went down the same day. No downtime, no new infrastructure, no risk.
That is not luck. Small products accumulate cost the same way a desk accumulates paper. Here is where we look first:
- Add-ons nobody uses. Logging, monitoring, email, or search services someone tried once and never removed. Check the add-on's own dashboard: if there is no recent activity, it is probably dead weight.
- Oversized plans. A database or Redis plan picked for a launch that never needed that much. Compare the plan limits with actual usage.
- Dynos bigger or more numerous than traffic needs. Look at the metrics tab. If memory and response times are calm, try the next size down.
- Forgotten apps. Old staging copies, demo environments, and review apps that kept running after the feature shipped.
- Duplicates. Two tools doing the same job, often because two different people set them up.
Going through that list takes minutes, not days. It will not always beat a migration's savings, but it is the right first step because it is nearly free, and you keep every option open afterwards.
When a Heroku to AWS migration does make sense
We are not against moving. We do these migrations for clients when the numbers point that way. The signals we look for:
| Signal | Why it changes the answer |
|---|---|
| The bill is in the thousands | Savings of hundreds a month pay back the migration in weeks, not years. |
| You need services Heroku does not offer | Queues, GPUs, private networking, or specific managed services are easier when you are already on AWS. |
| Compliance or customer requirements | Some enterprise deals require data residency or controls that are simpler to prove on your own AWS account. |
| Someone on the team already runs AWS | The ongoing upkeep cost drops a lot when it is already part of someone's job. |
If none of these apply and your bill is in the low hundreds, the cheapest infrastructure decision is usually to stay where you are and clean up what you already pay for.
The real question is "is this worth my money right now"
Founders rarely need a lecture on container orchestration. They need someone to look at their situation and say: this is worth doing, this is not, and here is why in dollars. Sometimes the answer is a migration. Often it is ten minutes on the billing page.
The useful habit is to price the change, not just the service. Every infrastructure move has a one-time cost and an ongoing cost, and both belong in the comparison next to the invoice.
Cloud bill keeps growing?
If you run a small product, send us the line items. We will tell you which ones we would cut first, and whether a migration is worth it at all.
Send us your bill