We cut bandwidth prices. Go nuts.

Fly.io turns your Docker apps into Firecracker VMs and runs them all over the world. We’re now charging $0.02 per GB for outbound data transfer from North America and Europe, and $0.04 per GB almost everywhere else.

When we launched Fly way back in March, we charged $0.085 per GB to send data out from North America and Europe, and $0.14 per GB for Asia Pacific. Our volume has increased dramatically and pushed our unit costs down, so we lowered our prices as of December 1st 2020. The net result is 75% cheaper bandwidth for apps running on Fly.io [1].

The joy of bandwidth pricing

If you shop around, you’ll find book stores-turned-hosting-providers who charge their captives exorbitant fees to move data around. It’s high margin and locks people in. What more could you ask for?

You’ll also find companies who don’t charge for bandwidth … directly. They do, but it’s not a line item on anyone’s bill.

We’ve gone back and forth on the right way to price bandwidth into our services. Pricing projects are my favorite kind of scope creep. It’s easy to go from “what should this cost?” to “how do we want people to behave?” to “what even is consciousness?”

Ultimately, we want to accomplish two things:

  1. It should scale well, from small mostly text based web apps to large, intense apps that handle a lot of data. You should be able to build a CDN on Fly.io without worrying too much about your bandwidth costs. You should also be able to run a hobby project for close to free.
  2. Transparency and predictability are good. People should be able to glance at pricing, do minimal mental math, and judge how well it works for their app.

These are at odds with each other! So we’ve made a few trade offs.

Making it work for everyone

Normally, scaling bandwidth pricing means graduated tiers or minimum commits with overage. Those are complex, though, and hard to wrap your head around (and, depending on who you’re buying from, hard to even get in writing). So we decided to charge everyone the same price. Customers with intense, high volumes apps will pay the same bandwidth rates as individual devs on Fly.io.

Those high volume tiers are important for attracting the right customers, though. People who build video communications apps, game servers, and photo services need to keep bandwidth prices low so they can make money. Normal cloud bandwidth pricing (including our previous pricing) is much too expensive for these kinds of apps.

What we’ve really done is make a one tier pricing scheme with the lowest price we can charge and still make reasonable margins. If you’ve ever wondered what reasonable margins are, the answer is 70%. We need to make a little more than three times our costs to keep doing what we’re doing.

Some light math

If you do the margin math, you’ll estimate that our cost to deliver 1GB of data in North America is about $0.006 per GB. In Singapore it’s about $0.012 per GB. These are pretty close, but they aren’t exact. We have roughly 11 different bandwidth rates, depending on the facility and region we’re running servers in. We also pay for bandwidth between servers and regions. One GB of data from Singapore to an end-client in New York City has two different “costs”. [2]

Inflicting that complexity on you all would help with margin control, but ugh. What we’ve done instead is set a blended price that fits most apps running on Fly.io, and decided to just eat the extra cost from outliers. If you want to exploit that, run an app in Sydney with a whole bunch of users in India. We’ll lose money on your app and you will win one round of capitalism.

Since we tend to favor transparency and predictability over “price that scales well”, we’ve ended up with pricing that will be too high for some customers. Which is fine, we’re growing, but we have a plan for that. If these bandwidth prices don’t work for your use case, and you can commit to a large amount of data transfer each month, we’ll lower these prices for everyone.

The many meanings of the word “free”

We should also talk about free bandwidth. Free can be more complicated than transparent pricing. Companies that pitch free bandwidth typically mean free for a narrow, low volume use case. When your volume goes up, either because you’re building a YouTube competitor or because your self hosted community was featured on CNN, a friendly sales person will ring you up and offer an enterprise package to ensure continued service quality. Or they shift traffic to lower cost (and less reliable) networks. Either way, it’s not really my favorite surprise.

That said, when I run side projects, or apps that don’t serve much data, I don’t really want to think about how much bandwidth is costing me. We created a free tier to cover this, you get 160GB to use each month before you start paying us. We hope that’s enough for your side projects (and if it’s not, tell us what you’re working on).

We don’t really want to make money on bandwidth

Go build yourself a CDN. Or the next YouTube. Or just make a little family photo album app in Elixir. We’ll take it, launch it in Firecracker VMs, and charge you very little for bandwidth.

  1. ^ Bandwidth is cheaper everywhere except India! Outbound traffic from India is $0.12 per GB. Very few apps on Fly.io send much traffic to India. This will hopefully change and bring the price down.
  2. ^ We pay for outbound transit from Singapore, and then outbound transit from New York City. The last mile is “cheap” but Singapore to NYC costs us the same as Singapore to the internet at large. In some cases, we pay twice in a single region.