How I developed an Android Application and published it to the Google Play Store
I am writing this story on a sunny weekend, months after publishing the android app which goes by the name “Remindoze” on the Play Store. This story will be focused more on the technical details of how I went about developing the application with my team Cray Cray Labs(Yes, it was not a solo project unlike all of my previous projects!).
What does the app do?
In short, the app sends monthly reminders to your friends who owe you subscription money. For example, if you pay for your Netflix account which is being used by 3 of your friends — Remindoze will remind them monthly that they have to pay their share of the Netflix subscription to you. If they still don’t pay, they will be subject to cyberbullying. (Kidding about the last part, LOL!)
Cray Cray Labs consisted of three members, each teammate’s role was as significant as the three sides of the Golden Triangle.
Meet Sushmita Sahu, the product manager who took care of all the business side of the product — from doing marketing research and writing down the PRD of Remindoze to creating the logo of the app and finding the right user base. Apart from that, she also contributed to various design sprints and her contributions can be seen on the app’s UI parts of which she directly coded.
Ankit Singh, who is the core android developer behind the product — took care of all the app functionalities and the front-end. His work is commendable as he single-handedly created the app from scratch and also taught the team about Android Studio because of which we could code our ideas directly and add commits to the project repository.
I was the one who wrote all the APIs which primarily constitute the backend of the project. I took care of the database, logging and cloud deployments. I also contributed towards the front end part, wrote java logic code where ever it was needed, published the Remindoze Website on Heroku. I think that would be enough about the team, let’s cut to the chase and discuss the technicalities of the p̶r̶o̶j̶e̶c̶t̶ product.
We followed the renowned Model-View-Controller Architecture.
- Model: Consists of the data models that were used to store the details of entities like users, sharers, email logs, etc. I used MongoDB remote as the database as it is free and the NoSQL type is perfect for databases as simple as this one.
For example, one such model is shown below which stores the user’s name, email address and list of reminders. I am aware that NoSQL does not require a schema to be defined, but for the sake of simplicity of communication and knowledge transfer I defined the model.
2. Controller: This part comprises of all the APIs that were written by me. The REST APIs were written in Node.js using Express framework. Tested them using Postman. I deployed them to Heroku cloud platform. I chose Heroku because it is free upto a certain limit(and our project is a very lightweight app) and personally I find it very easy to use. Coming back to the APIs, they were all kinds of APIs like CRUDing operations on users and the reminders, sending monthly reminders, verifying the subscription users’ email address, authentication of users, etc. I will talk more about this in the next section of this story.
3. View: This is the Android application which the end-user interacts with. The user directly deals with view. Internally, the ‘view’ hits the APIs deployed on the cloud and parses the responses into user-readable format. For fetching data, or submitting data — the ‘view’ essentially makes HTTPS requests to the APIs and waits for the response. End-users seem to care only about ‘view’ the most because that is what they interact with.
No one cares about the back end — where the heart of the app lies! 😤
The view was created on Android Studio and the back end logic like authentication and dynamic logic was written in Java. Here’s a screenshot of one of the multiple views:
How were some of the complex logic integrated into the app?
We utilized the power of pre-existing APIs to handle the complex tasks which saved our time and efforts of writing the code from the scratch. I will mention each of the services that we used:
- Authentication: For authentication, we decided to stick with the very popularly used Google Sign-In. We referred to this documentation for the same.
- Email service: To send verification emails, reminder emails, etc. we used Mailjet API.
- Cron job: We used the free Heroku scheduler add-on to send monthly email reminders to the users.
Flow of Development
All the team members had full-time, tiring jobs on the weekdays. So we made some time on the weekends to work on the app.
After the PM came up with the idea, the team had multiple brainstorming sessions as a result of which the PRD was written. Once the PRD was finalized, I started creating the data models first and then writing the APIs around the data models. I single-handedly documented all the APIs into the SRS as I was writing them one by one. One mistake that I made is that I never wrote unit tests for the APIs. I should do that now more than ever as the app will go through code changes in the future.
After the APIs were developed and SRS was completed, the android developer used the wireframes given by the PM to create the app layout. On the back end, he added button click handlers, authentication, and other dynamic logic for the app. Now the only thing that was needed to be done was to call the APIs when a button was clicked, or a fetch operation was required,.., you get the idea…
Lastly, when the app was functioning well, UI improvements were made. And just a day of launch we observed that there were some major UI bugs when the app was run on different devices! But all of them were fixed on the same day and fortunately, the app was published with almost no major bugs.
It took 1.5 months to complete the app, not to mention that the efforts were put mainly on the weekends.
Overall, I think the team did a fantastic job bringing out the idea into life. Personally, it was a project that helped me cope with a recent heartbreak I was going through because I could keep my mind distracted from it and at the same time focus on the project. :P
In the future, we are planning to release updates with new and exciting features. But that might lie far ahead in the future as we are monitoring the customer feedback from the current version — MVP for now.
Till the time, feel free to check out the app here! Thanks for reading the story, will be back with more fun stuff soon. :)