Go slow: how & why to test apps on poor connections

One of the recurring themes at OpenSignal is the staggering diversity of mobile experience. We see it in our Fragmentation Report on Android device models and in our Sensor Library.

Phrases like “mobile first”, “responsive” sweep this complexity beneath the carpet – they beg questions: on what mobile did you design first? to what does your design respond – just screen size, or also language & font size preferences, and inability to resolve IP to a location?

But what’s on my mind following our Global State of LTE report is data speeds. Even LTE, with its corresponding technological standards, provides a user experience that’s incredibly diverse – with average speeds ranging from around 3Mbps to 40Mbps. Hardly standard.

And LTE remains a luxurious technology. While most countries have it, most mobile users don’t. According to Ovum, Asia and Middle East have 20% and 7% LTE subscription penetration respectively. And even users who have an LTE subscription will only be able to use it some of the time. From our crowdsourced data we see several countries where LTE users will have an LTE connection less than 50% of the time.

That’s why this graph matters:

Screen Shot 2016-02-05 at 09.56.39

In many countries your apps will be used mostly on 3G and 2G. Explore our maps to get a feel for the speeds your users will be experiencing. And remember: these are average (mean) speeds – many users will be experiencing much slower connections.

As developers we’re fussy about our WiFi, ethernet and cellular connectivity. We fuss until it works well. The irony is, this removes us further from the experience many of our users are getting, the experience we should be designing for.

Facebook know this, it’s why they introduced 2G Tuesday, a move that is not only pleasantly alliterative and assonant, but brings them closer to their users worldwide. The WhatsApp founders didn’t carry old school Nokias out of a misplaced sense of retro-cool, but because they knew it’s how many experience their service.

Testing on slow speeds is not about testing edge cases, it’s about the everyday experience of hundreds of millions of mobile users worldwide.

And it’s easy.

There are a bunch of different tools you can use for different mobile platforms, but I’m going to give you a recipe that works for pretty much every device and is super simple.


  • A Mac
  • An ethernet connection, or any wired connection to your machine

We’ll use a tool called Network Link Conditioner to limit the bandwidth of a Mac, and we’ll share your Mac’s network connection using the wifi sharing feature. Done. You can now control the network speeds you get on your mobile device, whatever mobile device it is (as long as it has wifi).


  • If you don’t already have it (you may do if you have XCode), install “Hardware IO Tools for Xcode”, the official location is: https://developer.apple.com/downloads/ If you don’t have an apple developer account, some 3rd party sites have disk images (but I can’t vouch for them).
  • Install the Network Link Conditioner: once you’ve opened the disk image for Hardware IO Tools, double click Network Link Conditioner.prefPane, it installs in System Preferences.
  • Network Link Conditioner has a few presets (e.g. 3G, 100% loss) and you can roll your own to reflect the scenarios you want to test.
  • Also in System Preferences, go to Sharing and turn on Wifi Sharing.
  • With Wifi Sharing on, you computer should appear in the list of wifi hotspots in your device. Connect to it. To ensure all your traffic is routed through your computer, you may want to disable cellular connections (on Android you can do this by turning on Airplane mode and then turning back on Wifi) but generally this shouldn’t be necessary
  • Now your mobile device traffic is flowing through your computer and you’re in control of your network speeds (or at least you can limit them).
  • For bonus points you could turn on WireShark and see the requests your device is making; I prefer Stetho for more targeted network inspection.

The nice thing about this approach is that you don’t need to use the emulator to see bad speeds, you don’t need a rooted phone or a particular mobile OS version. It just works.

Screen Shot 2016-02-05 at 09.16.46Remember to turn it on

Screen Shot 2016-02-05 at 09.18.02Deter freeloading by naming the hotspot “I Steal Passwords” or “NSA_stingray(hidden)“. Alternatively, select “Wi-Fi Options” before turning on sharing to add a password.

I recommend playing around with reducing speeds to 0 (100% loss mode) midway through operations to simulate sudden drops in connectivity.

And that’s it, now you can experience your app just as many of your users do.

Related reading: UI design for empty states40 Developer Tips for Android Optimization

This entry was posted in Android Development, Connecting the World. Bookmark the permalink.

Leave a Reply