One of our teams is currently developing an Android version of our famous Interview Assistant Pro app (currently available on iOS only), a mobile solution for HR and recruitment specialists allowing them to schedule interviews with candidates, fully set up and monitor interview process, select pre-built or create custom questions and interview templates, record answers, etc.
We faced the following issue on the project - the lack of resources; this issue is quite common amongst IT service providers who run a lot of clients' teams while having scarce resources for internal projects. To cut a long story short, we had not a single back-end developer on bench (they all were working on client projects) and didn't want to hire a freelancer or a full-time developer for this non-billable project. So, the challenge was to build a native Android app without hiring another back-end developer. And we were able to find an interesting solution which I'm going to share with you in this blog post, as you may want to apply it to your projects as well.
During our very first brainstorm session we decided that having a cross-device synchronization was sort of nice to have, so I put this into our backlog and I asked myself: “Do we really need a back-end developer now? Geez, where can I find one?”.
And one of our Android developers said to me: “What about Realm?”
Realm website says “Build better apps, faster”, and it basically provides not only a mobile database (which is not just a database, but more like a JSON objects storage), but an all-in mobile synchronization platform with features such as:
- Realtime data sync
- Data push
- Realtime collaboration (sic!)
- and others (just check their website https://realm.io/ for the full list of features).
At first, we chose to use Realm as a database, and started digging into their test environment to see if it's really what we’re looking for. But literally next day, another developer came back with the other option - Firebase that provides a complete cloud based infrastructure, not just a data synchronization tool.
At the end of our second brainstorm session we came up with two solutions:
- Relation-based entities architecture, so that user can check which candidates are applying to which position, etc.,
- Cross-platform services instead of developing back-end as is typically done in native app dev).
We had the following specific input requirements:
- Agile Development since we only had a big picture of what we're trying to achieve, but still no details, so we had to be ready to implement any spontaneous changes right away,
- Both Realm and Firebase are no-sql, so we had to find workarounds to handle them.
It was tough to choose between Realm and Firebase, and having analyzed the pros and cons of each framework, we arrived at the following conclusions:
- + It’s really easy-to-setup;
- + We have a vast experience working with it on numerous client projects;
- + It offers a more relation friendly data structure. It's a POJO which means objects contain reference instead of object; instance, so working with deep nested data won’t force us to unpack their parent instance;
- + It’s free and fully open source!
- - It requires an additional hardware to host on;
- - It’s a beta, some of the features are still very raw.
- + It's from Google and everyone likes Google;
- + A lot of built-in features, like really A LOT ( just check it out: https://firebase.google.com/features/);
- + Cloud server and file storage;
- + We’ll get new experience working with this tool which can be later translated successfully to clients' projects;
- - Using Firebase will require an extra method to provide data relations we need. Firebase uses JSON, so we need to cross-link objects (each will contain key reference to another) to implement relations.
Having a cloud server and being more like a stable enterprise solution certainly affected our decision - we chose Firebase and by the end of the next day we’d already hosted our app on Firebase!
Our initial database structure drafts
In conclusion, I would like to say that there is a plenty of existing services (most of them are extremely cheap) providing a complete infrastructure or just a bulk of useful tools. And all of them are waiting to solve your problems and unique requirements, all you need to do is just to bring up your developers, ask their opinion and do a little investigation!