I still remember I had three hours and two choices for my Appointy internship selection test: either to create an Inshorts-clone webpage (Frontend) or to create a Golang API (Backend).
Well, from a guy who loves to design visuals, animations and interfaces, and tries to recreate the real beauty of nature into his designs, the choice was obvious! But I decided to choose to create Golang APIs!
I had never written a for loop nor declared any variable in the language whose name suggests me to “GO”. But I said let’s go, let’s go into it and see if I could do what I have never done before. Let’s try backend this time. And so, I coded and completed the whole challenge, realizing how important it is for your fundamentals to be clear before trying anything new.
The next day, I saw my name written on the top of the result list. Shockingly, I felt that this can’t be me, how could I have topped! (Turned out, I topped probably because my name starts with “A”) 😅
In a few days, we had other interview rounds, few technical and HR rounds. My favourite was the HR round, where we discussed the visions, which made me choose specific paths. It’s always great to discuss ideas and thoughts with experienced persons. And then I had confidence that I can learn a lot by selecting the offer.
Work From the Office to Work From Home.
Well, time keeps changing, and nothing about the future can be said with certainty. And this time it made people stay into their homes, the whole transportation system got cancelled, shops were closed and the world went into lockdown. I am talking about Corona pandemic.
Here we had to accept the new way to work. Work from home, thanks to the latest technologies, which made everything possible. We made the transition from regular one on one meetings to online meets, time-based work to goal-based work and to work from the office to work from home. But in it is the beauty of technology which can make impossible things to be possible.
Into the Working
As I said, “It’s very important for your fundamentals to be clear before trying anything”, and hence, our first week at Appointy was full of learnings, and building strong fundamentals. In that week, I learned how asking the right questions can help you to get the right answers. In the coming days, I learned about new technologies such as Protocol Buffers and gRPC services (all backend stuff). I studied about microservice architecture and got to see how it is useful and efficient in creating scalable and maintainable products.
My final task was to develop services for CSV file imports, for example, given a CSV file, I had to write code for reading that CSV and then make data entry into the database using batch create services. Seems like a small feature, but a feature’s importance is measured in terms of the value it adds to a customer’s life.
From reading the comma-separated values (CSV) to making valuable data entries, how did we design the flow? Here we had to do data pre-processing and post-processing to match the data consistency at the backend, or else we would end up having severe errors of adding wrong data.
We also had to consider the randomness and errors which a typical data value may have, suppose missing an “@” in email or name as “404” a number. We had to filter the wrong and missing fields and upload only the correct entries, but suppose if we are importing 2,999 employees to a company, and in these, just a few employees didn’t submit their emails. Well, how to identify them in the hell lot of data? For this, we introduced the concept of returning the error CSV, having the poorly formatted or missing data fields along with its precise error reason. So these poorly formatted data fields can be added again.
We did validations and filtring in the frontend. Here, we also mapped the field values to their semantic labels and finally uploaded that correct CSV data converted into JSON objects.
But why, JSON objects? Because parsing that JSON object into a proto object is an easy line of code (These proto objects can directly be sent to create services, making the data entry job at the database more comfortable).
I wrote a JSON upload service, which stores the JSON objects file on the server. From here, these JSON file is sent to its respective Import service (there are 4 bulk imports services for Customers, Employees, Services and Appointment ). These bulk import services do the post-processing, converting the JSON objects to proto objects and finally uploading it to the database. However, some objects may still fail to make their entry. So we again make an error CSV for failed entries.
Now here we know that the data has been added, the database knows that the data has been added, but how does the user know that the data has been added? Well, thanks to the notification service which we used as the last step of CSV import flow, to send a notification to the user saying “Your Import has been completed.” In this notification, we also attached the error CSV for failed entries.
We all face problems in life, sometimes we fail at certain things, and sometimes everything works perfectly, and then suddenly it fails again. Same goes with code, sometimes it fails at some instances, and then if everything seems to be working correctly, it fails due to a single bug. And we need to debug into the problem to make it perfect again by removing all the errors. So as in code or in life, both need continuous maintenance. And that’s why we should keep things as simple as possible – both in code and in our lives!
On the way
Along the way, I learned a new programing language called “Golang”, I learned how to write testable code, I learned how to debug and resolve bugs in the code, how a file upload code is written, how the flow of data happens at the backend, how does a large scale project is managed, how regular feedbacks and motivation is needed to keep everyone on track. I also learnt how teamwork and collaboration help in solving problems quickly, and how failures are nothing but a room for improvement.
Most importantly, I got to learn the things I need to improve upon.
I really had a really great intern experience, but amongst everything changing so rapidly, we even forgot to say thanks for everything which we learned from everyone. So thanks to Appointy, for creating a great life experience and letting me be a part of its story!
Until next time!