I recently resumed (exhumed?) a project that I started waaaaaaay back during the first covid lockdown, to raise it up to minimum viable product status, and that meant adding the ability to take payments for its services. I chose to do that via Stripe.
Along the way I learned how to interact with Stripe as a usage-based subscription business, I encountered some friction, and I’ve got some tips to share for smoothing out that friction. But first, a little background story.
I had originally started this little web app because I was looking for something to raise my mood, I’d left one job but not yet started the next, and a friend happened to tell a story of friction that made me think that there was a problem to be solved. Mainly it was the first reason: something personally directed and creative that gave me the satisfaction of building a working product from the ground up with my own two hands (or at least as close to that as you get with software).
Because I did it mainly for my own satisfaction at the act of building it’s kind of a solution in search of a problem. I’m OK with that. I knew that I was walking into this mistake as a trade-off for the immediate enjoyment of the act of building. I didn’t do the wiser process of extensive consultation with potential customers first. This also would have been tricky at that time, because we were in a lockdown that placed severe restrictions on face-to-face meetings and travel, and as it was the first lockdown not everybody had yet come to grips with jumping on a video call for everything. Plus, the market for my little web app is people who want to spend less time talking to strangers, ironically. Most importantly, I felt like I needed it.
So then when a side-project with more legs came along I dropped my little friction-reducing app like a hot potato. It sat around in a not-quite-usable state for nearly 2 years. Then one day I decided that I wanted to learn how to take payments as a life skill, and my old app provided a real-life yet low-risk test case, so I dug it up and polished off the the last few features of its freemium business model. This took about a week of 30 minutes here, 2 hours there — a shamefully small amount of effort after having let it sit idle for so long.
4easywords.com is born!
Enough back-story! What are my tips for taking payments via Stripe? I have three.
One. Use these simple-ish guides to get “hello world” working.
I had some trouble finding a simple getting-started guide. The Stripe docs are enormous and there’s no shortage of other guides on the internet. What I wanted was something simple and quick, not comprehensive. I’ll read comprehensive instructions after I’ve passed the “hello world” stage. (Reveal depth gracefully, people!) I suggest watching the video below and then following the Stripe docs page linked further down.
Two. Understand these jobs to be done before diving in.
One of the simpler Stripe instructions pages became my favourite. I’ll link it below. However, it still suffers from the “wall of text” problem, and as my setup doesn’t precisely mirror theirs so I had to adapt it on the fly and got a little lost sometimes. This was because I didn’t know why I was following each instruction. Before clicking the link understand the context: you will build two separate user flows. It is not all part of the one flow. That seems to be assumed knowledge on the page.
— (a) A checkout flow. This you telling the user you want them to pay, you sending them to Stripe, them entering their card details into Stripe, and Stripe sending them back to you with an id that you will save. This uses the
/create-checkout-session endpoint in their example code.
— (b) A subscription management flow. This is the user coming back at some random time later and wanting to edit or cancel their subscription in Stripe. You’ll need to give them a link to click. This uses the
/create-portal-session endpoint in their example code.
Prebuilt subscription page with Stripe Checkout
▗▄ ▄▟█ █▀▀ ▗▟████▙▖ ██████ ███▗▟█ ███ ███▗▟██▙▖ ▗▟█████▙▖ ███▖ ▀▀ ███ ███▀▀▀ ███ ███▀ ███ ███ ███ ▝▜████▙▖ ███ ███ ███…
Three. Keep it simple.
- Allow the user some free usage and only when they exceed it then direct them to the checkout flow for the first time. Don’t force the friction of payment before they’ve seen your product’s value.
- Simplify your “manage subscription” link for the case where the user has not yet subscribed by making it redirect to your checkout page.
- Keep your pricing structure simple. Learning how to drive Stripe is already enough work without adding optional complications. You’ll have to recreate your product & pricing at least once, when you switch from test mode to real mode, and you might need to edit it several times. Save yourself the hassle of complicated edits. Also, every customer wants pricing that is easy to understand — nobody hands over their hard-earned money without having a solid idea of how much they’re parting with.