Deciding
How to choose a PaaS and move between them
Start from what your team can't compromise on, shortlist two or three options, and test the one thing most likely to go wrong. When it is time to move, go service by service with a way back.
Updated
The five questions that narrow the field
- Must the apps and data run in your own cloud account? If yes, the shortlist is the own-cloud options. See the two hosting models compared.
- Do you need a BAA or a SOC 2 report this year? Check which plan provides it and whether its price is published.
- Will you run your own models on GPUs? Most vendor-hosted platforms don't offer them.
- What will it cost at ten times today's usage? Price your app on each shortlisted platform's published rates at today's size and at ten times it.
- How would you leave? Prefer standard containers, standard databases, and platforms that say what happens if you stop paying.
Checklist by team type
Shortlists come from the ranking's ratings on the criteria that matter most for each team, not from the overall score.
Solo developer or side project
- Low entry price
- Fast setup
- A database next to the app
Early-stage startup, no DevOps hire
- Push-to-deploy with previews
- Room to grow without re-platforming
- Cloud credits if you have them
Growth-stage team selling to larger companies
- SOC 2 report
- Data in your own cloud account
- Private networking to your databases
Healthcare or other regulated data
- A signed BAA
- Published price for the compliant tier
- Audit logs and access control
AI team running its own models
- Self-serve GPUs
- Scale to zero for bursty inference
- GPUs and app on one platform
Team already running Kubernetes
- Works on your existing cluster
- Self-service for developers
- No re-platforming
Before you commit: a one-week trial
- Deploy your real app, not a sample, with its database and one background worker.
- Open a pull request and check the preview environment works end to end.
- Roll back a deploy, and restore a database backup into a new instance.
- Read the first month's projected bill, and set a spend alert.
- Ask support one real question and note how long the answer takes.
Migrating an app from one PaaS to another
Most moves follow the same seven steps, whatever the platforms. The data move is where the risk is; everything else can be rehearsed.
- Take inventory.
- List every service (web, workers, cron jobs), every database and cache, every add-on, every environment variable, every domain and every scheduled task.
- Note what is platform-specific: add-ons, platform cron syntax, routing rules, build settings, edge or function features.
- Package the app portably.
- If the app builds from a buildpack or a platform-specific runtime, add a Dockerfile (or confirm the target supports the same buildpack) and check it builds and runs locally.
- Read configuration from environment variables only, and make the app listen on the port it is given.
- Stand up the target, empty.
- Create the services on the new platform with the same sizes and environment variables, pointing at a copy of your data rather than production.
- For an own-cloud platform, connect the cloud account and request any quotas (including GPUs) now.
- Move the data.
- For a small Postgres database, a pg_dump and pg_restore during a short maintenance window is simplest. Time a dry run first.
- For a large one or a no-downtime move, use logical replication (or your target's migration tooling) to keep the new database in sync until cutover.
- Move file storage and caches; caches can usually start cold.
- Replace platform-only pieces.
- Swap each add-on for its equivalent (managed database, Redis, email, logging) and move cron schedules and background workers.
- Recreate secrets on the new platform; never copy them through chat or tickets.
- Run both, then cut over.
- Lower your DNS records' TTL a day ahead. Run the new deployment against production data in read-only or shadow mode if you can.
- Cut over: put the old app in maintenance, do the final data sync, switch DNS, and watch errors and latency.
- Keep the way back open.
- Keep the old platform running, stopped from writing, until you are confident; know the exact steps to switch DNS back.
- Once stable, export what you need for records, remove the old services, and cancel the old plan.
Many platforms publish their own migration guides (for example from Heroku). They are useful for the mechanics, but they are written by the destination, so check the steps against this list.