CASE STUDY

How Memberstack uses Porter to serve 30 million requests

After encountering repeated issues with Heroku and serverless, Memberstack decided to switch to Porter to get a Heroku-like platform experience in their own cloud.

Justin Rhee
May 11, 2022
3 min read

Memberstack helps developers add user logins, payments, and gated content on their websites. Over 2,300 developers rely on Memberstack to process over $40M in revenue. Memberstack went through Y Combinator as a member of the S20 batch.

Memberstack's platform allows developers to easily manage their user auth and payment flows.

Growing pains on Heroku

Early on, Memberstack opted to host applications on Heroku to minimize energy spent on DevOps. While scaling during YC, however, they ran into a few key issues. First, the lack of built-in support for static IPs meant they couldn't restrict access to their own Postgres database, which was becoming an increasing concern as more users trusted them to manage app authentication and payment information.

Along similar lines, Memberstack wanted to move into their own dedicated VPC but found Heroku's Private Spaces and Enterprise pricing difficult to justify at their size. Lastly, application scaling had to be managed completely manually since Heroku provided no support for autoscaling non-performance dynos.

"On Heroku there were basic networking and security things we wanted to accomplish that just weren't possible. Even for the things Heroku did support, it made no sense for us to pay thirty grand a year for basic features on Private Spaces."
Tyler Bell, Founder of Memberstack

Continued issues with Serverless

Once Memberstack realized they needed to move off Heroku, they decided to try going all-in on AWS Lambda using the Serverless Framework. The core motivation remained the same: focus just on the application logic while directing as little energy as possible towards DevOps.

"Serverless was marketed to us like 'this will be the easiest thing you'll ever do.' The problem is we ended up with a stack that had a lot of moving pieces that was really hard to debug."
Tyler Bell, Founder of Memberstack

Unfortunately, troubles quickly manifested in serverless paradise. For one thing, the debugging process became extremely time-consuming. While it was possible to mock the behavior of Lambdas in a local environment, inevitable differences in execution meant (empirically) having to debug most issues directly from AWS Lambda while hopping around multiple functions. As a startup aiming to constantly update product and move as quickly as possible, this created a massive bottleneck.

Also, deploys became significantly more fragile than before on Heroku. Many issues like bundle size limits, versioning differences with the Serverless Framework, and general lack of parity between the local environment and AWS Lambda were difficult to anticipate.

While Memberstack sees potential to someday reincorporate serverless for certain components of their stack, they concluded it was a poor fit for most of their applications especially in light of their current engineering needs.

Settling into AWS and Kubernetes with Porter

After encountering repeated issues with Heroku and serverless, Memberstack decided to switch to Porter to get a Heroku-like platform experience in their own cloud.

With Porter, Memberstack gets the infrastructure flexibility and performance of Kubernetes (EKS) without the traditionally associated DevOps overhead. Deploys from GitHub are fully automated and are now much more consistent than before on AWS Lambda.

"We've been extremely happy with Porter and have never looked back. Deploys are extremely dependable and when we push to a branch we know it's going to work. The Porter team was always super responsive during the migration process and our hosting experience has improved in nearly every way."
Tyler Bell, Founder of Memberstack

Memberstack takes advantage of every application type on Porter, deploying various web APIs, background workers, and scheduled jobs across multiple environments. Unlike Heroku, since Porter runs all services in Memberstack's own AWS cloud, they were able to easily restrict external access to Postgres and configure critical services to only be reachable from within the cluster.

"Each time we need to add a production-ready worker it literally takes minutes now instead of days. We've also used the rollbacks feature multiple times. It's super easy to do and happens almost instantly.
Tyler Bell, Founder of Memberstack

With the flexibility of running all services in their own AWS, Memberstack has the confidence to build for the long-run on Porter while focusing internally on what actually matters: their own product.

Looking to improve your developer experience on Kubernetes? Learn more about Porter today.

Next Up

Why Woflow moved from ECS to Porter
Trevor Shim
6 min read
How Writesonic runs a 1.6TB Kubernetes cluster with no DevOps engineers
Justin Rhee
2 min read
Govly moves from GCP to AWS in a day using Porter
Shankar Radhakrishnan
5 min read
Why Dapi moved from Cloud Foundry to Porter to help enterprises manage payments
Shankar Radhakrishnan
4 min read
How CommonLit uses Porter to aid the literacy development of over 30 million students
Shankar Radhakrishnan
6 min read
How Porter helps La Haus deliver a world-class developer experience on Kubernetes
Justin Rhee
3 min read
How HomeLight powers billions of dollars of real estate business on Porter
Justin Rhee
3 min read
How Onclusive uses Porter to consolidate their tech following five mergers
Shankar Radhakrishnan
3 min read
How Nooks uses Porter to achieve a median latency of 250ms for their AI parallel dialer
Shankar Radhakrishnan
11 min read
How Curri autoscales daily on Porter to handle spikes in user traffic
Shankar Radhakrishnan
7 min read
How Memberstack uses Porter to serve 30 million requests
Justin Rhee
3 min read
Why Landing chose Porter to scale their servers
Shankar Radhakrishnan
5 min read
How Avenue scaled after YC without hiring DevOps
Justin Rhee
3 min read
Subscribe to our weekly newsletter
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.