Stripe is not your billing system
I promised in my last newsletter to start writing and sharing code, specifically around Revenue Ops (RevOps). So I sat down with Cursor and started to sketch out a general-purpose billing system for startups using Node.js. While there are already Next.js code templates with Stripe baked in, there are many “gotchas” with that approach.
In the middle of working on that, Theo Browne dropped a GitHub repo with a single Markdown file titled “How I Stay Sane Implementing Stripe.” And his observations are 100% correct. Even if you follow Stripe’s documentation perfectly, your checkout can still be broken.
People can even get access to your service without paying! That’s unacceptable.
It all points back to the same truth: Stripe is not your billing system.
You might be thinking now “wait, Stripe is not my billing system? I thought it just handled everything for me.” Stripe does indeed provide some excellent payment features:
Attempting to build these features on your own would be time-consuming and error-prone. Even well-resourced tech companies like Anthropic use Stripe Checkout. People are familiar with it. It Just Works?.
Despite having a solid checkout system, Stripe doesn’t do everything. Here are just a few of the billing tasks you still have to handle:
All of these tasks are crucial for your startup. When people don’t move from trial to paid, you don’t get paid. When people don’t get what they paid for, they churn. And if you can’t track what sales and marketing efforts are effective, you are going to waste your budget.
As it turns out, the billing system is the most important feature you can deliver.
领英推荐
You could cobble together your billing system using various SaaS products. You could also buy an expensive, overkill, off-the-shelf billing system.
Or you can build one yourself.
Let’s take a look at one I’m building for Pink Wallet . Pink Wallet is in closed beta right now. A waitlist manages access to the beta. When people sign up, they can move up the waitlist by sharing a unique link. The following table in Supabase supports this:
CREATE TABLE IF NOT EXISTS waitlist (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
pronouns TEXT NOT NULL,
shared_count INTEGER DEFAULT 0,
referral_code TEXT UNIQUE,
referred_by UUID REFERENCES waitlist(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('UTC'::text, NOW()) NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('UTC'::text, NOW()) NOT NULL,
notified_at TIMESTAMP WITH TIME ZONE,
converted_at TIMESTAMP WITH TIME ZONE
);
You may or may not be someone who generally reads (or for that matter, writes) SQL. But I bet you already have an idea of the major data points it covers:
This waitlist table serves Pink Wallet’s goals:
While there is a bit more code needed to support the waitlist, this is the core. I don’t have to pay monthly fees or usage charges to keep the waitlist running. When I’m done with the waitlist, this table can be archived or dropped entirely.
A waitlist for your billing system could look different. Or you might not even have one at all. And that’s the major advantage of building your own: you have a system that fits your needs without having to hack around pieces that don’t fit.
Business Development for Chargebee | SaaS
2 周Spot on. Stripe is a fantastic payment gateway, but many companies underestimate the complexities of subscription billing. Great insights!
?? B.Tech CSE @GL Bajaj |5? Python @HackerRank | 3? @CodeChef| GDSC MEMBER| CAMPUS AMBASSADORS @IMUN AND @NSS IIT Delhi |AI & Data Science Enthusiast | Crafting Scalable Solutions for a Smarter Future
4 周Great insights! I really appreciate the perspective you’ve shared. Looking forward to more valuable content from you. Let’s connect!