We looked at S3 first — it's the obvious default and the DX is solid. But egress fees are a hidden tax that quietly compounds as your user base grows. Every file your users download costs you extra, and it adds up fast.
R2 gives you the exact same S3-compatible API, so there's no learning curve and no SDK migration. We literally just updated our config. Zero egress costs since day one, backed by Cloudflare's global network we were already using. It wasn't even a close call.