Proprietary + Confidential
App user experience reportPowered by HeadSpin
@google.com
Proprietary + Confidential
We tested your app through 10 iterations on key devices
Device class BudgetMoto E2 like OS version: 5
New YorkAT&T<$200
Mid RangeLG Nexus 5x likeOS version: 7.1
New YorkAT&T$200 - $500
High EndSamsung S8 likeOS version: 7.1
New YorkSprint$500+
App penetration on device
XX% XX% XX% HeadSpin Console
Proprietary + ConfidentialProprietary + Confidential
App Startup
Proprietary + ConfidentialProprietary + Confidential
Your app takes ~6.32s before a user can interact (TTI)
Budget Mid Range High end
Fixing these issues could improve your TTI by 3,800 ms
Client side
View in HeadSpin Console
eBay app requests to three servers:1. Mobidcs.ebay.com2. Apisd.ebay.com3. svcs.ebay.com
These requests are made sequentially. Parallelizing the requests will boost the startup time significantly
Proprietary + ConfidentialProprietary + Confidential
How eBay compares to peers on Time To Usable UIClient side
Rank App TTI
1 Target 4900
2 Ebay 6320
3com.alibaba.aliexpresshd 8500
4 Walmart 11520
5 com.contextlogic.wish 11778
6 com.offerup 12795
7com.amazon.mShop.android.shopping 13400
8 com.groupon 13440
Rank App TTI
1 Target 1,840
2com.alibaba.aliexpresshd 2,280
3 Ebay 2,500
4com.amazon.mShop.android.shopping 3,280
5 Walmart 3,960
6 com.contextlogic.wish 4,660
7 com.offerup 7,242
8 com.groupon 9,600
Rank App TTI
1 Ebay 1,100
2 Walmart 1,360
3 Target 1,500
4 com.alibaba.aliexpresshd 1,900
5com.amazon.mShop.android.shopping 2,680
6 com.contextlogic.wish 3,374
7 com.offerup 3,840
8 com.groupon 9,400
Budget Mid Range High End
Focus on improving performance on budget and mid range devices (80% market share)
Proprietary + ConfidentialProprietary + ConfidentialeBay App’s TTI (Usable UI) vs similar apps in key marketsBased on metrics captured on a Samsung S7 on cellular connection
App United Kingdom Germany Australia India Brazil
eBay 5.88 16.32 30 14 8.36
Amazon 7.64 21.88 2.84 6 10.76
AliExpress 6.12 7.4 8.16 10.84 24.4
Wish 4 7.5 3 9.1 12.4
OfferUp 3.9 5.8 1.3 3 5.2
Walmart 8.5 9.16 7.8 7.9 28
Target 2.12 3.16 1.24 3.8 1.2
Groupon 11.84 3 4.56 2.76 10.96
SnapDeal N/A N/A N/A FAILS N/A
Proprietary + ConfidentialProprietary + ConfidentialeBay App fails to load in India ~ 50% of the times
View in HeadSpin Console
eBay API Server “api.ebay.com” resolves to 66.211.179.150
This Server is located in North America.
It takes > 1.2 seconds to create a TCP + TLS connection from a device in India
Proprietary + ConfidentialProprietary + ConfidentialYour app takes 4.7s for a cold startup 2.5s higher than the max recommended time
Top issues causing slowdowns
UI Blocked Method
133 ms SearchResultFragmentActivity.onCreate
Hung CPU methodsHung methods make the UI lag and become unresponsive to the user for longer than 32ms. Methods reported here are doing so because they are using the CPU during this time.
Hot methodsA hot method takes more than 100ms of total app CPU time to execute all its calls.
Total CPU Time
Calls Method
636 ms 40 ReflectiveTypeAdapterFactory.getBoundFields
DependenciesSometimes dependencies you include in your app may affect performance. Below are the ones that are significantly impacting performance.
CPU Time SDK Name
751 ms GSON
Client side server
View in HeadSpin Console
Proprietary + ConfidentialProprietary + Confidential
APK Size
Proprietary + ConfidentialProprietary + Confidential
Reducing your APK size increases the likelihood users will install and keep your app on their device
Given your app is 36 MB, users on..
.. WiFi (5 Mbps) will wait 45.2s
.. 3G (1.6 Mbps) will wait 120.4s
.. 2G (150 Kbps) will wait +8 minutes (timed out)
Case study published on Medium showed every 6 MB increase to an APK’s size decreases install conversion by 1%.
Proprietary + ConfidentialProprietary + Confidential
You can reduce your APK size from 33.8 MB to 10.8 MB
36
Current APK size
19
*Estimated APK size
Benefits of having a smaller APK
Instant apps/App Bundles?
Large files (>0.10 MB):classes.dex (3 MB)resources.arsc (1.73 MB)META-INF/CERT.SF (0.26 MB)META-INF/MANIFEST.MF (0.25 MB)res/drawable-xxxhdpi-v4/download_pulse_bg.jpg (0.17 MB)res/drawable-xhdpi-v4/bg_instay_rating.jpg (0.16 MB)lib/armeabi-v7a/libmapgraph.so (0.15 MB)res/drawable-xxhdpi-v4/where_to_next_photo.jpg (0.14 MB)res/drawable-xxxhdpi-v4/login_background_image.webp (0.12 MB)assets/fonts/booking-iconset-Regular.ttf (0.11 MB)
16.57
4.25
1.36
Optimize config files
Proguard
Images to webp
*Please note that these numbers are just estimates, as we do not have access to your codebase.
Proprietary + ConfidentialProprietary + Confidential
Battery usage
Proprietary + ConfidentialProprietary + Confidential
Merge network requests to reduce radio wakeups
Off
Dormant
Send
Snd/Rcv
Lack of connection reuse, excessive new connections due to several Third party APK/SDK causes the mobile radio to be mostly Active and never IDLE.
Proprietary + ConfidentialProprietary + Confidential
eBay App High Resource Usage - Samsung S8, AT&T
The Radio State is always between SEND and SND/RECV State, i.e. the Radio never IDLEs.
CPU Usage is also quite high on all the cores.
Both the above result in significantly high battery consumption
● eBay app consumed 14% battery power around 10 mins of use with min screen brightness when tested on a Samsung S8.
Mobile Data State Mobile Data State 4.556035684GPU Load GPU Load [%] 4.528411568CPU Load CPU Load [%] 53.37363755CPU Load (Normalized) CPU Load [%] 21.48408662CPU1 Load CPU Load [%] 55.0697573CPU2 Load CPU Load [%] 48.92951606CPU3 Load CPU Load [%] 30.56183694CPU4 Load CPU Load [%] 24.00595844
Proprietary + ConfidentialProprietary + Confidential
eBay High Resource Usage Regions - Samsung S8, AT&T
● Memory usage increases by ~ 35 MB during app launch
● High Disk activity during search
Proprietary + ConfidentialProprietary + Confidential
Progressive loading
Proprietary + ConfidentialProprietary + Confidential
We recommend using Volley to handle your Http requests. Volley offers the following benefits:
● Automatic scheduling of network requests.
● Multiple concurrent network connections.
● Transparent disk and memory response caching with standard HTTP cache coherence.
● Support for request prioritization.
● Cancellation request API. You can cancel a single request, or you can set blocks or scopes of requests to cancel.
● Ease of customization, for example, for retry and backoff.
● Strong ordering that makes it easy to correctly populate your UI with data fetched asynchronously from the network.
Images take 3-4s to load as you load and scrollYour code indicates you are using a framework called Nautilus
./com/ebay/nautilus/kernel/dagger/DaggerKernelComponent$RequestSubcomponentImpl.java:import com.ebay.nautilus.kernel.net.HttpUrlConnectionFactory;
./com/ebay/nautilus/kernel/dagger/DaggerKernelComponent$RequestSubcomponentImpl.java:import com.ebay.nautilus.kernel.net.RequestControllerHttpUrlConnection;
Proprietary + ConfidentialProprietary + Confidential
Images take 3-4s to load as you load and scroll
View in HeadSpin Console
Proprietary + ConfidentialProprietary + Confidential
Permissions
Proprietary + ConfidentialProprietary + Confidential
Consider removing excessive permissions
Permissions Protection level Recommendations
WAKE_LOCK Normal You could minimize the impact of your app on system
resources by using alternative approaches to keep the
screen and CPU awake
SET_ALARM Normal You probably don’t need permissions to set an alarm for the user
Excessive permissions may discourage users from installing your app.
Proprietary + ConfidentialProprietary + Confidential
Search execution time
Proprietary + ConfidentialProprietary + Confidential
Optimize your search queries - Slow API/CDN Requests
Budget Mid Range High end ● Item search time takes ~ 6.32 seconds
● The search API Call alone takes ~ 2.16 seconds to respond
● Creating new TLS/TCP Connects to the CDN takes ~ 470ms
● Fixing the above two will reduce search time to ~ 2.9 seconds or lower
View in HeadSpin Console
Proprietary + ConfidentialProprietary + Confidential
Slow API calls impacting Search timesSearch API call takes > 2 seconds to respond
Http POST to https://apisd.ebay.com/search/v2
Proprietary + ConfidentialProprietary + Confidential
CDN Connectivity Time is too High!Time to create a new TCP/TLS Connect is ~ 470ms
● Image are hosted and served out of Akamai
● Images are in WEBP format, small sized. Download and render fast
● But TCP/TLS Connect time impact the image loading experience
● Recommend re-using the existing TCP/TLS Connections for new Https requests
Proprietary + ConfidentialProprietary + Confidential
Time to Checkout
Proprietary + ConfidentialProprietary + Confidential
Your app take 2-3s to get to checkout page
eBay Wish AliExpress
Proprietary + ConfidentialProprietary + Confidential
How eBay compares to peers on Time To Checkout
Rank App Time to Checkout (ms)
1 Groupon 700
2 AliExpress 850
3 OfferUp 1324
4 Wish 1700
5 eBay 2040
6 Amazon 2160
7 Walmart 5000
8 Target 11440
Rank App Time to Checkout (ms)
1 Wish 500
2 Amazon 650
3 OfferUp 800
4 eBay 900
5 AliExpress 920
6 Walmart 1200
7 Groupon 1863
8 Target 7960
Rank App Time to Checkout (ms)
1 eBay 320
2 OfferUp 400
3 Amazon 500
4 Walmart 580
5 AliExpress 800
6 Groupon 1100
7 Wish 1800
8 Target 5840
Budget Mid Range High End
Focus on improving performance on budget and mid range devices (80% market share)
Proprietary + ConfidentialProprietary + Confidential
Slow 3p Requests
Proprietary + ConfidentialProprietary + Confidential
DoubleClick downloads large sized JPEG’sThese images take > 1 second to download!
https://s0.doubleclick.net/8878992/2-Urgent_Branded_Image.jpg
View in HeadSpin Console
3P Domain Sharding Problem
Proprietary + ConfidentialProprietary + Confidential
8 third party domains and 18+ servers accessed!
Excessive third party requests and SDKs
View in HeadSpin Console
Proprietary + ConfidentialProprietary + Confidential
Summary of recommendations
Proprietary + ConfidentialProprietary + Confidential
Recommendation Summary
● Requests to the API servers must be parallelized to speed up startup time by ~ 60%● Optimize your App Startup time in Germany, Australia and Mexico● Apps fails to load in India ~ 50% of the times● Fixing HOT Methods can reduce Cold Startup Times by ~ 25%● Implement config APKs, Proguard and image optimizations to reduce the size of your
apk
● Merge multiple network requests to reduce latency and make your app battery
utilization more efficient
● Consider using Volley library to handle API requests as it better handles
synchronization between concurrent network connections
● Fix Search API Call and reusing CDN TCP/TLS Connections will boost Search time by ~
40%
● Remove unwanted permissions - wakelock and set alarm
● Third Party SDK/API must be reduced to eliminate poor UX issues
Proprietary + ConfidentialProprietary + Confidential
HeadSpin Console
Proprietary + ConfidentialProprietary + Confidential
Proprietary + ConfidentialProprietary + Confidential
Proprietary + ConfidentialProprietary + Confidential
Thank you!
Run more Performance and User Experience tests on HeadSpin