← Back to blog
·4 min·The SwyDex team

We dropped DodoPayments for Stripe

We launched on DodoPayments in October. We switched to Stripe in February. Here's the why and the lesson.

Why DodoPayments first: their crypto-payment support was the cleanest at the time. We expected a meaningful share of customers to pay in USDC. Their dashboard is reasonable, fees are competitive.

What didn't work: our actual customers paid in fiat. Of the first 40 paying tenants, two used USDC; the rest were on cards. So the headline reason for picking Dodo didn't materialize. Meanwhile, the things our customers cared about — billing portal UX, dispute handling, invoice tooling — were better on Stripe.

The migration: straightforward because we had platform-level metadata abstractions from day one. Customer rows in our DB carry a billingCustomerId that's opaque to the rest of the app. Webhooks dispatch on a provider field, not hardcoded routes. The migration was: add Stripe as a second provider, gradually migrate tenants on renewal, retire Dodo.

The cost: three weeks of engineering, a handful of customer support emails, and an awkward email to our existing customers explaining their next invoice would come from a different sender.

The lesson: billing provider is a real switching cost. Don't couple too tightly until you're sure. Our metadata-routing abstraction made the change cheap; if we'd coded directly to Dodo's SDK we'd have spent a quarter on this.


More posts