A few years ago I built a payment system for Google Forms as a side business (made about $3k from it before eventually turning it off to focus on other things). I'd found a problem nobody was actually solving and wanted to see if they'd be willing to pay to solve it. Like many of us I also had a bunch of partly finished projects that were never released, so I knew it could be a struggle to ship things.
What I ended up doing was writing a list of all the features that I wasn't going to work on, and all the compromises I was going to make to get something out there. Some of those compromises really hurt when I was writing them down, but didn't end up mattering enough to change them for over a year. Once I had them on the list, it gave me permission not to thing about them while I implemented the rest.
I also staged the development to avoid anything unnecessary if it flopped. For revenue, the idea was that I'd get a card on file from you, then bill it each month. But I launched the thing with no integration at all for the card on file. My plan was to give people a 14 day free trial, and if anyone actually used it in that time I'd use the time to build a card acceptance flow using Square (their API is like Stripe's). It turns out people did find and use it, and I had to extend the trial a bit, but eventually built the form. Then I had until the first of the next month to build the system to total up their bill (based on usage) and charge the card on file using the rest of Square's API.
I also didn't build anything at all for scheduling account lifecycle events. I used varmail.me (a little thing I wrote forever ago) to have my app email me when someone signed up, and check my inbox a couple times daily and send a canned welcome message to any new users. Then I'd write an email reminding me user X's trial expired, set myself as the recipient, and use Gmail scheduled messages to schedule it 14 days in the future. When I got that email I'd check if they're still using the product, send them a reminder to put in their card on file, and manually mark their account as inactive until they enter a form of payment. Billing jobs were run manually by me on my laptop for a while. Over time I got more users and it was worth the effort to replace these manual processes with automated ones. If nobody had used my product, it wouldn't have been worth the effort to automate any of this.
Testing was another thing I experimented with doing differently. At first I tested everything manually. Automating tests was difficult anyway because the key flow redirects through PayPal, and there were parts written in Google Apps Script. Eventually I built an end-to-end selenium test. Then I started adding unit tests where appropriate. Basically my principle was that I added automated tests to any area where I felt uneasy about making changes for fear of breaking something. Since I'm fairly risk-averse, the product was small, and I worked on it solo, this worked well for me.
What I ended up doing was writing a list of all the features that I wasn't going to work on, and all the compromises I was going to make to get something out there. Some of those compromises really hurt when I was writing them down, but didn't end up mattering enough to change them for over a year. Once I had them on the list, it gave me permission not to thing about them while I implemented the rest.
I also staged the development to avoid anything unnecessary if it flopped. For revenue, the idea was that I'd get a card on file from you, then bill it each month. But I launched the thing with no integration at all for the card on file. My plan was to give people a 14 day free trial, and if anyone actually used it in that time I'd use the time to build a card acceptance flow using Square (their API is like Stripe's). It turns out people did find and use it, and I had to extend the trial a bit, but eventually built the form. Then I had until the first of the next month to build the system to total up their bill (based on usage) and charge the card on file using the rest of Square's API.
I also didn't build anything at all for scheduling account lifecycle events. I used varmail.me (a little thing I wrote forever ago) to have my app email me when someone signed up, and check my inbox a couple times daily and send a canned welcome message to any new users. Then I'd write an email reminding me user X's trial expired, set myself as the recipient, and use Gmail scheduled messages to schedule it 14 days in the future. When I got that email I'd check if they're still using the product, send them a reminder to put in their card on file, and manually mark their account as inactive until they enter a form of payment. Billing jobs were run manually by me on my laptop for a while. Over time I got more users and it was worth the effort to replace these manual processes with automated ones. If nobody had used my product, it wouldn't have been worth the effort to automate any of this.
Testing was another thing I experimented with doing differently. At first I tested everything manually. Automating tests was difficult anyway because the key flow redirects through PayPal, and there were parts written in Google Apps Script. Eventually I built an end-to-end selenium test. Then I started adding unit tests where appropriate. Basically my principle was that I added automated tests to any area where I felt uneasy about making changes for fear of breaking something. Since I'm fairly risk-averse, the product was small, and I worked on it solo, this worked well for me.