Mobile apps have undeniably become the preferred mechanism for users to access various software services and products. With this shift in consumption preferences (from websites to mobile apps), it is incredibly important for developers to ensure that their apps perform well in the real world. Users tend to be very sensitive to app performance and can very quickly submit negative reviews about the app. App review scores have a direct impact on how easily an app can be discovered by new users. Negative app reviews have the power to completely derail an app\u2019s growth plans.\nDegrading app performance\nA degraded app performance can fall in one of the following categories\nLatency\nAn app has latency issues if it is slow to start up, download information or respond to service requests from users. This typically happens when an depends on cloud services to retrieve information or signals. However, this can also occur due to a combination of factors including lack of resources on the device, low-performance networks or connectivity and dependence on backend services that are unable to service requests with a high quality of service.\nLack of responsiveness\nLack of responsiveness issues in applications are often caused due to the app fighting for resources and competing with other applications running on the device. Lack of responsiveness can also be caused by the device itself struggling to continue operating as designed. Responsiveness can also decrease if the app code has bugs and errors that cause it to fail in the middle of processing and servicing user requests.\nCrashes and restarts\nThe most common cause for low-quality user experience on apps is crashes and\/or unexpected app restarts in the middle of an app session. Crashes and restarts are often caused due to low-quality code. However, attacks that exploit weaknesses in the code to either subvert the application experience, take over the application to carry out further attacks or access other services illegally can also cause the app to crash and restart.\nStale data\nAnother reason for suboptimal app experience is the display of stale data in the app. Applications, especially those that are built to deliver accurate, fresh and high-quality information to the user can easily lose user trust if the data that they display and deliver to the user is out of date, fresh or delivered with a lag. Stale data not only can annoy users but can critically impact the value that a user receives from an app. Often, this can lead to the app being uninstalled or abandoned.\nAggressive alerts & notifications\nAnother reason for undesirable app experiences is the generation of excessive and aggressive alerts and notifications. Apps often do not modulate and condense their alerts and can find themselves as being reported as noisy and being known to over alert and annoy users. This can also result in the app being abandoned or uninstalled. Aggressive alerting can also desensitize the user from the alerts ultimately reducing the value delivered to the user.\nTechniques to avoid building annoying applications\nOptimize app backend and chattiness\nDevelopers should ensure that their backends are scalable and prepared to deal with the volume of traffic. In addition, developers should ensure that the APIs they embed in their apps are not chatty. Chattiness refers to the tendency of a service to require multiple calls over a short period of time to service the same user request. Chattiness increases the load on a service without increasing the ability of the service to handle a larger number of requests.\nAdjust app behavior to environment\nDevelopers should take care to adapt their app\u2019s behavior to the operating environment. The environment of an app is a combination of factors including device type, available resources on the device, the network, the location, the time of usage and the type of user using the app. Building an adaptive app requires a design that judiciously adjusts resource consumption of the app to optimize the user experience.\nFor example, if an app is running on wifi or over 2G or 3G networks, it should reduce the frequency and size of data uploads and downloads. Similarly, an app that is competing for device resources should reduce its demand for resources from the device or its cloud backend till more resources have freed up on the device.\nIdentify and remove app crash root causes\nDevelopers should use app performance monitoring tools that are designed to track and monitor applications. These tools collect and analyze data about app crashes and errors. Crash reports can be collected through various APM platforms (such as this or this or this) with support for all major platforms including Android and iOS. Crash reports and application performance data is automatically collected and delivered to the developer through a cloud service enabling them to easily understand and debug app issues, configuration, and coding errors. Such services are required to not only identify code issues but can also detect malicious attempts to take over the app to carry out other attacks. Being able to detect and mitigate such attacks is incredibly important for building lasting user trust and adoption.