Nobody Waits 30 Seconds: Our Cold Start Showdown Across a Dozen Free Tiers
Photo: Arjan Richter, CC BY 2.0, via Wikimedia Commons
The Spinner of Doom
Here's a scenario every developer on a free tier knows by heart: you share your side project in a Discord server or drop the link in a Reddit comment, someone clicks it, and... nothing. A white screen. A loading wheel. Ten seconds pass. Fifteen. If your visitor is anything like the average American web user, they're gone by second eight — long before your bargain-bin host decides to wake your app up.
Sleep mode is how most free tiers stay free. Your app idles, the provider reclaims the resources, and everyone's happy until the next request comes in. Then your poor visitor pays the tax in the form of a cold start. We wanted hard numbers on exactly how bad that tax is, so we deployed a trivial "hello world" app to a dozen free hosts, let each one fall asleep, then hammered them with requests and timed the recovery.
How We Tested
Each app was identical: a minimal endpoint returning a static response, no database, no cold caches, nothing to muddy the waters. We let every instance idle past its documented (or discovered) sleep threshold, then fired off a single request with a stopwatch running. We repeated each wake-up test five times and took the median. All tests ran from a residential connection in Ohio, because that's a fair proxy for your typical visitor.
The Results, Ranked
The fast lane (under 2 seconds): The serverless-style platforms were the clear winners. Their whole architecture is built around spinning instances up on demand, and it shows. Our quickest host answered a cold request in about 400 milliseconds — fast enough that nobody would ever notice. A couple of other function-based tiers landed in the 1–2 second range, which is noticeable on a slow phone connection but forgivable.
The middle of the pack (2–10 seconds): Several container-based free tiers clustered here. Roughly 4 to 8 seconds from request to first byte once sleeping. Your friends will wait that long. A hiring manager clicking a portfolio link? Maybe. A random stranger from a forum? Coin flip.
The danger zone (10+ seconds): Two traditional free hosts took 25 and 45 seconds respectively to wake up — and one of them served a generic "waking up" interstitial page first, which at least explains the wait but doesn't shorten it. A 45-second cold start is not a hosting quirk; it's a visitor repellent. We watched our own test browser tab give up and time out twice during testing.
Which Sleep Policies Can You Work Around?
Some sleep timers are more negotiable than others:
- Ping it yourself. A free cron job (or a $0-tier uptime monitor) hitting your app every 5–10 minutes keeps most platforms warm. Check the ToS first — a couple of providers explicitly prohibit synthetic traffic, and one flags aggressive pinging as abuse.
- Sleep thresholds are often per-service, not per-account. Splitting one project across two services sometimes means only the busy one stays awake.
- Static fallbacks help. Serving a pre-rendered HTML page while your backend wakes up can hide a 10-second cold start from impatient visitors. It's a hack, but it works.
The Verdict
If your traffic is bursty and human, pick a host with sub-2-second cold starts and stop thinking about this. If you're stuck on a slower tier, set up a keep-alive ping — just read the terms first. And if your host takes half a minute to wake up, no amount of clever workarounds will save that first impression. Free is great; a 45-second spinner is not.