ANR’s are some of the most less understood phenomenon of Android development. This article let’s you know the ways to debug an ANR when you have no options left.

But first, What is an ANR and when does it occur?

Answer : It’s all about the UI/Main thread

The Android Developer website says that an ANR occurs,

  • While your activity is in the foreground, your app has not responded to an input event or BroadcastReceiver (such as key press or screen touch events) within 5 seconds

Almost every Android app would need to persist data. With this comes the challenge of choosing between various techniques of storing data. There are different ways of storing data in an Android app. And there is no single solution for all data storage requirements. This is where a data policy for your app can help maintain the health of the app as it scales.

There are a few questions that we need to ask ourselves when dealing with persistent data.

  • Type of data : What kind of data am I storing ? …

A narrative about my 10 years of experience developing on the Android Platform

How it all started?

Java Mobile Development :

It was during my Post Graduate(M.Tech in Information Technology — 2009) when I was first introduced to Mobile Application Development by my professor Navin from SRM University, India. The IDE was Eclipse. It was a surreal experience seeing a mobile simulator for the first time. The development platform was kindly called Java ME. Clicking the Play button on Eclipse and seeing the helloworld app run on a mobile simulator was the first spark which made me like Mobile Development.

How the devX team at Gojek runs CI for the humongous load of pipelines we encounter each day.

A few years ago, when Gojek was scaling internationally, at the forefront of the expansion was our consumer app used by millions of people across Southeast Asia. Needless to say, our engineering team was growing too, and we rapidly increased from 40 to 140+ Android and iOS engineers — all working on the #SuperApp.

Every line of code committed has to go through unit tests, code quality checks, regression tests and other routines to maintain high quality code… You know the drill.

A little bit of background, for the uninitiated

The moment a commit is pushed to the remote branch, a pipeline is triggered in the CI. The…

The background

As mobile teams scale, there are couple of challenges that come in the way. Some of those are

  1. Huge number of merge requests

Why we needed this?

  1. Developers need constant feedback in terms of their tech metrics. It would help developers to keep track of their tech metrices over a period of time and do a self evaluation of how their tech metrics have fared over time.

Mission objective :

Migrate redBus android app to Android X, and also to upgrade react native to use hermes engine.

AndroidX : AndroidX is a major improvement to the original Android Support Library, which is no longer maintained


  1. This would ensure that redBus app would be future ready to use the features that are to be shipped by Google in the future

How did we do this?

For fun, we decided to make this a military style operation which consisted of 3 stages

  1. Reconnaissance

Stage 1 : Reconnaisance


What makes a good commit?

When a fellow developer reads through the commits,the commit message should convey the information very clearly and quickly. The following things can be used —

  1. Why the commit is needed? Is it for a Bug fix? Or a feature? Or just a refactor?

A better commit template :

← Start of commit template →

[Fix/Feature/Refactor] : [Type commit title here]

[Type commit explaination here]

Tracking ID : [Type Tracking ID Here]

← End of commit template →

Example :

Recently at redBus we adopted In App Update feature.

This was done for the purpose of getting faster adoption of app updates. Faster adoption is very important for a couple of reasons,

  1. Users get to experience new features soon

A gentle nudge was introduced in the home screen to notify users that an update is available.

This is done in a non intrusive way, so that it does not disrupt the user experience.

Recently we started using Firebase Performance Monitoring in redBus Android App to get insights into app performance in different geographies.

Here is our experience

Incident 1 — Slow app load times in LATAM:

redBus app was loading slowly in Peru and Colombia when compared to other countries. We found this using App Start up times on On-Device metrics.

While looking into Firebase Performance Analytics for clues, we identified that it was an API that had a larger latency in Peru and Colombia that caused the slow load.

Analyzing sentiment of Playstore reviews gives a lot of insight into the issues in an App or the experience of the users. This is one of the many experiments we did at redBus to provide a better experience to our users.

We needed a quick and easy to use and deploy environment for this experiment. We needed the following components for this system to work.

  1. A sentiment analysis framework

Dinesh Shanmugam C

Engineer | Android | Manager | Developer Productivity

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store