Back to all cases

Cotwins

Service:
Mobile App
Industry:
Mobile development
Time-frame:
5 years
Team size:
2 developers

Technologies used

  • Python
  • Django
  • SQLAlchemy
  • GAE
  • Web2py
  • Objective-C
  • CoreLocation
  • Cocoa Touch
  • Java
  • Android SDK
  • Google Services

COTWINS is a research study at the Institute for Behavioral Genetics at CU Boulder. COTWINS is funded by the National Institutes of Health and is overseen by the University of Colorado Institutional Review Board, an independent board of science and ethics experts who ensure the protection and safety of participants within the study. The primary purpose of COTWINS is to use new technologies to understand adolescents, their development, and behavior. In COTWINS, we focus on twins, who provide a powerful and exciting way of understanding how our genes and environment interact to make us who we are.

clutter project
clutter project

Requirements

Our team was responsible for such steps of the development in the project: front-end and back-end systems development, iOS and Android mobile applications creation, and plugins for browser development. The significant part of the project was the back-end system development:

  • Refactor existing source code.
  • Create API for the external service.
  • Migrate a service that allows users to take surveys.
  • Add Jenkins continuous integration.
  • Speed up the database by optimizing SQLAlchemy queries.
  • Integrate with Facebook and Twitter.
  • Implement Chrome, Mozilla, and Safari extensions.
  • Add new functions to the admin panel.

Our back-end developers used Python 2.7, SQLAlchemy, GAE, and Web2Py. Our team migrated the database using Alembic and created tests using Selenium. The essential part of our development was also collecting statistical information about the twins activity, tracking visits to website pages with certain keywords, sessions on websites, and so on.

iOS Development

We took the project with already implemented features. Because of the legacy code, the project was fully rewritten using object-oriented programming approaches. This made the project's structure more flexible and easily expandable. Hardcode was removed. All the network communication features were improved. More efficient error handling was implemented. For debugging purposes, the telemetry feature was developed. This function helped to spot and fix bugs. Project was written using Objective-C language and Cocoa Touch framework. Also, we used CoreLocation framework for geolocation features.

Management

We used Scrum Agile methodology for planning short-term sprints for effective and close team collaboration. We had regular meetings with the product owner to respond quickly to change and also had daily meetings inside of the team.

Android Development

We started with the two projects that had to be merged into one, the code was ported to support Android Lollipop and Android Marshmallow. After the merging and porting, the code was partially rewritten to optimise performance in critical places. The network communication and data storing were improved significantly as well as rendering speed and user-friendly error handling.

Technical Details

After all the optimisation, the geolocation tracking feature was added which had to combine precise tracking with efficient battery usage. Also, a bunch of user interaction-related features like password reset were implemented. Then, the app usage tracking was added. The feature is about tracking which app and when it is used by the user. Because of the different Android API’s that had to be supported, app tracking was implemented in different ways for the versions starting from Android Lollipop and for earlier ones. Consent forms were implemented for receiving the user’s agreement for location and app tracking features. Push-notifications were added to notify users about new, available surveys. The location and app tracking were improved to store data locally while offline and send it to the server when a wi-fi connection is available. For the project development, the technologies mainly used were: Java, Android SDK, Google Services, Google Cloud Messaging, and Gradle.

Review

"Andrey has pulled together a couple of different teams for me on different projects over the past few years. They specialize in Python-based web development (Django; Google app engine) but have also been able to do some work on iOS and Android apps for me. I've learned a lot about good development practices from them, some of which I now try to teach to my students!"

Paul Resnick
University of Michigan