Imagine you have an app with which users constantly interact by adding data and making notes. These people use their smartphones on the go and their tablet at home or at work. Therefore, they want to be able to seamlessly transition from one device to another and have all their data always up-to-date.
Data synchronization across devices is a common thing for most apps, and people couldn’t imagine life without it. Moreover, most users already take it for granted. Your end-users will probably get frustrated if they have to add the same data or always copy it when they switch to another device. To fix this, you want to synchronize the data on multiple devices so they can resume where they left off.
In addition, you want an app that works offline. To make this magic happen, you need a syncing solution or strategy to make sure that the users always have the most recent files updated wherever they go.
The following case study provides a little insight into how we approached the real-time data synchronization for a mobile app across multiple devices.
Our customer has developed a special methodology for improving productivity and self-organization, which was based on personal experience, in-depth research, and analysis of various literature. The client wanted to implement this vision and approach in a mobile application that would differ from the standard to-do list apps. The app would also help users to prioritize and structure their tasks correctly and thereby be more efficient throughout the day.
The product founder possesses years of experience as a business process analyst. Having worked in various industries and helping companies with workflow optimization, he came up with a specific framework and concept of organizing personal tasks more effectively.
Initially, the synchronization process was designed to utilize two different channels: one channel - iCloud, where all notes were synchronized and the second channel - an internal server, where the shared data was synchronized. It had caused multiple malfunctions connected to the synchronization messages simultaneously going to both channels that weren’t managed by the same provider, and thus it was next to impossible to apply any multithreading patterns to orchestrate them. The fact that there were two synchronization channels caused permanent data distortion.
Also, any technical work related to synchronization took a lot of time, and it was difficult to debug it.
Our role in the project was to fix issues related to data synchronization across multiple devices and make synchronization more stable and fast. It was also important to ensure proper planning along with the offline-first approach.
We needed to redesign the entire client part of a client-server architecture up to the updated synchronization mechanism.
We defined the availability of two synchronization channels as a potential threat. Our next step was to reduce the number of synchronization channels to one in the most optimal way.
We wanted to fix the issue in the shortest possible time and in a cost-effective manner. So, first of all, we estimated how much time and resources we needed to fix the current situation.
We analyzed the code, errors, and the reasons that might cause them. Initially, it was one module that implemented tasks that were set for two existing channels, namely: synchronization between any number of devices, offline first, and sharing data between users. One channel performed all that was divided into two. We proposed replacing existing synchronization methods with our own solution.
We suggested using the CX Dojo Synchronization Framework, which is a set of algorithms that allows synchronizing data between any number of devices.
We’ve been using this framework on other projects so we were sure that it would allow us to efficiently and quickly achieve our goals.
We managed to eliminate all errors within 15 business days (one sprint), during which we changed the existing mechanism to our solution.
This is a brief description of how we implemented a quick and secure data synchronization process, while minimizing all the potential vulnerabilities.
The app works seamlessly across multiple devices.
All sync issues have been resolved.
By using the offline-first approach, we ensured that the app’s performance is stable no matter the quality of the Internet connection, which is very important for the user experience.