Gojimo, a British education software company, created Gojimo Revision – a leading self-test app that enables students to better prepare for exams with within the UK and USA. Students are able to access textbooks, study guides, and quizzes from the world’s leading educational publishers on their mobile device or tablet. As of January 2015, the app has been installed over 500,000 times and currently offers over 50,000 free multiple-choice, curriculum-based quiz questions and over 10,000 premium questions.
The Client Challenge
Seeing how students used the Gojimo Revision app, over time Gojimo began to see that something was missing, a need wasn’t being met. Some students required extra help, others were studying very specialized topics and yet others had questions they were unable to answer for themselves. All found themselves stuck, with no one to turn to for help.
The new Gojimo Tutor app would address the students’ need for extra help, by providing the answers to burning questions and extra support on-demand. The app would deliver one-to-one support for students studying maths and science via instant messaging 24/7, 365 days a year. Gojimo Tutor would connect students to a specialist tutor in the relevant subject area, who would be able to help with homework and exam preparation.
The Technical Challenge
The main challenge in bringing the idea to life was working to a very tight deadline. Time was of the essence when it came to the Gojimo Tutor app launch. Demand and usage peak during exam preparation in the UK; giving the team only 4 months before May/June exam period. To give the Gojimo Tutor the greatest chance for success, the app needed to be available during this period.
Following initial assessment, Gojimo realised they would not be able to meet the launch deadline with the resources they had available. Finding senior developers, capable of rapidly engineering an app with the requisite features in Xamarin (the product’s main technology stack) proved difficult. Additionally, the application concept and specifics were not fully developed and presented further challenges for streamlined production of the app.
Following extensive testing of our expert knowledge of Xamarin, Gojimo invited Code Chemistry to work on the Gojimo Tutor app. With our wealth of software development experience and deep knowledge of the Xamarin platform, our team enabled Gojimo to deliver a fully functioning, feature rich app for iOS and Android in time for the exam preparation period.
The app was released in the lead up to the 2016 exam period, simultaneously on both Android and iOS. All the features were fully developed and tested in time for launch. The app was extremely well received by students, parents and teachers alike.
“THANK YOU!!! Finally I’ve found a great app to help me revise for my GCSEs!!” – UK Student
Building on its success, Gojimo is exploring making the app available in countries outside the UK and USA, giving students everywhere the confidence and dedicated assistance they need to reach their full potential during exams.
State Of Play
Code Chemistry joined the product team in January of 2016. With only four months until launch, the delivery timeline looked very tight. At the time, only the app concept and a few basic wireframes had been created by the Gojimo team. Many features still needed to be fully explored, the system architecture remained in need of drafting and many technological choices still needed to be made. Whilst Gojimo had a great CTO and Product Manager working on the project, they were missing senior Xamarin developers, able to rapidly guide, develop and adapt the product, whilst ensuring the code remained elegant and smart.
Gojimo was developing the API at the same time as our team developed the mobile components. As such, Code Chemisty needed to create a functioning mobile app without access to a working API.
The Gojimo Tutor app was no simple CRUD application. It might give the impression that it is made up of a handful of screens with limited features, however the structure behind any clean easy to use application is far more complex.
To function as intended, the app:
1) required very concise layouts;
2) had to fully support a wide range of devices on multiple platforms;
3) relied heavily on real-time communications;
4) had to support social sharing;
5) in-app payments; and
6) needed to comply with strict analytics integration.
The 3rd party Layer chat backend communication system posed another major challenge. It was supplied by a third party service, and was critical to facilitating communication between students and tutors. Xamarin was chosen as the main technology for the application’s mobile development, however the third party system service did not have any support or implementation for Xamarin. Our team were the first to tackle and implement a library binding for Layer which enabled seamless integration of the full Layer API and native IOS/Android controls Layer provides into Xamarin.
The Layer communication library was not developed to easily tie-in with Xamarin. Following multiple discussions with the team at Layer and further study of their documentation, our team began to create the Xamarin binding, so that the two systems could work together seamlessly. By leveraging our past experience in creating such complex bindings, we were able to complete this task for both Android and iOS two weeks before the deadline.
Our next challenge, the custom media upload feature, also needed to be integrated with Layer. As indicated earlier, Layer has its own upload API and customizable UI interfaces for both Android and iOS. Seeing as the UI is strongly coupled with the way the transport layer operates, making additional customization to change the behavior of the transport layer was a very complicated task for us. Our team spent several days exploring the Layer source code, before finally developing a solution that could change the way the media was being uploaded. We were also able to reuse their customizable UI classes without needing to change significant sections of code, by changing the transport mechanism layer that was put in place. Whilst going through this process, we also discovered a number a bugs within the Layer system, helping them to also improve their own product.
As we used our established practice for interfacing the communication layer via the CC Framework (which we have been developing for the past 5 years), implementing the API client was a simple matter of mocking portions of the services layer. By taking this approach, we were able to have the mobile applications working without needing to communicate with the backend services. This workflow relieved considerable time pressure on the project and allowed us to work in a completely parallel environment with only the agreed API and DTO’s structure in place. Strictly following the simple development rule – ‘DTO’s should not be used as domain objects’, saved the project time and complications, considering that the DTO’s were changed very frequently. If we had glued our application to the DTO’s, a considerable amount of time would have been needed to refactor the code, making it impossible to make the set deadline. The ability of Code Chemistry to foresee this problem so early in the project made all the difference.
We should also mention that the entire communication and business logic between the iOS and Android applications were shared 100%.
Another interesting component to implement within the applications was the payment system. The purchase and subscription mechanism was completely done using the Stripe API, making that a simpler task. However, the amount of credits that needed to be deducted had to be linked to the amount of time a student spent chatting. We had to ensure all the different end user behaviour scenarios were covered, such as a user receiving a phone call during a chat, the phone switching to ‘sleep mode’ or being forced to shut down. Since the management of credits was implemented as a singleton service, it was a matter of switching the Credits Service to one of it’s three states: Deduct Credits, Pause Deducting or Stopped. This way, regardless of the number of scenarios the app needed to cover, the Credits Service would deduct the correct amount of credits or leave the amount untouched. We should note that the Credits Service encapsulated the entire logic and persistence of the credits data, meaning it was the only point of entry for everything credits related, which was a crucial factor for implementing the above.
Project Challenge Solution
Working to such a tight deadline, to develop a product which had not yet been fully defined, meant that Code Chemistry and Gojimo needed to work in a fully transparent, collaborative way from day one. Daily scrum meetings and frequent trips to the London Gojimo offices were crucial. Special attention was paid to concept development and technical choices by both teams, leveraging their expertise to insure the best decisions were made. Code Chemistry dedicated long hours and integrated its internally developed CC Framework to insure the product launch was a success.
The project endured numerous impediments whilst being bound to a very tight deadline. With considerable effort, dedication and collaboration with the great team at Gojimo, we managed to help them deliver a beautiful, well tested applications before exam time. Gojimo were extremely pleased to be able to add another great educational app to their product range and extend their company vision to help every student achieve their highest exams results.
The CTO, Nic Ford, had this to say: “Code Chemistry was extremely committed to the project, putting in long hours and bringing a wealth of enthusiasm, insight, experience and technical know-how to the table. They produced, from nothing, a Xamarin app fully functional across both iOS and Android platforms.”
Xamarin, CC Framework (Our own MVVM framework for building native mobile apps on top of Xamarin), REST API(Ruby on Rails developed by the Gojimo team), Stripe, Layer API, Android, iOS, Java, Objective C