I spent time learning AWS. EC2, RDS, S3, Lambda, IAM — the whole surface. It's powerful. It's also a full-time job to operate well.
For a solo developer building production software for real clients, the operational overhead of AWS is a liability, not an asset. Every hour spent on infrastructure is an hour not spent on product.
What Cloudflare gives me:
Global edge by default. Pages and Workers deploy to 300+ locations automatically. Sub-100ms response times globally, no CDN configuration required.
Database without a server. D1 is SQLite at the edge. No connection pooling, no RDS instance to size, no VPC to configure. I write SQL and it works.
Storage without management. R2 for object storage. No bucket policies, no egress fees, no lifecycle rules to set up.
Functions without cold starts. Workers start in under 5ms. Lambda cold starts in certain runtimes can hit 500ms or more. For user-facing applications, that difference is felt.
Zero vendor lock-in escape cost. Workers run on the WinterCG standard. If I ever needed to move, my code would run on Deno, Bun, or Node with minimal changes.
What I give up:
There are things AWS does that Cloudflare doesn't. Complex event-driven architectures, managed ML services, deep analytics. If I needed those, I'd use them.
For the category of software I build — web applications, APIs, internal tools, client portals — Cloudflare covers everything at a fraction of the complexity. That's the trade I'm happy to make.