I'm Runbo Li, Co-founder & CEO at Magic Hour.
The decision is simpler than people make it. If a capability touches your core loop, the thing users come to you for, you build it. If it doesn't, you buy it and move on. The minute you start custom-building your billing system or your email infrastructure, you're burning cycles that should go toward the product. But if you outsource the thing that makes you you, you've handed your differentiation to a vendor.
Here's how this played out for us. Early on, we needed a way to orchestrate AI video generation at scale, queuing jobs, managing GPU resources, handling failures gracefully. There were off-the-shelf orchestration tools we could have stitched together. But video generation orchestration is our product. The latency, the reliability, the way we route workloads across different model backends, that's what determines whether a user gets their video in 30 seconds or 5 minutes. We built it ourselves. It took weeks of intense work, but it gave us direct control over cost, speed, and quality. Today that system handles millions of generations, and we can tune it at a level no third-party tool would allow.
Contrast that with payments. We use Stripe. We didn't think about it for more than ten minutes. Payments are table stakes. They need to work, and Stripe makes them work. Every hour we would've spent building payment logic is an hour stolen from the thing our users actually care about.
The threshold I use: if a vendor's limitations would eventually force you to migrate anyway because your needs are too specific, build it now. Migration cost compounds. If a vendor can serve you for years without friction, buy it today and reclaim that engineering time.
Two people built a platform with millions of users. That only happens when you're ruthless about where your time goes. Build the moat, buy everything else.