I am building an android app to be used in rural areas (Saharan Africa, waaaay off the grid). The mobile app pulls down maps and map info from a server, uses the data, creates some new data (takes pictures, records GPS coordinates, etc), and then sends the data back to the server. We've done our best to allow full function offline and to coordinate upload attempts with a network listener.
In August, we have a client who wants to roll this out to 1000 field workers in one shot, in rural Ghana. I'd like to hear thoughts about best practices for testing online-offline-poor connection systems as well as other thoughts regarding systems built to function in rural areas.
Also, I'm worried about rolling a system out to 1000 users at once. Suggestions for testing scalability?

  • An easier way to test a mobile device in a location with no signal than traveling to a remote area would be a Faraday cage, if you can get access to one. – c32hedge Jun 25 '19 at 13:20

You could synthize the network conditions of Ghana using a wan emulator.

This is a system that purposefully degrades a network connection to a known profile you route parts of you application through then request. It will be controllable via an API that tests can use.

This can be a device with lots of network cards or a VM based appliance. The devices are expensive and have very special calibrated network cards but that is probably overkill, software will probably be ok. I've used wanem and it's fine. Software will be less accurate but massively cheaper.

Either will be controllable via an API so your tests can request a profile before running the tests.


The main question is about testing, maybe "rolling out" should be a new question.

I guess the best way to be sure all works fine is to test your app as close to real conditions as possible. So the best scenario would be user acceptance testing in Ghana I guess :) If that's not possible, try to emulate as much as you need. Maybe there is a location in your area known for bad connection, take your testers there. If not, set up a proxy between your app and the server and configure it to be very slow and sloppy handling traffic and randomly is just offline.

We've done our best to allow full function offline and to coordinate upload attempts with a network listener.

What did you already do to make sure the function works as expected? Like, do you have testcases for what happens when the server is just not reachable for two minutes while the enters new data?

  • All data can be entered and updated offline and when a network listener says that it's got a connection, server calls are sent with retry until confirmation. – SAR622 Jun 25 '19 at 13:09
  • yeah I got that. But how do you make sure this works? Do you have tests? Did you yourself took a phone, opened the app, activated "flight mode", created data and then deactivated "flight mode" again? what happens? You are asking about testing, I wanted to ask back "what tests do you already do?" – globalworming Jun 25 '19 at 13:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.