Larry Myers

Cover Image for The Free Tier Trap

The Free Tier Trap

Recently I’ve seen the terms “developer experience” and “toil” frequently enter the conversation around developing software. Developers want to spend time focused on their immediate problem and not managing their tech stack. A frequent solution is to cobble together any number of hosted services from SaaS companies to build up a low-maintenance tech stack.

When it’s your money being spent it’s incredibly tempting to see how far you can get on the free tier of SaaS companies. This is a trap (by design!), and you can pay for this choice many times over as a developer in time, frustration, and overall opportunity cost.

These services cost money to operate, and getting developers to pay for things is hard. We’ve been conditioned by the open source world to expect things for free. Companies have addressed this challenge by offering a free tier for their services to get us in the door. It’s an effective marketing strategy. Sometimes these free tiers can be large enough to allow hobby projects to run indefinitely without paying anything to operate them. Any reasonably well-run company is going to have a free tier that allows you to make significant progress, attempt to lock you in, and then extract as much revenue as they can from you as a user.

While it’s great that hobby projects can be hosted for free, I believe that developers are not saving time and money. They are merely deferring the costs of operating the project over time. Having been burned by this in the past I’ve become more discerning about when I chose to use the free tier of a cloud service. Many times I have opted for a paid alternative over a free option knowing it will save me significant time in the future.

How to Evaluate Free Tiers

My criteria for evaluating a free service are pretty simple, and optimize for the cost effective operation of my projects:

  1. Is a sufficient amount of resource capacity being provided for free? Can I actually use the service, or just test out a small prototype?
  2. Could I replace the service easily with a self-hosted open source equivalent?
  3. Are there well defined limits for the free tier? When will I hit those limits?
  4. Is the pricing structure clear and straightforward? Would I be willing to pay?

If a hosted service fails to meet the above criteria I assume that sometime in the future I’ll be required to spend a large amount of unplanned time to re-platform the project and potentially rewrite large amounts of code.

I’ve included some services below that I’ve evaluated as I chose how to host my projects.

GitHub

https://github.com/pricing

The free tier for GitHub continues to improve, and the amount of functionality provided for private repositories and Actions for CI/CD is impressive. My reliance on GitHub is a bit worrying at times, but if the free tier ever changes for the worse I’d likely just end up paying the $4 / month.

I mitigate this by minimizing the touch points between the CI process of projects and the github.yml file and making sure secrets are always injected via environment variables. Porting the CI/CD pipeline to another platform wouldn’t be how I would want to spend an evening, but it wouldn’t be tedious either.

Cloudflare Pages

https://pages.cloudflare.com/

I’m actually a bit shocked Cloudflare’s free tier as is generous as it is. It would be challenging to hit the 500 monthly build limit for most individuals, and not providing any limits on the amount of projects you can create is pretty amazing. The service itself is straight forward enough that it could be easily replaced with nginx and a small CI Job, so I’m not worried about getting locked in to the service.

CockroachDB Serverless

https://www.cockroachlabs.com/pricing/

Letting somebody else operate and maintain a postgres database is a pretty strong selling point, and the free tier is plenty to run most applications at a reasonable scale. If I had to I could stand up my own instance on a VM, but I’m not sure I’d save a ton of money every month for smaller projects. The fact that cockroachdb is an open source project means the lock-in factor is very low as well.

AWS Free Tier

https://aws.amazon.com/free/

AWS fails too many of my criteria to use for free, with few exceptions, and it’s rarely the most competitive option available from a price and performance perspective. The network egress fees alone provide a strong lock-in mechanism to keep you inside the AWS ecosystem and is a non-starter for me. Too many of the AWS services are proprietary as well, with no good open source equivalent, which makes migration more difficult as you use more of the AWS ecosystem.

If cost is a primary concern for you (and it likely is if you’re evaluating free tiers), I’d avoid AWS for most of your needs.

Fly.io

https://fly.io/docs/about/pricing/

I really wanted to migrate to Fly.io so I no longer have to manage my own VMs. Their free tier feels just about right to get started, and their pricing model is competitive with running small hosted VMs yourself. Their CLI tool is easy to use and uses familiar terminology for deployment.

Unfortunately it would lock me into their operating model too tightly, without providing options for a private docker registry and recurring tasks. The flexibility provided by self hosting nomad is still a more compelling option for low-maintenance container orchestration.

What I Pay For

AWS Route53

https://aws.amazon.com/route53/

Route53 is the exception to the rule for me when it comes to using AWS. There is no free tier, but it’s fairly priced and one of the better options available for hosted DNS. For $0.50 / month, you can have reliable hosted DNS for a domain (and its subdomains), which allows you easily switch between hosting providers for your projects. It actually helps reduce lock-in by allowing you control your public facing domains.

Hosted DNS is one of the few things I believe you should always pay for. Don’t be cheap when it comes to domain registration and DNS.

Linode

Linode’s pricing model is competitive, and the amount of resources and bandwidth you get underscores how expensive AWS EC2 is in comparison. When Linode started providing a cloud firewall and private VLAN for VMs it became a clear choice for hosting.

I happily pay $10 / month to run traefik and nomad instead of a serverless solution elsewhere. My only limits are the VMs I pay for, and I’m not required to work within the features and tiered limits of other services.