Ask HN: So you moved off Heroku, where did you go?

410 points by nomilk ↗ HN
So you moved your apps off Heroku, where did you go to and how has it worked out?

Particularly interested in:

1. How much work it took to move apps (be honest)

2. How much experience you had at the time of the migration - e.g. on one extreme your entire devops experience may consist of just Heroku (that's me) or on the other extreme you may be a k8s guru (this helps others gauge how they'll go)

3. How valuable were your learnings? E.g. replacing Heroku with an IAAS instead of another PAAS might take longer but give more fundamental learnings, and hence be worth it for some

4. Cost comparison

5. Summary/description of your apps (e.g. 20 tiny apps with a few hits per month, 5 medium with ~20k hits per month, 2 large with 1-2m hits per month type thing). Please give language/framework.

6. Anything else you want to add

321 comments

[ 3.3 ms ] story [ 296 ms ] thread
I've been using render.com
Moved from Heroku to Scalingo

1) Took a few hours to have everything setup. Transition was easy 2) Not that much. I chose heroku because i hate doing sys admin stuff 3) Can't say for this one, scalingo is a PAAS 4) Scalingo will probably be more expensive for starter plans but as you grow it won't be like heroku's horrible pricing 5) Mostly app with no traffic to be honest

I used Scalingo for Rails apps a while ago, and was quite impressed by the quality of the platform. Very Heroku-like. Maybe not as polished, but still doing the PaaS job pretty well (git push, and you're done).
Thank you for this! We've been looking for an EU based heroku alternative for a while.

Thanks to a couple of people suggesting scalingo here on HN, I gave it a try last night and I'm very impressed with the offering. It took me less than an hour to get our rails template running - with no code changes at all.

The prices are comparable or lower than heroku, and unlike heroku your not forced into paying much more when your memory usage starts exceeding 512 mb.

Railway.app

No affiliation, I’m actually preferring the experience. Heroku is showing its age now.

I was looking into that, but there's no other super easy heroku like platform. Something where I could just push code and it'd deal with the build packs. Most of them require Docker.

I heard keyob is decent, otherwise fly.io. Render and railways.app have inactive or day limited services.

fly.io is a big deal.

It's not as easy as Heroku as there's no managed Postgres, but it's well-documented with a few paths.

However, the main reason Fly stands out is their focus on multi-region deployments. Ever wondered why facebook.com is fast no matter where you are? Fly provides app-level tooling to make this superpower available to everyone.

It's especially important if you're making heavy use of Web Sockets.

Everyone wants to be the new Heroku, but that should be table stakes. Fly is innovative in the same way Heroku was when it launched.

> Ever wondered why facebook.com is fast no matter where you are? They provide app-level tooling to make this superpower available to everyone.

They're doing that in the app? GeoDNS has been around for quite some time: https://en.wikipedia.org/wiki/GeoDNS or more thoroughly explained: https://jameshfisher.com/2017/02/08/how-does-geodns-work/

Fly's multi-region capability is BGP Anycast-based, which is vastly superior (and much more complex to deploy, outside of Fly) to DNS-based solutions like GeoDNS.

One example of app-level tooling is the fly-replay header, which permits your app to automatically replay requests in different regions. This works really well alongside the FLY-REGION environment variable that is available to each node. https://fly.io/docs/reference/fly-replay/

Another example of app-level tooling is the availability of NATS Jetstream, a key/value store that is less feature-rich than Redis, but supports multi-region active/active replication. This is a big deal, as Redis doesn't offer it at the free tier, and many others (KeyDB) who advertise it seem to have trouble delivering it when there's more than two regions in play.

Would have been a good comment if you dropped the first line.
So you disagree that it's superior? Please explain why.
The comment has been deleted to remove the unnecessary comment: you're seeing the improved version.
GeoDNS is a technology that allows you to point web users to a nearby server. That's great, but you still need to coordinate each server. For instance, if you have distributed app servers and a single database server, you still have long distance communication/slowness whenever you need to run database queries.

One solution to this problem that Fly provides app-level support for is to allow you to have a fast local read-only copy of your database on/near each server, so that only inserts/updates need to run remotely. Your regional copies basically fail whenever there's an update, and Fly's platform re-runs the request on the leading webserver (which replicates the update to the regional database servers).

How well does it work? Never used it. But it would save you the trouble of having to notice the problem, come up with a solution and then implement it.

I've tried both render and fly.io, finally settled with fly. Love the DX!
I moved my small free Python/Django app to Fly.io and am extremely happy. The move was seamless because they allow you to run your app from a Dockerfile which was straight forward after going through the documentation. Looking forward to building more things on Fly.io.
Highly recommend fly.io as well; I started an elixir app for a client and decided to use fly.io and very impressed with how easy it is with the feature set so far.
I moved to CapRover, and shortly after ended up moving to Portainer, mostly because CapRover does not have very good collaborative environment (eg. A single password for access)

With 20Eur a month and a VPS on Digital Ocean you can get quite far.

I also made a small project to spin up a PaaS like environment with docker swarm, Portainer and Traefik if you're interested: https://github.com/sergioisidoro/honey-swarm

If you want better bank for the buck VPS, checkout Hetzner. Or oracle's free tier.
I had a very bad experience with billing and Hetzner. My card failed on a personal project without me realising it. When I noticed it was already too late and they had wiped out all my servers and all my data.

Yes Hetzner is cheap, but I'm scarred from that event.

Sweet, this is my exact setup which I love for the simplicity to power ratio. Will check it out.
I found great advice on Twitter https://twitter.com/pauld_fgc/status/1574107791651905536 by Paul P.

API & Platform Results:

Rails: @Railway wins. Render wakeup boot extremely slow (~1m). Flyio cannot run Rails for free.

Crystal: @Render wins. 5-10s wakeup boot time. Railway & Fly keep growing memory infinitely.

Node: @flydotio + Railway both win. Very slow boot on Render.

These are free plans though? Not a good comparison if you are a professional looking at this.
Digital Ocean + CLoud66
We are really recommending https://www.clever-cloud.com/ . Their stack is awesome, great uptime and great support.
Are you planning to make a disclosure regarding that statement, such as being co-founders with Quentin Adam, the founder of Clever Cloud, in other projects?
Ouch!

Stuff like this should always be disclosed. Something like "My co-founder / friend built ..." would be totally fine, but this comment looks like it intentionally obscures the connection. Not a good look.

I don't find it a big deal. Smart people will evaluate the offering for themselves and not make a decision based on a 1 line comment on Hacker News.

Plus, I doubt they would spend their lives building the project and not recommend it.

Other project meaning being contributor to open source together?
> Other project meaning being contributor to open source together?

Other project meaning actually founding that project together [1]:

> The Makers for Life collective and project were founded by three entrepreneurs in Nantes. Quentin Adam (CEO Clever Cloud), Baptiste Jamin and Valérian Saliou (Co-founders Crisp) [...]

You live in the same city. You founded a project with him. It's not like you have submitted patches to Linux from different parts of the world, without ever seeing each other.

I don't want to sound like I have something personal (I didn't even know your names until yesterday) but your assumption that the readers here on HN have no clue makes me sick.

