The Road To Crash Free Nirvana

| by Yohay Barsky

Rounds is experiencing tremendous growth these days, and we can’t afford for a single crash to slip through our defenses. This is why we relentlessly fight crashes and proudly provide a 99.8% “user crash free” Android app (according to “Answers by Crashlytics”) . How do we do this? Well, in addition to our rigorous testing process, we implement many best practices to ensure our stability. In this blog post, we’d like to share some of our tips and tricks to help you get on the road to a crash free Nirvana.

  1. Rounds Android app supports more than 4000 different devices. We can’t test all of these devices so we always test locally on the most popular devices (Samsung S2/S3/S4/S5, HTC One, Nexus 4 and 5 etc.) and on at least one device from each major Android manufacture (Motorola, LG, Sony). This provides good basic coverage that helps us catch vendor specific crashes.

  2. Local testing is not enough and even a test service such as can’t provide full coverage of all devices, this is why we always use roll out releases. We usually start with 10% rollout, we wait 1-2 days and gather the frequent crashes from a wide range of devices. Any frequent crashes are quickly fixed and usually 1-3 days later a new and improved version is uploaded. If the version is indeed crash free we simply increase the percentage to a full release.

  3. We rely heavily on Crashlytics crash report service, that helps us check and prioritize frequent crashes on a daily basis. Here are a few tricks that further help us pinpoint exact crash causes.

  4. a. As part of our UI analytics report utility we have added calls to Crashlytics.log(msg). This way we get all UI analytics that happened just before the crash and we can determine the exact UI sequence that lead to the crash effortlessly. This small change helped us many times in pinpointing and reproducing elusive crashes.

    b. If we still do not have enough information and are not sure of the exact cause of a crash, we add custom keys to Crashlytics (Crashlytics.setString(“key”, “value”) with incriminating info about what happened just before the crash occurred. We get this additional info on the next round of crash reports, and on that round we have more evidence that helps us find the solution and fix it.

Providing a crash free app required testing, debugging, code reviewing, crash monitoring, careful release rollouts and a lot of team effort. The end result is totally worth it and I’m sure that our app robustness is a crucial factor of our success.

We hope this helped.

Good Luck and Happy Rounding!


Have something to say?