We have been working on multiple real time display apps for iOS and Android which represent real time data coming from various equipment installations (you understand we can’t give details here:-)). When recently asked by an ex-colleague to list out a few points to keep in mind while architecting such apps for Mobile devices we came up with the following quick 10 pointers !
1. Volume of data and throughput will be high so the server and DB should be scalable and easily configurable. Consider Flat files like MongoDB/Azure Storage if analytics is not very important ( we also have DocumentDB now) and Data is not very relational.
2. There should be minimum latency i.e lag in receiving data from the hardware to the server and then at the client end . Consider use of Protobuf structures for light weight objects
3. Plan for internet connection drops esp with Mobile devices and have reconnection strategy in place.
4. Plan for data point drops and have a “catch up lost data” strategy in place.
5. Allow for prioritization of data while getting from the server. Example:- Keeping Live data integrity is more important than retrieving missing/lost data from the server
6. If possible represent the server connection state on the UI so that the User knows when the server is down and data/averages may not be correct.
7. For mobile devices plan for interruptions/app backgrounding etc
8. The rendering on the mobile side will need to be very low resource intensive since high memory hogging apps are automatically killed by the OS( esp in iOS)
9. You will need a way to mark a data point as “can be deleted” so that you can release storage space on your mobile devices as well as server. This can be done with a syncing mechanism where the data points are marked for soft delete once synced to a cloud storage and acknowledged as “synced”
10. Please plan to log essential events using a well defined logging framework and something like crashlytics which can email you logs from mobile devices etc
There are of-course many more things to be thought of depending on the specific use-case but these are few points we always consider!
Are you working on a Real Time app ? Share your thoughts on how you plan to overcome the challenges posed by your specific use-case!