Friday, July 3, 2015

What your users hate most - application crash

If you are using an Android phone for a while, you should be familiar with this error message "The application (process com.some.name) has stopped unexpectedly". If you are an Android app developer, I bet you spent a significant of amount of time looking at this message and then thinking what the hell has gone wrong this time. This is the generic message shown by the Android system when an application crashes.

By the time you must be thinking about the title of this post "What your users hate most - application crash" - What do I really mean? No one likes crashes. Actually many users dump an application as soon as it crashes. So what this post is all about? Let me share my story.

I have a small application in Google play - Ridmik Bangla Dictionary. It is an open source English to Bangla dictionary. It doesn't have a good number of words compared to other English to Bangla dictionaries, but because of its open source nature some other dictionaries are built using its source code. A good number of people are already using it - by the time I'm writing this post it has been downloaded about 400k times.

I developed it during my term final examination in Level 2 term 2. It took me about three days to develop it. I was in a hurry because my Electrical & Electronics examination was approaching. After finishing the coding, I tested it on two of my friends' phone - it was working. I also tested it in two different Android emulators - working fine. Finally, I tested it in another emulator for Nexus 7 - this time it crashed on the first run. I tried again and again, but every time it crashed as soon as I opened the app. I tried debugging the problem by analyzing the error log - it seemed that there is something wrong with the database. I was using a pre-built SQLite database, and as Android by default doesn't pre-built databases I have to use some third party codes to do it. Seemingly some tables necessary for bookkeeping wasn't being created, so the application was crashing on its first run.

I spent hours to find out why those tables were not being created but failed. The same app was working other emulators, but it was crashing on that one specific emulator. At last I gave up trying, thinking that there was something wrong with the emulator itself. Shortly after I published the app.

After publishing the app, I found out the application is not working on some phones. I collected the crash log from Google Play developer console - the app is crashing for the same reason, some tables in the database weren't being created. I didn't know how to solve this. I estimated the application isn't working in around 5% of the phones, and 5% user wouldn't be a big deal. So I left it there. Unfortunately, things are not so simple. Those users started coming back and giving low ratings. They have a good reason to do so, they downloaded an app, opened it and it just crashed - they should be angry. So the rating of my app started decreasing. From around 4.4 in the start, it went down to 4.02 in about eight months. Now I started worrying. With the trend continuing it was obvious that the rating was going to fall below 4.0. Generally I don't download an application with below 4 rating, how could I expect my users to do so?

So I came up with a simple solution. I wrote an exception handler so that if the database doesn't work properly, instead of crashing, the app will show you a simple dialog box with this message "Sorry, your phone doesn't support pre-built databases". Of course, then you can do nothing but exiting the app.

Well, some might consider it cheating but it worked. Here is the rating graph from Google Play over the years.


The ash colored double circle is the time when I published that update. Right before that the rating was close to 4.0. But after making the update the number of negative ratings started to decrease. In about four months, the rating went over 4.3. Now my app has an almost consistent rating of 4.4.

So developers, if you are getting lots of crash reports every day, and if you don't have enough time to fix those, don't forget to try this!

No comments:

Post a Comment