If you know each other, that should be disclosed. I have no qualms about recommending a friend's startup, given that the friendship is disclosed.

[1] https://makair.life/2020/05/01/makers-for-life-the-making-of...

It was just to be clear that we do not have a financial involvements together
I have moved my side project (single server handling ~3 requests/s) from Heroku to Clever Cloud about 3 years ago and they work very reliably for me.

The truth is, on this scale Heroku worked well too. The reason to move for me was that they are an EU company so there is less questions from my clients about GDPR compliance.

I'd say the UI is quite old-school and I am missing good built-in metrics. There are some paid add-ons providing metrics but I'd really want to have it built-in.

I use Clever cloud too for application prototyping when I have to go fast, and for my side projects.

Very reliable, I've never had a problem with it.

We have been using "Amazon Web Services". They should market their services more, they definitely have a bright future...
AWS is IaaS not PaaS. With IaaS you need to hire competent infra admins. PaaS abstracts away much of that requirement.
AppRunner is great while being cheaper than Fargate, but it is not cheaper than its NewCloud counterparts like fly.io and render.com. Not sure if railway.app is, 'cause I never could wrap my head around their pricing model. Lightsail Containers are a credible alternative, too.

Whereas, Lambda / Lambda@Edge / CloudFront Functions are of course wayyyyy more expensive (even if more capable) than workers.dev.

