A social game where users attempt the predict the final score of different sporting events including Football, Basketball, Baseball and American Football. Players can challenge their friends to see who knows their sport the best!
UK agency Zonica Mobile, required an Android and iOS native social game, which allowed players to login and predict the outcome of different sporting events. As players correctly predicted outcomes, they would be awarded points and, the longer they played plus the number of correct predictions would result in a 'reputation' which would be shown in local and global leaderboards.
It was also required for players to be able to setup syndicates. Syndicates were private groups of friends which would compete against each other to correctly predict the most outcomes. Each syndicate had a start date, an end date and a selection of different sports/leagues which each player should attempt to predict.
Two separate native apps were developed for iOS and Android phones. The apps allowed the player to signup using Facebook which resulted in a much faster signup and allowed the player to easily share their successes on their Facebook timeline.
The backend consisted of a load balanced MS.NET WebAPI residing in Amazon Web Services (AWS). For maximum performance, three separate data stores were used: MySQL for all relational data (Users, Teams, Syndicates, etc), Mongo DB NoSQL databse, for all non-relational data (points, reputation, shares, prediction results, etc) and AWS Elasticache for data which doesn't change very often.
One of the challenges of this project was the synchronization of sporting event data. A custom daemon was created which ran as a Windows Service. This daemon polled the data provider at different intervals to update internal data. For all sporting events which were 'in-progress' the data provider was queried every 60 seconds, any changes were detected and updated in or internal data stores. A 'full sync' was also performed by the daemon every 24 hours. This sync process obtained all sporting event data whose dates were after the current date, compared this data with the data currently in the database and updated/added data based on the comparison.