This week was a special one for me. I finally managed to get the big HabitKit update out of the door. The most interesting change for users is that they can track multiple completions per day for their habits now. This was one of the most requested features and I hope people like it so far.
This update also includes a lot of changes to the underlying structure of the app:
I migrated the local database from Isar to Sqlite. This is a preparation for offering the ability to synchronize data across devices in the future. I will use PowerSync in combination with Supabase for this. It will be completely optional for the users, that's why I need to stick with an offline-first solution (which provides a better UX anyway)!
Prepared the database structure for the synchronization functionality (adding user IDs, setting up a remote Supabase database and already got a small POC working).
Refactored the structure of the ConsistencyGraph (the matrix of tiles for a habit you can see in the app). I was doing way too much work in the
build
method of the widget and now it shouldn't cause performance lags anymore.I wrote a lot of integration tests with Patrol. I tried to cover the basic user flows of the app, like creating/editing a habit, adding completions, showing the correct onboarding flow and streak calculation logic. This (hopefully) gives me the confidence to release new updates faster. I'm also planning to cover more use cases with future tests, but that will have to wait for a while
I also created an in-app event for the App Store to market the release as a "major update". Maybe this will generate some more impressions and make people choose my app over other habit trackers appearing in the search tab.
All in all, I'm pretty happy with this update. I got a lot of messages that people like it, a ton of new sales and a nice amount of impressions. I even made a post on LinkedIn (make sure to follow me there 😅) and it gained a lot of traction.
Shortly after releasing the update to the App Store and Google Play, I got a nice message from an engaged user who found a bug and I immediately fixed it and scheduled a hotfix (which was immediately reviewed and approved by Apple and Google yesterday). Apart from that, I didn't get any reports about crashes or performance problems.
Something new I tried with this release was "Phased Rollouts" on App Store Connect and the Google Play developer console. I started with Android and pushed the update to 20% of the current user base. After that, I slowly upped this number bit by bit and then started on iOS too. The problem on iOS with this feature: You have no control over when and to how many people your update will be pushed. You have to follow the (super slow) pre-defined schedule of Apple. Nevertheless, a great way to give yourself a little bit of peace of mind when releasing a big update.
Black Friday
In the chaos of app updates, beta testing, and bug squashing, something slipped off my radar this week - the Black Friday sale I actually planned. I already told myself last year that I wanted to do one, but - again - I didn't find the time for it. It was pretty hard to read about all the successful sales on Twitter / X and this missed opportunity is a setback. But there’s always another sale around the corner. For now, I'll keep refining HabitKit, and plan a big sale for (early) next year.
What's Next
The plan for the rest of the year is pretty clear:
Squash bugs and keep refining the user experience with small quality-of-life features.
Prepare a "Year-In-Review" feature which allows users to easily share their year`s progress and post it to social media.
Start working on refactoring the home screen widgets of the app. Many people request interactivity and more variance in the widget selection. So I will definitely tackle this feature soon.
That's it for this week 👋
PS: I got a lot of positive feedback after taking this blog post and posting it's content as a long-form X post. Will do it again this evening with this issue!