Why my app rating taking a hit might not be all bad news

Recently, I uploaded a new version of my shopping list app to Google Play. The code of the app has been re-written from scratch, and many features that people had repeatedly asked for, such as prices and drag & drop for reordering items, have been added to it. Along with a new, much-more-modern design, those extra features should not only help bring the app to the current day and age, but also improve its user experience. Or so I thought.

Why fix it when it ain’t broke?

It has been five years since I last updated the app, and many of its loyal users have very strong opinions about this unexpected, yet long-overdue update. And while a few of the new reviews have been positive, many of the users seem to be rightfully unhappy about a major change they did not ask for. Like one of the latest one-star reviews literally said: “why fix when it ain’t broke.”

Unfortunately, after years of inaction, numbers have been dropping both for the amount of active users and for the average rating, plus the app was targeting a very old version of Android and risking being eventually taken out of the store or removed from its listings because of that. Thus, releasing a new version of it was just a must at this point.

Personally, I’d like to think that the app is much better now, and that the only problem is that people just don’t like change. But whilst that might be true to some extent, I must also acknowledge and admit that maybe I failed to deliver – I tried to keep the user experience simple and unchanged on the main user paths, but it doesn’t seem like I did it well enough for some of my users.

The bright side

So, all things considered, what’s so good about having many angry users and the rating of my app at a historic low? The fact that I finished and released it!

For years, this app re-write has been my go-to whenever I would think about doing something productive with my spare time. At the same time, however, it has also been the project I have always been intermittently abandoning to my own personal shame. But not this time, not with the lockdown on my side.

Upon release, not only did I get a boost from the sense of accomplishment that usually emerges from the completion of a project, but I also had the opportunity to reflect on the development of this app, what I have gained from it and how much I have grown as a developer since I started working on it.

Updated the app, updated myself

Going back to this code I first started writing three years ago has made me realise how much my coding skills have improved in the recent years. You’d think that three years isn’t that much, but oh boy, was my code messy and disorganised just a couple of summers ago.

However, my reflection isn’t just about being a better developer in general, but also about being an Android developer who has caught up with the latest and greatest of the Android development world, which is a world that has changed drastically since AndroidX was announced in 2018. This is especially important for me because, as a Xamarin developer, I often fear that I will get out of touch with the native platform by focusing on Xamarin alone.

Luckily, this always-in-development app re-write of mine has served me as a playground app for years, acting as a testing area where I have been able to experiment with and try out many of the new tools and libraries that were being made available to Android developers. This approach has surely slowed down the development of the app, but reflecting back on it, it has definitely paid off.

A positive outcome

Apart from having an Android library with more than 300 stars on Github created as a spin-off of the app, this development has allowed me to learn about and use many new libraries, frameworks and technologies:

  • The application is written in Kotlin, a language I didn’t even know when I started its development, but that I can now read and write as well as C# or Java.
  • It is architected using MVVM, for which I am using ViewModel, Databinding and LiveData.
  • It uses the Navigation component to move between screens.
  • It stores local data using Room.
  • The injection of dependencies is managed with Kodein.
  • All heavy operations are handled asynchronously via coroutines.
  • The migration of the data from the old version of the app is done with WorkManager.
  • The settings screen is implemented using the Preference library.

That was a ton of new knowledge for me, and a very good way of keeping my Android skills up to date. And that is why, despite the rating drop, this has all been worth it.

Because I feel satisfied with the completion. Because I am pretty happy with my progress and my learnings. And because, above all, this development has been pretty fun!

Next stop: Flutter

The app is now finished and published, but it will definitely need some maintenance and attention if I want the ratings to go back up. In addition, my open-source libraries will need some love too. But along those, I also want to start new projects to keep on learning, and this time I will focus on Flutter, as it looks not only promising, but also very cool.

I am still undecided about the specifics, but I will make sure I come back here with another blogpost once I am finished wandering around the realms of Flutter.