When to Leave Heroku

When to Leave Heroku

Assess cost, control, reliability, and scaling needs before leaving a PaaS.

Arthur Azrieli
Book Icon - Software Webflow Template
 min read

Heroku is a good place to start when your team needs production running without building a platform first. The pressure usually shows up later: cloud costs become harder to explain, add-ons shape your architecture, release workflows get fragile, or engineers need more control than the platform gives them. The hard part is knowing whether you have truly outgrown Heroku or whether you are about to take on infrastructure work before the business needs it.

Leaving Heroku should be a decision based on cost, control, reliability, and scaling needs. If you move too early, you trade a simple operating model for months of platform work. If you move too late, your team may keep paying for convenience while fighting limits every sprint.

Heroku is still a strong choice when speed matters most

Before planning a migration, be honest about what Heroku is giving you. For many startups, the value is not abstract. It is the ability to deploy with a small team, avoid managing servers, and keep product engineering focused on customers.

Staying on Heroku often makes sense when:

  • Your infrastructure needs are simple. A web app, a worker, a managed database, and a few add-ons may be enough.
  • Your team has limited platform capacity. If one backend engineer is already handling cloud, CI/CD, security, and incidents, adding Kubernetes or complex cloud networking may create more risk.
  • Your main bottleneck is product-market fit. If the team still changes core product behavior every week, platform migration work can become a distraction.
  • Your reliability requirements are manageable. If current uptime, recovery process, and observability are acceptable for your customers, there may be no urgent reason to move.

Convenience has real value. A cheaper infrastructure bill does not automatically mean a cheaper operating model once you include engineering time, on-call load, migration risk, and ongoing maintenance.

Cost becomes a serious signal when it changes engineering decisions

Cost is often the first reason teams consider leaving Heroku. That does not mean cost alone should drive the decision. The more important question is whether the platform cost is forcing bad tradeoffs.

For example, a team may avoid adding background workers because the monthly bill climbs quickly. Another team may keep an oversized database or expensive add-ons because nobody has time to redesign the setup. In those cases, the bill is pointing to a deeper issue: the platform no longer matches the workload or the team’s growth stage.

Review cost in four buckets:

  • Application runtime: web dynos, worker dynos, scheduled jobs, and any always-on processes.
  • Data services: managed databases, caches, search, queues, and backups.
  • Operational tooling: logging, monitoring, error tracking, security scanning, and deployment tools.
  • Engineering time: the cost of managing a new cloud setup, fixing migration issues, and maintaining infrastructure after the move.

A move to AWS, Google Cloud Platform, or Azure may reduce some direct platform costs, but only if your team has the discipline to manage infrastructure properly. Poorly configured cloud environments can become more expensive than Heroku, especially when nobody owns rightsizing, networking, storage lifecycle rules, and unused resources.

Leave when you need infrastructure control that Heroku cannot reasonably give you

The strongest reason to leave is usually control. As companies grow, they often need stricter network boundaries, deeper identity and access management, custom deployment flows, or closer integration with cloud-native services.

You may be ready to move when your team needs:

  • Private networking patterns such as virtual private cloud design, private service access, or tighter control over traffic between services.
  • Custom security controls such as detailed Identity and Access Management policies, secrets management standards, or stricter audit trails.
  • Infrastructure as code using tools such as Terraform, OpenTofu, Pulumi, or cloud-native templates.
  • More flexible compute options for services with unusual CPU, memory, storage, or networking needs.
  • Standardized environments where development, staging, and production follow the same infrastructure patterns.

This is where many teams start looking at containers, managed Kubernetes, Amazon Elastic Container Service, or similar options. The right target depends on your team’s skills, workload shape, and tolerance for operational complexity.

If you are moving toward Kubernetes and want deployments controlled through Git, it is worth reviewing GitOps principles and use cases before you rebuild your release process.

Reliability pressure is a bigger warning sign than platform preference

Teams often say they are leaving Heroku because they want a “real cloud setup.” That reason is too vague. A better reason is that reliability work now requires capabilities your current setup does not support well.

Common reliability warning signs include:

  • Incidents are hard to diagnose. Logs, metrics, traces, and deploy history are spread across tools, and nobody can quickly answer what changed.
  • Rollbacks are stressful. A failed release requires manual steps, database uncertainty, or Slack coordination instead of a known path.
  • On-call depends on one person. Production knowledge lives in the head of a founder or senior engineer.
  • Scaling is reactive. The team adds capacity during incidents instead of using clear scaling policies and load patterns.
  • Background work is fragile. Queues, workers, retries, and scheduled jobs fail in ways that are hard to observe or recover.

Moving platforms will not fix weak operational habits by itself. If your team lacks runbooks, alert quality, deployment discipline, or service ownership, a cloud migration can make those gaps more visible. Build the operating model alongside the infrastructure.

Scaling pain should be specific before you migrate

“We need to scale” is not enough detail to justify leaving Heroku. Name the scaling problem first. Different problems lead to different platform choices.

Useful questions include:

  • Is the web layer hitting limits during predictable traffic spikes?
  • Are background jobs delayed because workers cannot scale the way the workload needs?
  • Is the database the real bottleneck rather than the application runtime?
  • Do you need separate scaling rules for APIs, workers, real-time services, and internal tools?
  • Are release processes slowing down because multiple teams deploy through the same path?

A startup moving from one monolith and one worker to several services may need better container orchestration, service discovery, secrets handling, and observability. A team with one application and a growing database may be better served by database tuning, query work, caching, and better background job design before changing platforms.

Do not use migration as a substitute for understanding the bottleneck. Measure the workload, identify the constraint, and then choose the platform model that fits.

Plan the move as a controlled engineering project

If the case for leaving is clear, treat the migration like product-critical engineering work. A rushed platform migration can create outages, security gaps, and months of cleanup.

A practical migration plan should cover:

  1. Choose the target operating model. Decide who owns infrastructure, on-call, CI/CD, secrets, observability, and incident response.
  2. Define the target platform. Pick the cloud provider, compute model, database approach, networking layout, and deployment workflow.
  3. Codify infrastructure early. Use infrastructure as code before production traffic moves. Manual cloud setup is fast at first and painful later.
  4. Build deployment and rollback paths. Make releases repeatable before you cut over users.
  5. Migrate data carefully. Plan backups, restore testing, data sync, maintenance windows, and rollback conditions.
  6. Set minimum observability standards. Logs, metrics, traces, alerts, dashboards, and runbooks should exist before the new platform becomes the default.
  7. Move one workload at a time when possible. Start with a lower-risk worker, internal service, or staging environment before migrating the main application.

The goal is not to copy Heroku feature for feature. The goal is to keep the useful parts, such as simple deploys and clear environment management, while adding the control your team now needs.

Takeaway

Leave Heroku when the platform is blocking clear business or engineering needs: cost control, infrastructure control, reliability requirements, or scaling patterns that no longer fit. Stay if Heroku is still buying your team speed and the main pain is vague discomfort with the platform.

Before you move, write down the exact reasons, the target architecture, the ownership model, and the risks. If those are clear, migration can be a good next step. If they are fuzzy, fix the current setup first and revisit the decision when the pressure becomes specific.