Our first attempt at cloud synchronization was with My Game Collection, it was simple & 1-way ‘synchronization’, that mainly allowed you to cloud share your games. We used a service for logging in, but the synchronization itself was an implementation of our own creation. We never had any issues with the synchronization part, but it was a simpel solution. Because we only transfered 1 way we removed the complexity of synchronizing data.
We started looking into a full synchronization solution for My Board Game Collection and we were a bit daunted by the amount of work that it would require. People usually think of the ideal case when thinking of systems, but that is not where the bulk of the work is situated. Most work lays in handling the not ideal flow: different versions on server & client, crashes on the server and/or client, multile changes from different devices, internet unavailable, internet drops when transfering, etc. Tons of cases that you need to deal with and not break the system, because loosing data is a big ‘no-no’. Testing such a system is also a huge undertaking in itself, setting up all edge cases takes a lot of time and is not always that easy: how do you drop the internet while sending and/or receiving changes while not changing the code for pure testing reasons (since it is not that code that would run for users) ?
Then we came across a library in early access that seemed to do exactly what we wanted, and since it was gaining traction (it was – & probably still is – the better synchronization 3rd party free library available). The person creation the library was very aproachable and made updates for our needs (synchronizing to a server, different users, etc), so perfect fit. I had to do some special things on the client side, but all in all, it worked fine. But … it is not under my control, it is not written only for what I wanted it to do, works different than what I would want … But in the end, it works, so who cares 🙂
Fast forward a couple of years, synchronization worked good enough, but the currently used technology for My Board Game Collection is end of life, which means I need to migrate the MBGC code (and rewrite parts) to the new technology. Fine, no problem. I knew it was coming.
A small problem: the 3rd party synchronization library has made some changes in recent years that isn’t compatible anymore and I need to update & migrate (been putting it off since there was no need seeing everything worked). Ok, fine. I’ll do it all in one go … How hard can it be …
By now we also made good progress with ‘My Collections’ – an evolution of a proof of concept that started as ‘My … Collection’ – which has a full, custom written (by us) synchronization feature. Synchronization was to important to have the same thing happen again, so we build it ourself and it works beautifully (if I say so myself :)).
This made the attempt to get synchronization working in My Board Game Collection pretty frustrating. I made progress and got the server part up & running, even made progress on the client (app), but then there were roadblocks that just became harder and harder to dodge. Even if I could get it working, it would still not be what I wanted it to be. Which wouldn’t be fair I guess because I wanted it to be what we built for My Collections: the options it gives us, the possibilities it gives the users.
I looked into the option to adapt the solution we made for My Collections but it was not feasible, both solutions were just so very different.
In the end I made the decision to now support synchronization anymore for My Board Game Collection, to focus my attention on getting it running again in the new technology (which had its own set of unexpected issues).