From a self-taught coder with no following.
Writing my first line of code at 32 years old felt like a bad start. I had put off learning to code for years, always getting side-tracked by work and other studies.
When I eventually got started, I enrolled in my first Udemy coding course, and I was hooked. If someone told me two years ago that I would be regularly going to bed early on a Friday night, so I could get up early to code, I wouldn’t have believed them 😂
The internal app to save 💰
In 2019, a friend and I started an exam-prep course in the mining industry as a side hustle, which by the end of that year had grown to $10k per month in revenue.
I was too cheap to pay for an internal flashcard app for our students, so this was my trigger to finally learn to code. I started off doing one hour per day, getting up early at 6am before my full-time day job 👨🏻💻.
Within the first four months, I completed three coding courses online; Android Basics with Udacity ($700) and two Udemy Flutter courses; this one (~$30) & also this one ($30). I got value from each course. However, with the power of hindsight, the Udemy Flutter courses were the most valuable for me. I started the Android Udacity course not knowing that Flutter existed, with every intention of building an Android app. In addition, whilst I loved that the Udacity course had a set structure with assignments, paying ~$800 was significantly more expensive than the Udemy courses ($30). In short — if I knew what I know now about the cross-platform Flutter, I wouldn’t have bothered with Android.
The main reason I was drawn to Flutter to build the flashcard app was to avoid learning seperate languages for iOS & Android apps. In the end, it took me three months to build the flashcard app, coding one to two hours per day, typically between 6am-8am before work.
To stay on track whilst building the flashcard app, I was logging my coding hours with a free Pomodoro timer app, then entering the times into an excel sheet to make the chart below. I would always have an “Actual vs. Target 🐛” chart, so I could see if I was ahead or behind.
The internal flashcard app was an easy introduction into coding. I learnt the skills of creating a basic app, using packages from other people, and the basics of using a Firebase database. There was no in-app purchases or social authentication to worry about.
I would recommend starting with a simple project like this, something you can complete in a few months at most. It makes it much less daunting and therefore decreases the urge to quit. Even if it doesn’t make money, it provides a great stepping stone to future apps.
As all coders will know, you will constantly be getting stuck. I was always watching YouTube videos and Googling bug-fixes until I found a solution which worked. I soon released this is coding 😂. I also soon realised it’s strangely addictive.
Late in 2019, I decided to add a Pomodoro study timer to the app for our students to track their study too. Making an accurate timer that doesn’t get put to “sleep” by the operating system was much harder than expected! 🤯 Building the study timer into the flashcard app for our students was the starting point on my journey to building a study app for the public.
My study app for the public 🎯
As with a lot of indie developers, my public app was built out of the desire to ‘scratch my own itch’. There were a few features that I was searching for that no other public study/focus timer app had, specifically the ‘Actual vs. Target 🐛’ charts.
By early 2020 I had a strong desire to make my own public study/focus app, using the coding skills I had learnt building the internal app. But I talked myself out of it. I would tell myself, “the market is too small” or “you need to make a bigger impact.”
It wasn’t until I started listening to the Indie Hackers Podcast that I released that being small is ok. It’s ok to work on small projects that you are passionate about. They won’t make a billion dollars, or even a million dollars, but that’s ok. I realised that if I could make any money each month purely from an app I had coded, I would be stoked! Making money from an app compared to a professional service you sell in real life seemed so much harder. Making even $1 from a mobile app seemed like it would be tough, but I decided to give it a go.
On the 1st of December 2020, I finally started coding my own perfect study/focus app. I wanted to have the “Actual vs. Target” charts like in my dodgy excel sheet. I also wanted seperate activity profiles and target graphs for my coding and other exam-prep company time.
It was so fun building the first version of the app! There were so many skills that I picked up. Skills like in-app subscriptions, social authentication, more animations & making a website with WebFlow.
Social authentication is tough! The FlutterFire docs helped a lot. I had many highs and lows (including Android Google auth working in development but not when it arrived to the Play Store!). I’ll share these learnings soon in another article.
For in-app purchases, I burnt a week trying to get the In_App_Purchase package working well. I ended up switching to RevenueCat, which is incredible for in-app subscriptions & is free up to $10k MRR! But that’s also an article for another day.
You might be wondering where the name and theme of the app came from. Well, embarrassingly, I have become obsessed with Space-X and space over the last couple of years. So I decided to make the app slightly space themed. As a nod the Milky Way Galaxy that we live in, I decided to call the app Milki. The domain was available, which it turns out was very fortunate! Whilst I was building the app, 3 different people contacted me to buy the domain, I said no to a $500 offer. I was too committed at that stage (plus I love space) 🙅🏻♂️
Launching Milki 📱
When I was almost ready to launch Milki, I put the app on the App Store and Google Play store for pre-order. This was about a month before I intended to release it. I got around 60 pre-orders with iOS, but not many with Android. I hadn’t done any marketing beside making a twitter account for the app and tweeting that it was available for pre-order (I currently know nothing about Twitter and have almost no followers, this is on the list for 2021).
I learnt a fair bit about App Store Optimization (ASO) by doing another Udemy course and watching about 50 AppRadar YouTube videos. I ended up signing up to AppRadar for $40 per month, but I must admit while it pained me to pay the money, it seems to be worth it to be able to track my keyword performance over time. My App Store ranking for “Study Timer” is around 28th in Australia (my home country) and ~70th in the USA. My goal is to make the top 10 for USA. I really don’t want to pay for advertising, so I will optimise for store rankings!
After a fair bit of research and comparison — I settled on an annual subscription business model for Milki. It is USD$30 for the first year, then $60 per year after that. Admittedly, this is more than I was initially planning to charge, but with the unique features and such niche nature of the app, I decided on that price. I believe that apps which take months to build, are well made, have no ads and are getting continuously improved, should cost a fair price to use.
I published the iOS version of Milki.app on the 14th of March and to my surprise I got a sale in the first day 🎉! I released the Android version a few days after iOS, but it’s much tougher to get android sales! So far, I have only done a soft launch — I haven’t released it on Product Hunt or any platforms yet.
I honestly thought there was a high chance Milki would get zero paid subscribers and that the app would be lost in the sea of other study timer apps. Although I have got a few customers, I am worried the revenue will now die off. To try and avoid that, I will be continuously improving the app, working on app store rankings and learning marketing skills to give it a chance at growing!
What’s next? 🚀
My goal is to make a living with Flutter apps. From Milki and others including planned B2B Flutter web apps. I haven’t done any coding work for other companies and I don’t intend to. I want to build my own ideas.
Also, feel free to follow me on Twitter (I’m new to Twitter by the way!).