BTW, EB (Elastic Beanstalk) is generally viewed as just for those getting started, but I've seen companies build really serious stuff (and at significant scale) on it, including an extremely high performance distributed IoT time series database (that was 10 years ago, back before there were good time series DBs to just use).

AWS doesn't push EB much, partly because it does offer great value and doesn't make them nearly as much money as things like FarGate or AppSync. If you need something that just does what really needs doing cheaply and well, though, give it another look.

For personal stuff or business? I'm extremely familiar with AWS at the corporate level but I refuse to use it for personal stuff. Not only are the pricing schemes suspect, the results can be surprising. A single front page feature on HN, for example, could suddenly cost you $150,000 because you didn't wade through enough labyrinthine configuration pages to set the right budgets.
So you're saying that if someone buys access to a kitchen, doesn't learn to cook or operate it safely, burns the place down trying to serve 100,000 people, they'll get a big insurance claim made against them and have a $150k bill? You're kidding me? Are you telling me people have to learn to USE these tools if they don't want a nasty surprise? :-P

(I'm being tongue-in-cheek cheeky here.)

I know you're mostly pushing boundaries with your $150k figure, although at this point it wouldn't surprise me, but AWS is a professional tool aimed at professional engineers. They created Lightsail for "personal stuff."

Right tool for the right job, I guess? Although tyou can actually combine the two on a network level (Lightsail and AWS, that is.)

Eek what a hot take.

He's talking about the pricing model not the way to operate it. AWS bills for egress data. You can't operate it in any different way to stop that.

Sure about that? So if I have static images going through an ALB to the requesting client, I can't operate in another way to reduce those costs? ... you're sure?
(comment deleted)
Sure you can front static assets with the free Cloudflare tier...

[a] which is fine if you're happy with the inflexibility that free Cloudflare offers. And you live in a country where the free tier doesn't have horrible routing (eg use the Sydney AWS region, put Cloudflare in front of it and then watch your traffic to/from Sydney take a round trip via the US or Singapore)

[b] every single AWS service charges egress fees (ie Cloudfront doesn't help at all)

[c] this does nothing for non-static assets

Am I missing something?

> Am I missing something?

No, but you're not the OP above my comment, so my question still stands.

> (eg use the Sydney AWS region, put Cloudflare in front of it and then watch your traffic to/from Sydney take a round trip via the US or Singapore)

I don't understand? I don't have this issue (I'm in Brisbane; I use ap-southeast-2)

> [c] this does nothing for non-static assets

Non-static assets are going to be very tiny in most cases, and the problem then becomes about volume. If you've got volume and your business model doesn't suck, then you can afford the rate (my understanding is AWS' network egress charges are gross compared to other vendors.)

Nice strawman. I never said you can't operate more efficiently.

Every service on AWS charges egress fees that's my comment. There are other cloud operators that do not. I can safely run some static compute / storage / network at a fixed cost, you can't do this on AWS.

If too many people come to my website it won't wipe out my credit card. The site might go offline but I'd rather take that than a huge bill.

> I can safely run some static compute / storage / network at a fixed cost, you can't do this on AWS.

No provider on the planet gives you truly unlimited, fixed cost networking throughput. None.

AWS provides Lightsail for a fixed cost, static compute, storage, and networking solution. It's a not strawman argument just because you don't understand it.

I ended up with a $700 bill for a month with Route 53 due to bogus DNS requests (a normal month would be like $5 or something). And there is nothing a professional engineer could do anything about it - except pay $3000/month for AWS Shield Advanced.
Can you share the gory details so we can learn more about this? It would be interesting to study what happened, in detail. Perhaps there was a misconfiguration?
I made a video about it but it is not published yet. I hope to publish it soon here: https://www.youtube.com/channel/UCkc8xf5A7qCQydN6tG0BmmQ

There was no misconfiguration, just millions of DNS requests but not millions of actual users. I was in contact with AWS support multiple times. The only solution was so use AWS Shield Advanced. They did refund most of the charges but it was too risky for me. Even after I moved DNS provider there was DNS requests to the R53 zones. I can highly recommend https://dnsimple.com though.

Yeah, the problem is, dnsimple.com isn't going to NOT charge you for the same thing. They have T&Cs too.

I'm guessing AWS refunded close to 100% of fees associated with provable bad DNS requests.

Why is it a problem that dnsimple is not going to charge for bogus DNS requests? (or any DNS requests for that matter).

AWS did do a refund but it requires me to monitor usage and do some investigation. I really don't want to spend time monitoring DNS requests.

I use AWS for personal stuff and it's not labyrinthine at all, I found it very simple to set a budget alert.

But more important than that is of course to have a CloudFront cache infront of anything that exposes S3 storage.

I hope you don't wake up 7 hours after a budget alert because you're in the wrong timezone. Please stop justifying the huge risks AWS knowingly carries. It would be easy to place a hard cap, but they refuse to do so.
AWS gives you all the tools you need to shoot your foot off, they also give you all the tools you need to avoid this. I can easily hook up a budget alert to a pushover alert on my phone that is just as likely to wake me up as any alert duty would.
Most people don't have alert duty. I don't want alert duty. I want safety and it's extremely easy to provide it.
You just said that there's a danger of not waking up to a budget alert, and then you say you don't want alert duty. Make up your mind.
Are you comparing Heroku to EC2 and other non-managed parts of AWS? Because for most parts Heroku and AWS is two different offerings. There are two main reasons to use Heroku: they manage it and they provide easy tools for configuration. Even if AWS provide similar managed services I would assume it is as the rest as AWS: a pain to configure. I use many AWS services and not only it is required to have a PhD in AWS to understand basic tasks but the risk of doing something wrong is high. Take IAM for example. Or just setting up a static website with S3, Cloudfront and Route 53 - what a mess. Not saying that AWS isn't great for many things or for companies wanting more control (and with resources to manage it), but comparing it to Heroku is for most parts not a valid comparison.
I’m building apps for a portfolio. I’ve dabbled with heroku before and was always skeptical of their motivation, a convenient hosting solution to latch you in (when you can learn how to host on your own for low cost and high roi in regards of time and knowledge).

I have a linode vps with a wordpress blog up but I want to learn docker and host my apps on there for 5 dollars a month.

I went with render.com (no affiliation).

Found them fairly easy to use, really excellent support.

Same here, Pretty much the exact same features, for a fraction of the price. Stability/Availability has been perfect since we moved.
Same here, also moved to Render and love their UX, UI and docs. Good customer support too (needed it to add VAT ID for my business, so nothing technical).
Every time I've tried to give render.com a proper go, I've run into some weird small issue. Ended up settling on fly.io and use that for everything now.
(Render hat on)

Interesting feedback--feel like sharing in detail? You can reach me directly at ed@render.com.

Hey! Thanks for that, I'll find out what the most recent issue I ran into was and shoot you an email. In general I like the idea and direction, seems like a much closer Heroku successor.
I'll chime in and say that I did the same. A lot of people like Fly but I wanted super low complexity. My hope has mostly panned out. I was able to move without too much difficulty and I'm happy with how it turned out.
Yes exactly. I tried fly.io first from recommendations on HN, then on setup realised i needed a full docker workflow which was not what I wanted coming out of heroku.

I’ve found render the closest to heroku. I was able to setup a service for my rails app, for Postgres and for sidekick.

Not as polished as heroku or maybe fly but like I said they made up for any gaps from the bend over backwards live chat support.

Same here. My use case was simple — a bunch of static pages — so render.com isn’t even charging me.
One of the best alternatives I found is using dokku with a cheap VPS. Dokku even has herokuish buildpacks and supports (automated) deployment of docker images etc. On top of that dokku is open source with a very helpful community, total cost: 0$. Not looking back at all.

https://dokku.com/

I tried Dokku out but I didn't like the lack of GUI, I wrote in another comment but I've been using Coolify (https://coolify.io) as a great alternative with a built in GUI, also free and open source.
There is dokku pro if you want a GUI. Personally I bought a copy but never used it. I don't really want a GUI :P
That's true, I used to use Dokku a while ago but after some time I just wanted to take it easy and click buttons haha
I am using Coolify (https://coolify.io), an open source self-hosted PaaS which is a relatively newer kid on the block compared to Dokku and CapRover. I tried both of these and I just didn't like how they were, always had some problem or another.

In contrast, Coolify has a great GUI that abstracts away the most common things about PaaS hosting, like connecting to GitHub automatically for git push deploys, SSL certificates, reverse proxying and custom domain support, and best of all, having support for Heroku style buildpacks as well as Dockerfiles. I've been quite happy with it, the creator has a Discord and responds to issues very quickly.

With regards to non-self-hosted options, I did try out Render, Fly.io and Railway but I found that their free servers were too anemic. I was compiling a Rust backend and it simply could not compile on their free servers. On Hetzner, for 5 bucks I could get a 2 AMD vCPU and 2 GB RAM machine that was sufficient to compile my Rust apps in a way that the non-self-hosted ones were not. I have a JS frontend app that works fine though but I wanted to keep everything under the same VPS, plus I can run other types of self-hosted services on it too, like Plausible analytics and a Ghost blog. I'm not sure if those are allowed on non-self-hosted options.

All in all, it costs me 5 bucks a month, and I never have to worry about sudden upcharges for traffic à la AWS as in the very worst, my VPS goes down for a while. I'm now running about 20 different services on this 5 dollar box including databases and applications as well as other services, works just fine.

It's funny how people are different, after using CapRover for years I tried Coolify but it felt like so much functionality was missing that I would not use it over CapRover in its current state. All the things you mentioned (GitHub webhooks, custom domains, SSL certs, reverse proxying) are supported by Cap. It also supports Docker Swarm.
When I looked at CapRover recently, the GitHub integration in the docs required manually setting up a GitHub Actions integration and I couldn't exactly figure out what parts I needed to change since the example was for a NodeJS app, and I'm assuming it needed to be added or changed for each repo you want to track git pushes from.

In contrast, with Coolify, you simply login with your GitHub account and it installs a (one-time setup) GitHub app onto your account that automatically sets up the webhooks and I didn't need to do any configuration after that, it just worked for all subsequent apps. That level of ease of use is the experience I had with Heroku and I do not understand why more self-hosted PaaS don't seem to replicate that as well.

Also I like the Coolify GUI over the CapRover one, dark mode plus modern non-Bootstrap design is nice.

There are a bunch of ways to deploy via GitHub, I would check out this action, it's the easiest and most straightforward. There should be no need to adapt it based on different frameworks: https://github.com/marketplace/actions/caprover-deploy

You can also use the built-in webhook from inside CapRover control panel but it requires you to log in via your GitHub account in Cap (I created a secondary CI account for this).

Installing a GitHub app comes with challenges, it basically gives Coolify access to your account should they want it, since they control the app and not you. This is bad from a privacy perspective.

CapRover has dark mode. :-) But yes the design is more utilitarian in Cap and not as nice to look at.

> Installing a GitHub app comes with challenges, it basically gives Coolify access to your account should they want it

Depending on the permissions they ask for, this may be limited to modifying webhooks in the repositories you specify.

It will be at least full repo download access, because how else would Coolify download the repository?
That's fine by me, because I want it to clone, build, and run my apps anyway.
Why would someone care about the look of a GUI dashboard for a PAAS and somehow base his choice on that ? Bootstrap, MUI, made by a designer, why should I care when there are dozens of more important points ?

And UX wise both have done a pretty good job at being plenty sufficient.

I use CapRover and my main criticism is the non-zero downtime deployment.

Also when I update docker some apps don't restart properly, but that may just be my (basic Ubuntu dedicated) server though.

Non-zero downtime deployment is supported for apps without mounted volumes: https://github.com/caprover/caprover/issues/661#issuecomment...

Tangentially I was looking at Render.com the other day and they also don't support zero downtime deployments if you have a mounted volume, so it's not very uncommon even on cloud platforms.

As for restarts, I didn't have that problem yet, I believe CapRover adds `restart: always` to all the running containers so they should automatically boot. You might want to check out the logs of the containers that don't restart or just always hard restart the server after a Docker update.

I guess most of my apps have persistent data.
Every useful app has persistent data. It sounds like you have a design problem, though.

If you're treating application servers like cattle, then none of them should have persistent data (except caching that's disposable). There are fire-drill days that require deployments, so downtime incurred when updating your application code is unacceptable.

To solve this, put your persistent data on a separate server and store it in a proper database (Postgres, for example). Postgres never needs emergency updates, so the downtime for those (infrequent) updates can be pushed to non-peak hours.

I would maybe do all that if it was for more than side-projects that can tolerate 5-10 seconds of downtime when deployed :)
That's fine, I wouldn't tell you otherwise. You just complained about a missing feature that isn't actually missing if you use the service properly and treat servers like cattle.
Well yes, some containers only read the persistent data so if those could have zero-downtime as there's no risk of data corruption it would be great, but that option is not offered to me.
Hey, the founder of Coolify here. I'm constantly adding new features to Coolify.

Which ones are you missing (except Docker Swarm)?

CapRover has a huge collection of "One Click Apps" that will deploy hundreds of fully functioning applications for you including dependencies (so for example for WordPress it will spin up both a web and a database container): https://caprover.com/docs/one-click-apps.html

Also I think the way you create different kinds of resources are confusing in Coolify, like what is a "Git Source" or "Destination", all I want is to run my container. It's very different from Herokus/Caps interface and not in a good way.

Also why can't I just deploy from an image? In CapRover I often spin up a container, like `redis-commander` or `wordpress` and then just configure its env vars and volume mounts. In Coolify it seems you have to connect a GitHub repo which is not a desirable workflow for me.

I saw CapRover's one-click-apps and I'm thinking of using a similar solution in case of Coolify.

Resources are defined in this way, because you can connect a lot of things to Coolify, GitHub, GitLab, hosted or self-hosted, later on Gitea and other git sources, and also different destinations, local docker engine, remote docker engine and later on Kubernetes. I will improve the onboarding experience to not feel the first use as a burden. :)

Git based deployment is only required, if you would like to deploy a custom thing, that is currently not supported by Coolify. I'm working on a solution where you can use Docker Hub to deploy images (https://feedback.coolify.io/posts/6/deploy-from-docker-hub).

The one thing I’m missing in Caprover, and that would make me switch instantly, is I want to be able to feed it a docker-compose file to run a whole stack.

Now if a service has only a docker-compose file I have to pull it apart and start every service individually.

100% this. Docker Compose has all the information you need, please let me just deploy it.
Dokku has a very easy solution for connecting databases and other services to an app with "Dokku link." Currently with Coolify I have to spin up a database then take the link generated, like postgres://user:pass@host/link and then paste it into my env file for my app. It would be cool for Coolify to automatically inject those environment variables into my app when I link two services and apps together like Dokku does. It just needs to tell me what env variable I should be looking for, like DATABASE_URL, and then I can use that variable in my app.
I had a similar idea before (linking resources like this), thanks for reminding me.

I will add such DX improvement, for sure!

How come you compile your app on your deployment platform? I know Heroku does this, but wouldn't it be easier to compile your Rust app on a beefy CI server and then just ship a binary or container image to your deployment infra where you can size the server according to runtime load.

E.g. I use Fly.io for one of my apps. I build a container image as part of CI on Github Actions and then just push that image to Fly as part of a deploy. Fly never deals with a build step (although it can do that as well).

$5 is very cheap for the Hetzner server you describe though.

Yeah I could but it's another hassle to figure out where to build and store those container images as I believe neither GitHub container repository nor Docker Hub are free for private images. I'm also not sure whether Coolify has Docker image support, so I've just been building and deploying on my server. It also does zero downtime deployments and queues builds so it doesn't bother me if the builds take longer than strictly necessary, because I won't have downtime anyway.
Also loving Coolify after using CapRover. Very much enjoying the simplified interface.
Thank you for mentioning Coolify (founder here). :)
Was looking for a service just like this only days ago, and posted to Software Recommendations on Stack Exchange after failing to find anything via web search. If this works as advertised, then you've made something amazing. Haven't tried yet, but have linked on my SE post (to which I recieved no other replies so far!).

https://softwarerecs.stackexchange.com/a/84179/7653

For another self hosted alternative, which can be hosted on Digital Ocean, Linode, Hetzner, check out Sailor[1].

Sailor[1] is a tiny PaaS to install on your servers/VPS that uses git push to deploy micro-apps, micro-services, sites with SSL, on your own servers or VPS

[1] https://github.com/mardix/sailor.

So glad to see this thread, reading everything! Question I've been wondering for months and unsuccessfully seeking out people with experience on the topic - I'm going to be launch a socket.io app on heroku soon, a multiplayer card game, and I have _no idea_ what kind of hosting costs to expect in terms of dyno usage. Has anyone done something similar?
I've been using Render.com, but I experience very slow boot time with my Node application. I think I will be moving my project to Fly.io
I wrote about it shortly here in another Heroku topic: https://news.ycombinator.com/item?id=32585299

But to answer your questions: 1. It took around 1-2 months of experienced DevOps works (1-2 devops), this included testing and the actual switchover to new AWS infra.

2. We actually used outside contractors (actual k8s gurus) to do the work. But the decision was made in-house by myself. I'm no k8s guru, hell, I'm not even devops, but I have enough experience with the "big guys" so the choice was calculated from technical perspective, considering our growth needs and technical needs for now and for the future.

3. I haven't had any reasons to regret the decision, but I knew that before. I knew AWS offered the things we need and how to use them and what it's roughly going to cost, so this wasn't really a surprise. I did my due diligence.

4. Heroku bills were around 5$k/mon... AWS ones are in 5 digit, but it was expected because we started to use so much more services and resources than we did (or could) in Heroku. We also expanded into two new countries (one of the main reasons the switchover was done) so the costs are sadly not directly comparable. I can say that the new costs are in expected ranges and I'm happy with what we get for the money.

5. We run a eCommerce site with monthly GMV of 1m€+ and around 700k monthly unique visitors. Our stack is (per country) 3 nodejs services, PostgreSQL, redis and some frontend services. Main cost factors are the database(s) and CloudFront.

6. These decision have to made per use-case, per project and taking into consideration your actual infrastructure needs and budget limits. I don't think there isn't anything AWS can't do, but is the cheapest? Of course not. Hell, there have been plenty of topics on this very page about moving your infrastructure to your own bare metal and saving hundreds of thousands per month.

Think through what are the issues you are currently having (ie, for us it was the Herokus stack limitations, couldn't get http2, couldn't do custom monitoring / alerting, no access to LBs, no scalable DB hosting, the need to easily roll out new countries without having to do too much of manual work, weirdly high cost of some services, like redis for an example). If your problems are in the wallet, you need to consider this as your first priority and find a provider which will meet your technical needs with best price. All the big guys also have cost calculators available which will allow you to get an estimation on what you would be paying. Take time, this isn't an easy decision and it will affect you a lot in the future as well, so you don't want to get it wrong to be stuck with another set of issues.

DigitalOcean. Databases are much cheaper. No big deal in moving as digital ocean app platform supports buildpacks
I've been waiting to make this same move but holding back because DOAP isn't quite as featureful yet, e.g. not supporting scheduled jobs, which for some reason ALL my Heroku-based projects use in some way.
For scheduled jobs right now is a pita I expose HTTP endpoints which I call from an outside service on a scheduled basis
How have you found reliability/uptime on DO?
I'm considering the same for https://pwpush.com. Currently on paid Heroku ($59/month) with a lot of traffic.

DO App Platform is better than last year but still a bit quirky. I haven't found a better alternative that is more 1) mature, 2) reliable, 3) paid/supported, 4) enough features.

I have moved a Rails and Go app to https://northflank.com. I have my Rails app running in their free project (limited to two services and 2 jobs) and my Go app in a paid project. I find the pricing to be very reasonable and considerably cheaper than Heroku.

I was looking for somewhere I could run web services and cron jobs both in the same place.

They have a Heroku importer, however I think you need to ask to have it turned on. I found that it was easier for me to build docker images for my apps and use a 'build service' instead however. YMMV

I found their support to be very responsive and enjoy using their UI. The UI, builds and so on all feel very fast.

Northflank can run databases, however for my databases I've been running them on ElephantSQL for some time (https://www.elephantsql.com) - even when I was on Heroku.

Free for Dev's PaaS list is worth a review: https://free-for.dev/#/?id=paas

thanks for this mate, was looking for a free tier paas to show off some proof of concept projects, northflank seems good.
Certainly the best option I've found for my needs. Good luck :)
Do you see a way to delete your account in your account settings? Their privacy policy says it should be there but I can't find it.

I actually don't see a way to delete a project once created either.

Northflank co-founder here.

You can delete your project navigating to the billing page inside a project. To delete your account you can send a support request and we can process your request (described in the privacy policy). We'd like to automate it more, however we'd like a formal opt-in via email of the account/team owner when deleting backups and stateful workloads right now.

Can anyone say why DB disk space is so expensive compared to just a volume? Tempted to just roll my own with these prices.
Northflank co-founder here.

Addon disk pricing is the same as our volume pricing for services.

The disks are SSDs. We've added a margin on-top of GCP, EC2 and Azure SSD pricing so I wouldn't say they are expensive in comparison to other providers.

It's possible to configure HDD storage which is much cheaper, would be happy to enable that feature flag for you. SSD $0.30 per GB, HDD $0.15 per GB. We'll add HDD pricing to the site and start to enable it by default for everyone.

Hi I looked at the pricing page and cannot see managed postgres is that an option or would I install it myself on an nf-compute-N?
Managed Postgres is a feature and we install it for you on your selected resource plan, replica count, version, storage and other options.
I'm just in the process of moving to Northflank from Heroku for my Django app after trying SO MANY other PaaS services. I really like how they organise things (apps have multiple services, the build stuff makes sense) and their support so far has been amazing. One of the few where I'm confidant they're not going to work as I need without too much work from me and not cause me stress in the future.
I had a comment system (staticman) on heroku, I moved to fly.io and the import (build by fly.io) was done in some minutes, adjusting my blog and ready to go. All in all 15 min.
Oh good call. I was trying to figure out what to do with my two staticman apps that I have on heroku. And I wanted to try fly.io!

Edit: though I don't want to pay for staticman stuff. Are you running them for free?

Update: I moved mine to fly.io using the heroku migrater. Took 5 mins.