Forte turned two years old on June 1st, so I thought I’d share my journey and some of the mistakes I’ve made in the last two years of being an indie dev on the App Store.
I got the original idea for Forte some time in 2019 after breaking a ~50 day streak of daily meditation and feeling completely demotivated. The idea was for a habit tracker that would only track habits for two weeks, and then the data would disappear. I eventually realized this idea was way too niche, probably having an audience of just one, and settled on the scoring system Forte now has in lieu of streaks.
In January 2020, now back living with my parents and sleeping on a mattress on the floor of the office in their small, two bedroom home, I began working on Forte.
I wrote the first version of Forte in React Native. Coming from a background in web development, specifically React, React Native seemed like the obvious choice. I was able to get up and running after watching one YouTube tutorial and had the basic UI done in a week or two. The fun ended quickly. I spent a good chunk of development time dealing with all the pitfalls of React Native that many have covered before.
Would I use React Native again? No. I knew even before launch I would eventually learn native iOS development and rewrite Forte. Friends don’t let friends use React Native.
Inspired by the launch trailer Charlie Chapman made for his app, Dark Noise, I wanted to create a trailer of my own. I probably spent more than two weeks between scouring the internet for the perfect music to use and dealing with the constant crashes and limitations of the free version of DaVinci Resolve. It was not worth it.
At the time of writing, that video has a meager 69 views. Apple allowed the video on the App Store in the initial release, but rejected my first update because of it. That valuable time should have instead been spent on development and proper planning for the launch.
At the time, I at least knew if you were releasing a new product online, you had to launch it on Product Hunt. My understanding of launching on Product Hunt ended there. I filled out the product info and scheduled my launch for May 31, 2020 at 11:59pm PST 🤦🏻♂️
I had no clue the front page reset at midnight each day. Right off the bat, I felt as if I had doomed my app — the only thing I could think about for five months — to obscurity. I got less than 100 downloads from my Product Hunt launch. Just a few days later, though, I got over 500 downloads after making a Self-Promo Saturday (now Self-Promo Sunday*) on r/Apple and proceeded to have the best month for downloads and sales to this day.
I was ecstatic seeing the stats for Forte’s first month on the App Store. I didn’t have high expectations, so to have over 3,000 downloads blew my mind. The response was mostly positive and the feature requests were stacking up.
But the joy didn’t last long. Soon I was getting just 200 to 300 downloads per month and sales dwindled. By fall, I was wondering if it was worth even working on. The rapid decline in downloads and the daunting idea of expanding on my messy React Native code lead me to release only two feature updates for the next year and a half.
A few months before launch, I considered scrapping all of my code and starting from scratch, this time writing the app in Swift. One problem: I didn’t know Swift. It took me until January 2021 to actually start learning. I had made some half-assed attempts the previous summer to learn, but my heart wasn’t in it until I started 100 Days of SwiftUI in January.
I got a little over halfway through the course before I decided to just get started on Forte² and figure things out along the way. Things were going well until the end of May, when I discovered that tracking any habits over ~3 months old caused everything in the app to slow to a crawl. I was still so new to Swift and SwiftUI that I had no idea how to fix it, so I took a 3-month break instead 🤦🏻♂️
The Rewrite Continued
It wasn’t until September 2021 that development on Forte² starting moving again. The performance issues turned out to be a simple misunderstanding of multi-threading with Core Data. Once that was solved, I was back in action. With the core functionality of the app completed, I decided to tackle some user experience issues that had been there from day one.
Since launch, I had received a lot of praise for the design of Forte, but there was one component that drove dozens of emails to my inbox. Tapping on a checkbox would show a ‘Done, Skip, Fail’ popup that caused a great deal of confusion despite being explained in the onboarding.
I felt the buttons were self-explanatory, but clearly I was wrong. Instead of trying to clarify their functions in the onboarding and risking more support emails, I opted to remove the skip option and the popup entirely, leaving the standard checkbox that everyone understands.
There was still another, less obvious problem: checkboxes cluttered the habit list, up to 35 at a time. In the end, I think I found a nice balance by sacrificing the ease of checking off habits on previous days while still displaying that data to the user.
Changing Business Model
Forte launched as a freemium app with a one-time $4.99 in-app-purchase to unlock unlimited habits. I soon realized this was not a sustainable business model.
- I could be answering support emails and feature requests for users that paid $4.99 years ago.
- It incentivizes me to prioritize new user acquisition rather than build a good product for existing users.
I decided that on launch of Forte² I would switch to a subscription model (I wanted to do it sooner, but I’d rather lose out on money than touch my messy React Native codebase 🤮). In the meantime, I raised the price of the one-time unlock to $29.99, the price I would later set for the annual subscription option.
- Recurring revenue makes it way easier to justify spending my free time on development.
- Preventing churn requires me to build the features that users want.
- “Money = Good” – Curtis Herbert
It might still be too early to tell, but despite conversion rates being down about 50%, my monthly revenue is on average higher than before. I’ll give an update at the end of the year with more subscription stats.
Why did I do this again? Obviously I didn’t learn from the grueling process from the first one, so I spent even more time and money on this one. At least it got more views and I didn’t completely hate it a month later.
I’m never doing a video myself ever again.
I didn’t do much different this time other than scheduling it properly and also posting on r/Apple’s Self-Promo Sunday the same day. I made it to #2 Product of the day and was a Golden Kitty Awards 2021 semi-finalist in Health & Fitness.
I’ve had a few people reach out on Twitter for Product Hunt advice following this minor success, but I never know what to say because I didn’t really try 🤷🏻♂️
The Worst Possible Bug
Launch day was interrupted by multiple reports from existing users saying that their habits had disappeared. Everything worked perfectly during beta testing, but somewhere between then and launch I accidentally removed the line of code calling the function to import the old habits into Core Data. It was a simple fix, but I had to plead with App Review to get the bug fix out ASAP. Luckily, the update was out within 24 hours and the majority of existing users’ first experience with Forte² went exactly as planned.
The next day, I got up at 5am to drive across the country to surprise my girlfriend (she was visiting her mom for the holidays), all the while praying that there were no more disastrous bugs waiting to be discovered. At every stop for gas I was pulling out my phone to answer support emails, read reviews, and check App Store Connect and RevenueCat to see if I was now pulling in enough money to quit my day job. I wasn’t.
In the following weeks, subscriptions were slowly coming in. New Years wasn’t as big of a boost as it was the previous year and I ended January with only a handful of subscribers. The switch didn’t go as well as I’d hoped, but I wasn’t giving up yet.
Now five months later, my subscriber count has doubled, my keyword rankings are on the rise, and I’m adding new features somewhat regularly.
- Having a niche is great, but first make sure there is a market for it.
- Do your research and plan your launch, but don’t worry if you screw it up, big launches are overrated.
- Take breaks, but not for too long.
- Don’t waste time editing your own trailers.
- Switching business models isn’t as scary as it seems.
- Thoroughly bug test your app up to the last minute.
- Never use React Native.
- Never use React Native.
- Never use React Native.