blob: 696ef53a3621dbb7bfc211c430cb5b6c99cf20bc [file] [log] [blame]
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 youre
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, dont 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 dont 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 theres 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 youve published your app, Google Play makes it easy to see how its
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 apps 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, its particularly important when youre running any form
of marketing campaign, to make sure youre 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>