Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.
Using BugSense Analytics for bug tracking on Windows Phone
This article talks about BugSense, an analytical tool that you can embed in Windows Phone apps, which at the very least, tracks any handled and un-handled exceptions that raised in your app.
You have spent the past couple of months developing your app, it's feature rich and you've made a conscious effort to ensure that it stand out from the other me too apps in the store competing within your app category and demographics?
Developing apps for the mobile platform introduces a multitude of challenges; you are restricted to a limited memory resource to play with, especially with low end handsets, you have to be mindful of major and minor versions of the operating system and what features are supported; specifically on windows phone, there is the issue of restricted localized features, for instance, most speech recognition API’s are supported in only a handful of languages.
Improving the quality of your app
How do you improve your mobile engagement experience by ensuring that your app users consistently have a glitch free session when your app is launched? Despite taking a TDD approach in your latest app update, how do you ensure that the release hasn’t introduced new bugs which have silently crept in as a result of the update?
And here is where a good analytics tool should play a role. I’ve had a play around extensively with 3 analytical tools in the past few months or so and have now finally decided to use BugSense as my sole analytical platform. I’ll save the feature comparison for another post. So, very briefly, what is BugSense?
BugSense is an analytical tool that you embed in your windows phone and windows 8 apps, which at the very least, tracks any handled and un-handled exceptions that raised in your app. You can install it via nugget and it literally takes less than two minutes to get going. To get started with embedding the free version of BugSense in your app, visit the windows phone 8 documentation sections
Reasons why you might find BugSense useful
What sort of insight does a useful analytical tool such as BugSense give us and how can we find it useful?
1. Get visibility on any handled and un-handled exceptions thrown during an app session The bread and butter of any analytics tool really. We've all being there, you receive a support email from your app user, the app has crashed on them on a multitude of sessions, and the user feedback just says, Your app crashes every time I search. Such feedback does not provide enough visibility into why the crash occurred. Other contributing factors, in addition to a buggy app release could be hardware, phone OS version, firmware or network connectivity related. You are unlikely to get to repro a very complex crash scenario without a proper exception stack trace.
Take the unhandled exception Unable to delete file in screenshot below as an example. This exception was thrown in one of my apps on an intermittent basis. I was able to quickly establish that the exception was thrown as a result of not properly closing an image stream in my SaveImage method, causing the OS to lock the file when read from the isolated storage container.
2. Get visibility on which bugs should be prioritised for fixing (Issue Triage) Most indie app developers such as myself primary work on our apps on a part time basis. A good prioritisation strategy into improving the stability of your app is to prioritise the bugs that are more wide spread, working your way down to the least occurring bugs as you get more development capacity to spare. With BugSense, you can easily establish how frequently an exception is thrown from the dashboard. A clear exception to this approach are situations when the reported exception could have security implications, finding the right balance is also key. As you can see in my screenshot below, I have prioritised fixing the error 'unable to delete file' over 'Tiles can only be created ….' as I regard the later as an edge case which has only affected two users as of present.
3. Measure the relative quality of your app releases You always run the risk of introducing new bugs when you add new features to your app. As a matter of fact, a new bug could also be introduced when you fix old ones. To measure the quality of your latest release, BugSense introduces a unique concept called 'Mobdex'. To ensure that you get the most out of this feature, have a version increment system in place and ensure that your latest app submission to the app store includes your new version number.
4. Measure your pre-defined user engagement metrics for a feature In addition to logging both handled and un-handled exceptions, you can also perform custom events login with BugSense. This is particularly useful in scenarios when you wish to establish how often users click on a button. In the screenshot below, I felt that the amount of Call-To-Action (CTA) buttons on the page was excessive, hence it was paramount for me that I established if users actually clicked on the “Share” icon. To have the event logged within BugSense, all I had to do was create a custom event hook.
private async Task ShareEventAction()
// Log the icon click asynchronously.
//Do other stuff.
5. Get vital stats such as average app memory usage, popular OS versions and devices, app geographical distribution and retention rate Again, as a prioritisation strategy, you may wish to gain an understanding into what versions of the OS you should be supporting with new features. Localization support can get very unwieldy with every app update if you do not chose very carefully which countries to localize for. I’m starting to see a trend in my apps where countries such as India, Finland and Vietnam are registering some serious download counts. With BugSense, you can quickly establish which countries you should possibly provide a good language localization support for. I was able to deduce that the average memory usage when a crash occurs in my app was about 150MB. Granted, it is an Image intensive app, I do however realise that I could be running the app maximum allowed memory usage issue if I do not optimize the code somehow.
6. Windows phone is not treated as a second class citizen on the platform Without reverting to naming (and shaming) some other mobile analytics providers, I just get the feeling that the Windows phone platform on BugSense is actively supported and maintains an acceptable parity with features available for other platforms such as iOS and Android. You can be fairly confident that you will not waiting for months to use new core features on the service when they are released. It’s good to see a company who value their customers.
I would like to know what your thoughts are and your general experience with using any Analytics tool within your app.