“Go Big or Go Bigger. But never go home!”

So, how do you develop something which does not exist on Stackoverflow?

Where do you start? Do I have the skills to figure this out?

These are the questions most developers ask themselves, especially when a new product is being developed.

People often think that writing code is the No. 1 thing software developers get paid for, but in reality that is not the case. Writing clean & maintainable code and keeping up-to-date with the latest technologies is important, but if I had to point out one skill that a software developer needs to have, that would be: PROBLEM SOLVING

Last autumn, a client approached us with an idea to commercialise their software product through an android mobile application, more specifically a tablet. They had a list of features that needed to be implemented, such as:

  1. Full kiosk mode
  2. Semi-automatic silent updates (Not through Google play)
  3. Multiple image capturing
  4. Integration to their system

My colleague Neira & I were assigned to this project and we were in charge of the whole Software Development Life Cycle (SDLC). Looking at this, not so much of a challenge is it? Well…Let’s break it down into smaller chunks.

Full kiosk mode

Since the application was built in React Native, having full kiosk mode per Android specification is not  doable to a great extent. So, what is the only logical thing you can do? Go natively 🙂 Writing pure Java code is a challenge when you are not a mobile developer, and integrating with React Native to make it fully functional adds another layer of complexity. Since the base of the application is written in React Native it was decided that it wasn’t worth it to rewrite the whole application into Android, therefore we have created “bridges” using Native Modules to connect the React Native and Android side. 

Semi-automatic silent updates 

Another requirement was to have automatic updates because customers can be located anywhere around the world and having on-site support is a challenge on its own and a cost to the company. They wanted to have simple updates on button click which would download the newest version and install it automatically without leaving the app. Doing this in React Native? I don’t think so 🙂 Inside of our CI/CD  pipeline, there is a logic for generating a signed apk which is afterwards pushed to a storage. This version is compared to the current one on the tablet and if a newer version exists in the storage, it will be downloaded and overwritten while keeping user data.  

Multiple image capturing

Third requirement (probably most challenging) was to have multiple images being captured during a session. React Native has developed an interface to the native camera through their modules that uses Android code in the background to access the camera’s stream and provide you with the basic functionalities. The downside is that it is really slow – depending on the tablet and resolution, it takes from 3500ms to 5200ms. In order to get maximum performance and capturing speed < 1000ms per image, we went natively yet again. In addition to a high performance image-capturing feature, we have also implemented face recognition and some other checks like number of faces found or the distance of the face from the camera itself.

By implementing CameraX’s image stream and face recognition, we got the maximum performance having images captured < 400ms. 

Integration to their system

When you hear the word “Integration” you know it is going to be difficult. Becoming part of the system which “has been around” for more than 10 years and it is still being developed and upgraded, is not that easy. Since this application was a completely new piece to the puzzle, the system needed modifications of its own in order to communicate with the mobile application. 

All in all

Nothing is as easy as it seems, there will always be the unknown factor which might occur and potentially slow down the delivery.  It was a challenge for Neira & me, it was not easy but we saw the potential in this project. This was a real example of how much problem-solving and investigation skills are important to developers. We were constantly looking for a way to improve it, measured performance in many different environments and configurations and four months later, it resulted in having a fully functional application and a very satisfied client.

Before you leave, a few words about me:

My name is Haris Čehić and I am a Software engineer that has a strong passion for coding. I like working on startups and creating things that never existed before. Currently I am pursuing my master’s degree in Computer Science. In my free time, I love to play basketball & football.