page.title=Optimize Your App page.metaDescription=A look at how to get the most visibility and the highest ratings possible for your app or game. Optimizing the quality of your apps is a key strategy. page.image=/distribute/images/gp-optimize-card.jpg @jd:body <div id="qv-wrapper"> <div id="qv"> <h2>Strategies</h2> <ol> <li><a href="#listen-to-your-users">Listen to Your Users</a></li> <li><a href="#measuring-analyzing-responding">Measuring, Analyzing, and Responding to User Behavior</a></li> <li><a href="#improve-stability">Improve Stability and Eliminate Bugs</a></li> <li><a href="#improve-ui">Improve UI Responsiveness</a></li> <li><a href="#improve-usability">Improve Usability</a></li> <li><a href="#professional-appearance">Professional Appearance and Aesthetics</a></li> <li><a href="#deliver-features">Deliver the Right Set of Features</a></li> <li><a href="#integrate">Integrate with the System and Third-Party Apps</a></li> <li><a href="#related-resources">Related Resources</a></li> </ol> </div> </div> <div class="top-right-float"> <img src="{@docRoot}images/gp-optimize.png" class="quality-top-image" style= "width:239px;padding-left:1.5em;"> </div> <p> With thousands of new apps being published in Google Play every week, it's important to look for ways to get the most visibility and the highest ratings possible. Optimizing the quality of your apps is a key strategy. </p> <p> A higher quality app can translate to higher user ratings, generally better rankings, more downloads, and higher retention (longer install periods). High-quality apps are much more likely to get positive publicity, such as being featured in Google Play or generating social media buzz. </p> <p> The quality of your apps is something you should consider addressing both before and after launch. Gaining users after the launch of a poor quality app can be hard and recovering costly. On the other hand, maintaining the ranking of high-quality apps is made easier if there are continual improvements, a practice that also fuels the impression-install-ranking cycle. </p> <p> On this page you can find advice on a number of ways in which you can drive improvements to your apps’ quality. </p> <div class="headerLine"> <h2 id="listen-to-your-users"> Listen to Your Users </h2> </div> <div class="figure"> <img src="{@docRoot}images/gp-optimizing-chat-bubbles.png"> </div> <p> Listening and hearing your users can be one of your best tools for success. Start listening to your users before launching your apps and continue to listen after launch. </p> <h3> <strong>Listening before you launch</strong> </h3> <p> You can listen to your users during the development of your apps. This process can start with focus groups to review app features, continue into user experience workshops, and onto alpha and beta releases. Listening at these stages has two main benefits: <strong>you’ll build apps with features users want</strong> and <strong>any issues they identify will be cheaper and quicker to fix</strong> than they would be once the app is launched fully. </p> <p> If the practicalities of focus groups and user workshops seem excessive in relation to the development of a particular app, drawing on the feedback of colleagues, friends, and family can be much more useful than getting no feedback at all. </p> <p> It's crucial to conduct user testing before releasing your apps to Google Play. If you can only engage with colleagues, friends, and family you’re already making a good start. For more extensive testing consider a public alpha/beta test or creating your own trusted tester program. You can manage app distribution yourself through email or your own website, or you can use <a href= "{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">beta-testing</a> and <a href= "{@docRoot}distribute/googleplay/developer-console.html#staged-rollouts">staged rollouts</a> in conjunction with <a href= "http://www.google.com/+/business/">Google+</a> or <a href= "https://groups.google.com/forum/#!overview">Google Groups</a> to distribute software and gather feedback to a subset of users. <strong>Users on alpha or beta versions cannot leave reviews or ratings</strong>, so there is <strong>no risk to your rating</strong> on Google Play. </p> <p> Unless you have to, don’t restrict the users you involve in these stages in the information they can share through their social networks and blogs - users engaged in these early stages (and listened too) are likely to be great ambassadors for your apps and will help create great social media buzz. </p> <h3> Listening after launch </h3> <p> Once you have launched, the most obvious way to listen to users is by reading and addressing comments on Google Play. Although the comments aren't always productive or constructive, some will provide valuable insight on aspects of your apps. It's important to remember that users have the opportunity to change their ratings and comments as much as they like. </p> <p> There are more interactive ways you can reach users, help them address their concerns, and gather more detailed feedback: by setting up support and discussion forums. There are some great support tools out there that can put you in touch with your users directly, from forums such as <a href= "http://groups.google.com/">Google Groups</a> to comprehensive customer support products and tools like UserVoice. Once you get set up with such a tool, make sure to fill in the support link in your Google Play product details page — users do click through to these. </p> <p> Also don’t forget to use the <a href= "{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">beta-testing</a> and <a href= "{@docRoot}distribute/googleplay/developer-console.html#staged-rollouts">staged rollout</a> features of Google Play with app updates. </p> <div class="headerLine" id="measuring-analyzing-responding"> <h2> Measuring, Analyzing, and Responding to User Behavior </h2> </div> <div class="figure"> <img src="{@docRoot}images/gp-optimize-analytics.png"> </div> <p> One of the best ways to spot issues to resolve is by measuring user behavior. Optimizing your app becomes much easier when you analyze performance before and after you launch. Drop off points, low ratings, and high percent of uninstalls can be indicative that there’s a problem. Measuring and responding to user-related metrics such as download sources, retention rates, and in-app behavior regularly is critical to keeping and bringing back your hard earned user base. </p> <p> You can get data from tools in Google Play or third-parties to analyze user behavior. You can identify details such as: </p> <ul> <li> <p> Where installs are coming from. </p> </li> <li> <p> The types of users you are acquiring. </p> </li> <li> <p> What is causing user churn and how to reduce it. </p> </li> </ul> <h3> Statistics for analyzing installs and ratings </h3> <p> Once you’ve published your app, Google Play makes it easy to see how it’s doing. The <a href="https://play.google.com/apps/publish/">Developer Console</a> gives you access to a variety of anonymized statistics and custom charts that show you the app's installation performance and ratings. </p> <p> You can view data and charts for active, daily, and total installs per unique devices or users, as well as upgrades and uninstalls. You can also view the app's daily average user rating and its cumulative user rating. To help you analyze the data, you can view install and ratings statistics across a variety of different dimensions such as Android version, device, country, app version, and carrier. </p> <div> <img class="border-img" src="{@docRoot}images/gp-dc-stats-mini.png"> </div> <p> You can see your app statistics on timeline charts, for all metrics and dimensions. At a glance, the charts highlight your app’s installation and ratings peaks and longer-term trends, which you can correlate to promotions, app improvements, or other factors. You can even focus in on data inside a dimension by highlighting specific data points (such as individual platform versions or languages) on the timeline. </p> <p> You can download all of your installation data as a CSV file for viewing in the business program of your choice. </p> <h3> Tracking and analyzing Marketing campaigns </h3> <p> While you should consider monitoring user behavior data as a part of your normal activities, it’s particularly important when you’re running any form of marketing campaign, to make sure you’re getting the right users at the lowest cost possible. </p> <p> One way to track your marketing campaigns is to link <a href= "http://android-developers.blogspot.com/2013/10/improved-app-insight-by-linking-google.html"> Google Analytics with your Google Play account</a> to analyze activity from source to install. </p> <div style="margin-top:1em;"> <img src="{@docRoot}images/gp-optimizing-image-4.jpg" class="border-img"> </div> <p> You can also use any of the variety of tools on the market to help track your marketing success and improvement ROI if you wish. There are also third parties who can help automate, measure, and optimize your mobile marketing. </p> <div class="headerLine"> <h2 id="improve-stability"> Improve Stability and Eliminate Bugs </h2> </div> <p> There are many tools and techniques for testing and profiling your app on different devices and user scenarios. </p> <p> One noteworthy and yet relatively underused tool for catching stability issues such as crashes is the <a href= "{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> (Monkey). Monkey will send random UI events to your app's activities, allowing you to trigger user flows that can uncover stability problems. </p> <p> Also, with the Google error-reporting features built into most Android devices, users have a way to report application crashes to you. The error reports show up in aggregate in the Google Play Developer Console. Make sure to read these reports often and act on them appropriately. </p> <p> Last, keep an external bug and feature request tracker and let users know how to find it. This will enable them to engage with the app at a closer level, by following features and bugs that affect them. User frustration with app problems can be effectively managed with diligent issue tracking and communication. Several community support tools offer issue tracking features, and if your project is open source, most popular repository hosting sites offer this as well. </p> <div class="headerLine"> <h2 id="improve-ui"> Improve UI Responsiveness </h2> </div> <div class="figure"> <img src="{@docRoot}images/gp-optimize-speed.png"> </div> <p> One sure-fire way to lose your users is to give them a slow, unresponsive UI. Research has shown that <a href= "http://googleresearch.blogspot.com/2009/06/speed-matters.html">speed matters</a>, for any interface, on mobile, web, or desktop. In fact, the importance of speed is amplified on mobile devices since users often need their information on the go and in a hurry. </p> <p> You can improve your apps' UI responsiveness by moving long-running operations off the main thread to worker threads. Android offers built-in debugging facilities such as StrictMode for analyzing your app's performance and activities on the main thread. See more recommendations in <a href= "http://www.youtube.com/watch?v=c4znvD-7VDA">Writing Zippy Android Apps</a>, a developer session from Google I/O 2010. </p> <p> A great way to improve UI performance is to minimize the complexity of your layouts. If you open up <a href= "{@docRoot}tools/help/hierarchy-viewer.html">hierarchyviewer</a> and see that your layouts are more than 5 levels deep, it may be time to simplify your layout. Consider refactoring those deeply nested <a href= "{@docRoot}reference/android/widget/LinearLayout.html">LinearLayouts</a> into <a href="{@docRoot}guide/topics/ui/layout/relative.html">RelativeLayout</a>. The impact of View objects is cumulative — each one costs about 1 to 2 KB of memory, so large view hierarchies can be a recipe for disaster, causing frequent VM garbage collection passes which block the main (UI) thread. You can learn more from the Google I/O session <a href= "http://www.youtube.com/watch?v=wDBM6wVEO70">World of ListView</a>. </p> <p> Lastly, as pointed out in the blog post <a href= "http://android-developers.blogspot.com/2010/10/traceview-war-story.html">Traceview War Story</a>, tools like <a href= "{@docRoot}tools/help/traceview.html">traceview and ddms</a> can be your best friends in improving your app by profiling method calls and monitoring VM memory allocations, respectively. </p> <div class="headerLine"> <h2 id="improve-usability"> Improve Usability </h2> </div> <div class="sidebox-wrapper" style="float:right;"> <div class="sidebox"> <p> <strong>Tip:</strong> As you’re designing or evaluating your app's UI, make sure to read and become familiar with the <a href= "{@docRoot}design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process. </p> </div> </div> <p> In usability and in app design too, you should listen carefully to your users. Ask a handful of real Android device users (friends, family, etc.) to try out your app and observe them as they interact with it. Look for cases where they get confused, are unsure of how to proceed, or are surprised by certain behaviors. Minimize these cases by rethinking some of the interactions in your app. See the <a href= "{@docRoot}design/patterns/index.html">Patterns section</a> for tips to improve your design. </p> <p> In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density. </p> <p> Another way to incrementally improve usability, based on real-world data, is to implement <a href= "http://code.google.com/mobile/analytics/docs/">Analytics</a> throughout your app to log the use of particular sections. Consider demoting infrequently used sections to the overflow menu in the <a href= "{@docRoot}design/patterns/actionbar.html">Action bar</a>, or removing them altogether. For often-used sections and UI elements, make sure they're immediately obvious and easily accessible in your app's UI so that users can get to them quickly. </p> <div class="headerLine"> <h2 id="professional-appearance"> Professional Appearance and Aesthetics </h2> </div> <p> There's no substitute for a real user interface designer — ideally one who's well-versed in mobile and Android, and handy with both interaction and visual design. One popular venue to post openings for designers is <a href= "http://jobs.smashingmagazine.com/">jobs.smashingmagazine.com</a>, and leveraging social networks can also surface great talent. </p> <p> If you don't have the luxury of working with a UI designer, there are some ways in which you can improve your app's appearance yourself. You can use Adobe Photoshop, Adobe Fireworks, GIMP, Inkscape or other image editing tools. Mastering the art of the pixel in these apps takes time, but honing this skill can help build polish across your interface designs. Also, master the resources framework by studying the framework UI assets and layouts and reading through the <a href= "{@docRoot}guide/topics/resources/index.html">resources documentation</a>. Techniques such as 9-patches and resource directory qualifiers are somewhat unique to Android, and are crucial in building flexible yet aesthetic UIs. </p> <p> Before you get too far in designing your app and writing the code, make sure to visit the <a href="{@docRoot}design/index.html">Android Design section</a> and learn about the vision, the building blocks, and the tools of designing beautiful and inspiring user interfaces. </p> <div class="headerLine"> <h2 id="deliver-features"> Deliver the Right Set of Features </h2> </div> <p> Having the <em>right</em> set of features in your app is important. It's often easy to fall into the trap of feature-creep, building as much functionality into your app as possible. Providing instant gratification by immediately showing the most important or relevant information is crucial on mobile devices. Providing too much information can be as frustrating (or even more so) than not providing enough of it. </p> <p> Again, listen to your users by collecting and responding to feature requests. Be careful, though, to take feature requests with a grain of salt. Requests can be very useful in aggregate, to get a sense of what kinds of functionality you should be working on, but not every feature request needs to be implemented. </p> <div class="headerLine"> <h2 id="integrate"> Integrate with the System and Third-Party apps </h2> </div> <p> A great way to deliver a delightful user experience is to integrate tightly with the operating system. Features like <a href= "{@docRoot}guide/topics/appwidgets/index.html">Home screen widgets</a>, <a href="{@docRoot}design/patterns/notifications.html">rich notifications</a>, <a href="{@docRoot}guide/topics/search/index.html">global search integration</a>, and <a href= "{@docRoot}reference/android/widget/QuickContactBadge.html">Quick Contacts</a> are fairly low-hanging fruit in this regard. </p> <p> For some app categories, basic features like home screen widgets are expected. Not including them is a sure-fire way to tarnish an otherwise positive user experience. Some apps can achieve even tighter OS integration with Android's contacts, accounts, and sync APIs. </p> <p> Third-party integrations can provide even more user delight and give the user a feeling of device cohesiveness. It's also a really nice way of adding functionality to your app without writing any extra code (by leveraging other apps' functionality). For example, if you're creating a camera app, you can allow users to edit their photos in another app before saving them to their collection, if they have that third-party application installed. More information on this subject is available in the Android Training class <a href="{@docRoot}training/basics/intents/index.html">Interacting with Other Apps</a>. </p> <div class="headerLine"> <h2 id="related-resources">Related Resources</h2> </div> <div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/essentials/optimizing, tag:addia" data-sortOrder="-timestamp" data-cardSizes="6x3" data-maxResults="3"></div> <div class="resource-widget resource-flow-layout col-13" data-query="tag:adia" data-sortOrder="-timestamp" data-cardSizes="6x3" data-maxResults="3"></div>