Everything started with the client’s need to create a social network and WOD (Workout Of the Day) generator for crossfitters. We were provided with some rough sketches and plans. The first few steps were to assess the project’s requirements, research the market and evaluate the competition in this niche, create the initial wireframes, start thinking about the user experience and prepare a suggested plan for our client.
The project consists of the following components:
- Native iOS application;
- Native Android application;
- Web API;
- Web Admin Dashboard;
- Presentation Website.
In order to keep track of the project during development and after launch there are several tools available, this include features for:
- tracking development features and issues
- support and intermediary builds available for testers and clients
- tracking API and server versions to allow for quick recovery and interventions
- tracking application code and versioning
- tracking user activity and device logs
In order to develop stable and long lasting applications, each feature is analyzed. Analysing issues includes:
- check that the feature is atomic and if not break it down into smaller components
- check how the required design changes affect the other features
- check what existing features interact with it
- assign a timetable, taking into account existing features and development time
- check specific platform requirements (iOS, Android, Web) and keep flow differences to a minimum
- check Apple, Google Play, Facebook, Youtube policies and requirements
- confirm expenses and suggest limitations
In order to develop stable and unitary applications a clear design is required, Adobe CC allowed the design team to give shape to several ideas.
The application UI and UX are a result of both the client and the design team. It is important to study existing applications, user tendencies and native functionalities, while keeping in mind the client wishes. This required several meetings, mockups and prototypes.
While the design is not set in stone, it does provide a solid view over the application. Marvel was a great support in presenting key application flows.
The whole design process consists in:
- Defining app concept;
- Conducting user research (this includes creating user personas, user journey map, etc);
- Creating wireframes;
- Creating prototypes;
- Defining style guides.
For native iOS applications we use the XCode IDE and choose to develop in Swift. Being a relatively young language, this posed several challenges as well as quite a few rewards.
The development team collaborated with the client and provided regular builds and status updates, Redmine was indispensable in keeping track of the application progress. Any details that impacted UI and UX were discussed with the entire development team.
A good example is handling graphs, since there are several Pods that permit customisation, but have limitations. The option to build a fully customised view was taken into account and a clear cost-efficiency was presented. The final word on the matter belonged to the client.
For Android applications we use the Android Studio IDE and Android Java.
The Model-View-ViewModel (MVVM) software architecture was used in order to separate the graphical user interface from the development of the business logic or back-end. This ensured that the data displayed in the UI is updated accordingly and always stay synced with the back-end data.
The Reactive Programming pattern was implemented through ReactiveX library in order to provide safe error handling and clear concise coding. Also it allows the developer to manipulate UI events and API responses.
For handling web API calls we implemented Retrofit which is a type-safe HTTP client for Android and Java. It helped handling all the web part of the app by retrieving and updating data from and into the server.
In order to for an application to leave a lasting impression, there is a need to manage the application content, this is also enforced by Apple Policies. The application must protect users from offending content, without allowing users to limit one another. While the client has the possibility to directly access the information using other methods, these might require quite a bit of technical knowledge and time.
The dashboard provides a much needed mediator, being both intuitive and strict.
For example if a person would be given access to the AuroraDB the person would be permitted to alter some of the non-critical data, this can pose a serious problem to the users, since they are regarded as content owners and to the application, since related data may be corrupted.
The dashboard allows the admin view privileges and some limited editing possibilities:
- view users and activate accounts, if the users fail to receive email
- manage content reports, reject invalid reports and allow content back into the application
- view user content
During the development we used WebStorm and opted for nodeJS. This alongside third parties integrated using npm allows for a fast and stable development. While importing other packages lowers customization options, this poses no issues since the main purpose of the dashboard is functionality.
The web API is the backbone of the whole system providing safe access to the web database for all other systems and applications. For security purposes the applications are not allowed to access the data directly, required content is processed and made available by the API server. The purpose of the API is to be invisible, this implies any added latency to be kept to a minimum.
The API connects the applications, regardless of platform and purpose. Allowing users to access their content or public content and protect the privacy.
The server will:
- check user authorization
- provide relevant data based on user settings
- ensure the data uploaded is valid
- notify users through the mobile apps, Firebase plays an important role as this point, being a way for the API to send messages to the devices
- ensure backwards compatibility
- notify users through other channels, like email
Project development was broken down into milestone, each milestone resulted in an application version, the version is intended to client testing and review. In order to deliver mobile applications versions on iOS we made full use of TestFlight, on the other hand Android builds were delivered in the form of apks.
Test versions didn’t affect the production, due to using different servers for development, staging and production. While the separation increases costs during development, it ensures isolated environments that remove all possibilities of data corruption.
For the application launch final checks on the production environment were executed after which the development team checked the configurations and settings on iTunes, PlayStore, Facebook, Firebase. During this stage we offered our full support to the client to ensure all mandatory and optional data was entered.
Development does not end after launching the application, as prior stated we’re aiming for long term applications. This means that after the first contact with the users, the application will need to be adjusted for several reasons:
- adding new functionalities
- fix any issues
- improve existing functionality based on user response
- improve or change functionality based on advancements (new OS versions, new devices, updates to 3rd party plugins)
- marketing (ad delivery, IRL events)
After release all application versions delivered are check for backwards compatibility.
“I found HyperSense on a specialized website, and I did not regret one second to give them my project to lead. App mobile for both iOS and Android + presentation website. Andrei and his team managed and advised me the better way I could imagine. My project was very complex and they were the only one to solve the many problems I encountered with my project with so much reactivity and transparence. Very involved, very clear in their explanations, very reactive to find the better solutions, I cannot imagine give my news projects and updates to another company now. I had the chance to met Andrei and all his team in real in Bucarest and they are real professionals in their domain. I could say Andrei is quite a friend now regarding the interest and the hard work he provides to offer me the best app for my project. He diserves more than expected his reputation !
I wish the very best for you and your team for the future…” Full review here