Five years ago, Cloudflare was "that CDN company."
Today? Workers, R2, D1, Durable Objects, AI Gateway. They're a cloud platform. Did it so quietly most developers still think of them as a CDN.
AWS approach:
Deploy to us-east-1
User in Singapore: 200ms latency
Cloudflare approach:
Deploy once
Runs in 300+ data centers
User in Singapore: 20ms latency
AWS: pick a region, deploy, hope your users aren't on the other side of the planet.
Cloudflare: deploy once, runs everywhere simultaneously. No region selection. No cold starts worth worrying about.
Edge IS the computer. Different architecture entirely.
Storage: AWS has S3, Cloudflare has R2. The difference? R2 has zero egress fees while AWS charges $0.09/GB.
Compute: Lambda vs Workers. Lambda cold starts take 100-500ms, Workers cold start in 0-5ms.
CDN: CloudFront is separate, Cloudflare has it built-in.
R2 has zero egress fees. AWS charges you to get your own data out.
For a startup serving 10TB of images monthly:
That's real money.
Same code, different deployment model. Workers run closer to your users.
Cloudflare wins:
AWS still wins:
Tricky parts:
Not "should I migrate?" but: "am I using AWS because I need it, or because it's the default?"
Startup reality check: AWS services actually used? About 5%. Services paying for? 100%. Time spent on IAM policies? Weeks. Users who benefit from region selection? None.
Most startups use EC2, S3, and Lambda. Pay region-based pricing for a global product. Spend weeks on IAM policies nobody understands.
If your app is an API that needs to be fast everywhere — look at Cloudflare first.
The best infrastructure is the one you stop thinking about.
— blanho
Stop chasing job titles. Start chasing knowledge. The title doesn't make you competent.
You don't have Netflix's problems. You have 3 developers and a Postgres database.
Everyone's drawing boxes and arrows. Nobody's shipping code. System design matters, but not as much as Twitter thinks.
# AWS Lambda (region-bound)
def handler(event, context):
# Cold start: 100-500ms
# Runs in us-east-1 only
return {"statusCode": 200}
# Cloudflare Worker (edge-native)
export default {
async fetch(request) {
// Cold start: ~0ms
// Runs in 300+ locations
return new Response("Hello")
}
}