My Career Retrospect

My Career Retrospect

I graduated with my Diploma in Engineering in mid-2012; I didn't do any further education or degrees (consider going through Why didn't I do a "Degree"? if you haven't already), and I've been working ever since. So I've been in the industry for over a decade, working with many companies and on many exciting projects, writing books, and getting recognized as an expert by Google. Overall I have had a fulfilling career so far, and I have been thinking of blogging about the same for the last few weeks.

Then as I was applying to a company, I came across this question in their portal.

What are the places you have worked at, when, and for how long? Give details about your specific responsibilities and contributions

I thought to myself, this is a perfect opportunity to write the blog finally. So here we go. I'll write in ascending order, i.e. oldest ones first. So it might take some time to reach to the latest one.

Faculty Member at Various Programming Schools | June 2012 to June 2015

In Kolkata, ten years back, no organization was ready to hire a fresher, that too "without a degree", for a software developer job. As a result, I initially started teaching programming at various programming schools, including CMC Academy (now TCS iON) Konnagar and Howrah Maidan, Arena Animations Barrackpore, and many other local programming schools.

I taught students C, C++, Core Java, JSP, PHP, Spring, etc., then at CMC Academy (now TCS iON), they enrolled me in an Android training session as they were planning on starting Android classes; this was in early 2013. I learned Android development, loved it, and started using it and teaching it in those schools.

There was also a small software development agency within most of these programming schools. They basically worked with small clients off Fiverr and Freelancer platforms. After learning Android, along with teaching it, I started working on those small projects as well for the schools. Along with that, I also developed small demo apps and games for these schools as well. One of them, a simple airplane game - AeroLRush, was published on Amazon I was the sole contributor for all of these projects (demo ones and the small client ones), developing both the Android app/game and the backend when required and sometimes designing.

I learned about Kotlin during this time only from a tweet by Jake Wharton; I learned Kotlin and used it in some of the demo apps I developed for those schools.

I also started blogging and used to write for Java Code Geeks.

Software Engineer (Android) at Codezin Technology Solutions Pvt Ltd | June 2015 to June 2016

After years of applying, I finally got an opportunity to be a Software Engineer officially (i.e., being hired as a Software Engineer rather than as a Faculty Member and doing Software Development as additional responsibility). That, too, on the technology that became my favorite now - Android. I'm forever thankful to them for being the first organization to trust me and give me the opportunity.

Responsibilities, Job Role, And Projects

I joined there as an IC but soon started somewhat leading the entire Android team. I mentored other Android developers, was involved in training the freshers hired and was part of the interview panel.

I started with developing a product for them, SalesAMPM; the goal of the product was to collate and show offers in local shops and nearby user locations. There were two apps for the users and the shopkeepers. I was the solo contributor in this project, developing the Android apps and the backend in PHP. Sadly they abandoned the project.

I started working on another project, IcyGo, developed for one of their clients. I worked on this app as a part of a team of 2 android, 2 ios, and one backend developer. It was a social media app with chats, friendlists, etc., focusing on Events. Basically, users created different types of events and could invite their friends to them. This was the first time I got to play with OpenGL in Android; we used OpenGL to render a cube on the homepage, which contained an entry point for creating different types of events, there were six event types, and each side of the cube contained an event type. Users needed to roll the cube to the desired side to create events. This was also the first time I worked on live chat; we used for the chat. The chat was text-based, with options to share media files. Both 1-1 and group chats were supported. Apart from developing the app, I was also involved in communicating with the client on the technical aspects of the Android app.

I also worked on a fantasy-sport app they were developing as their own product; it was kind of like dream11.

Reasons for Leaving

I worked with them for an entire year. Basically, they're the only company in my career so far besides Byju's, where I spent an entire year. Even then, I was not looking for a change; I loved the culture and the environment there so much. Apart from giving me my first break, the co-founder &  Navin Soni also helped me get my first PC (I didn't have a PC or laptop till then, as I couldn't afford one).

Someone reached out to me on Linkedin for a job opportunity, and since I was terrible at saying no, I asked for what I thought was an exorbitant salary at that time. They took the interviews and offered me the job, and the new job profile, along with the pay and the company profile, was too much to refuse at that point. I discussed this with Navin Soni, co-founder of Codez, and decided to accept the offer.

Senior Apps Developer (Android - Native) at Mass Software Solutions Pvt Ltd | June 2016 to Jan 2017

I already wrote about how I joined Mass Software above and why I left the section for Codezin. Although this organization was also a small service-based organization, it was much bigger than Codezin.

Responsibilities, Job Role, And Projects

I was a Group Lead (leading project subteams) for the most part. Was involved in talking to clients about technical aspects for some of the projects, mentored new hires and juniors, and evangelized new techs and frameworks (introduced RxJava, Dagger among other things). I was also the go-to person when anyone on the team faced any technical challenges in Android.

I initially started by leading a project called Wave; IIRC, the client was a foreign government. There were 3 Android developers involved, including me. It was a story app, and there were two user types, end user and story publisher; the publisher could publish stories (small blogs with HTML formatting, media, location lat-longs, etc.), and the end user could see those stories with all formatting and media. If a lat-long was there, then a Google Map with the marker as well, users could also like the stories and share them. It was my first offline first app; we synced the DB in the background with the latest stories for the end user and used DB as a single source of truth in the presentation layer. This was also the first time working with security (encrypting DB and Shared-pref).

Once the above project was delivered, I started on a fleet management app called EOW. A fleet management app, where the fleet owners could track their trucks with a detailed history of the routes taken by the trucks.

I then started on a demo app for them, BorKnow. I was the solo contributor for this project. It didn't involve any backend interactions; it was a relatively simple app; even then, I'm really proud of it. This app helps children learn the Bengali alphabet and write them.

Reasons for Leaving

The team and the culture were charming here. However, post-delivery of Wave (the story app) and EOW (the feel management app), there wasn't much going on in Android. I did the BorKnow app, and then there wasn't much going on, and it went like that for a month. My instinct told me to look for a change, and so I switched.

Senior Software Engineer (Android) at Max Mobility Pvt. Ltd | Jan 2017 to June 2016

As I was looking for change while in Mass Software, I applied to Max Mobility as I saw an opening and joined them. It was another small service-based organization. However, they had a good collection of corporate clients. I started Kotlin Kolkata User Group and got involved with GDG Kolkata during this time. Also got certified by Google as an Associate Android Developer.

Responsibilities, Job Role, And Projects

They didn't have a Team Lead position for Android, but I was the senior most developer on the team. My responsibilities included solving technical blockers for the whole team, mentoring other developers, tech evangelizing (similar to Mass Software, I introduced RxJava, and Dagger, along with MVP and MVVM arch patterns, etc.), estimating Android projects, talking to clients on technical aspects when required and writing code. I was involved in all the Android projects running within the org during my time here. Below are the most important ones.

I worked on multiple projects for backend/marketing teams, where the end-user was marketing agents/field agents for large consumer brands. The apps had large forms and tables for field agents, along with data visualization (graphs, etc.), the option to export the DB as CSV and import/download the DB from the server (not a typical DB sync, instead downloading a new DB file and importing it to the app).

I worked on a rally app, where rally personnel standing at various crucial points would mark a car passed with the car number; time was a crucial part of this. We would sync the data with the server the day before the rally, and during the rally, the app would work offline, and post that, we would sync the data again to help rally organizers display the result. Thankfully, Google announced their support for Kotlin just a week before I started this project, so I finally convinced the managers to let me write Kotlin code, and I developed this entire project in Kotlin. I used room db for the first time in this project as well.  

I created native bridges for the Tata Docomo app (user-facing app), which was developed with React-Native, but I helped create bridges for notification history, DB, etc.

I also worked on an app that was being migrated from a Java+PostgreSQL backend to a NodeJS one since I was the most experienced person in Java in the org. I managed and did small changes in the DB / Java code while the new one was being developed and then helped migrate the database.

Reasons for Leaving

Although I loved the team, and I'm still in good touch with them, I was not fond of the company culture much; there were a few managers who would unnecessarily force developers to stay overnight and work on weekends for weeks (saying unnecessarily since I know they had plenty of time to deliver the projects well within the deadlines without doing so). This, paired with poor planning and no regard for code quality, pushed me to look for change.

Senior Software Engineer (Android) at Indus Net Technologies | Nov 2017 - Sep 2018

Indus Net Technologies is the biggest local service-based startup in Kolkata; they also have offices in multiple other cities, including a development center in Chennai. I published 2 of my books (Reactive Programming in Kotlin and Functional Kotlin) while being here.

Responsibilities, Job Role, And Projects

I was again the senior most developer in the team, but a much bigger one this time. My responsibilities included solving technical blockers for the whole team, mentoring other developers, tech evangelizing (similar to previous org), estimating and planning Android projects I was working on, talking to clients on technical aspects when required, writing code, as well as doing regular code reviews of other developers.

Worked on multiple social network apps, and a health-tech (Practo clone) app, among others. I was responsible for end-to-end delivery for the projects I worked on, including Technical Solutioning (designing the flow and backend APIs).

Reasons for Leaving

I really liked Indus Net and enjoyed my time there. I respect Abhishek Rungta, the founder of Indus Net, a lot. I also got a lot of freedom to experiment with different frameworks and tools. The culture was also not bad. However, at this point, I was getting tired of working on projects on a surface level, never getting to dig deeper into the product. So was thinking of switching to a product-based organization. My friends in Bangalore (especially Adit Lal and Ravindra Kumar) were also telling me multiple times to move to Bangalore, and Brijesh, who was leading the Android team at Byju's at the time, reached out to me. So I decided to move on.

Sr. Software Engineer (Android) at BYJU’S | Oct 2018 to Oct 2020

My first time in a product-based organization. I was amazed by the planning and attention to detail in developing the app. I loved the place, and it goes up with Codezin for being one of the best workplaces I have ever been to.

Roles and Responsibilities

I joined the team as an IC but slowly started getting more responsibilities. After working on a few minor issues and features right after I joined, I started leading the Kotlin migration effort. The lead and the architect had a discussion with me; they wanted to migrate to Kotlin for some time at that point but wanted the supervision of someone with more experience in Kotlin; since I fit that bucket perfectly, I got the responsibility to planning Kotlin migration and lead the execution. Parallelly we started refactoring the codebase as well to a new architecture; the architecture they were using at that point became overly complicated, stale, and quite hard to work with, so we decided to refactor the arch as well. After lots of pondering, we decided on a state-based MVP architecture.

Along with working on Kotlin migration and refactoring, I also worked on multiple features and projects. Including small initiatives such as adding support for the in-app update, revamping the journey feature  (node-based interactive learning solution in the app), implementing picture-in-picture for the video playbacks, etc. I used to do RnD with anything new in Android and then adopt it in the product if there was a match.

Before leaving, I led a project - Snapbook, with two Android Devs in addition to me, from scratch to a Beta release that’s part of the PlayStore app; this project uses ML to show users Byju’s contents and videos related to a scanned Textbook page.

I was also involved with the Hiring and Training process here. I was a key person in deciding the hiring process/requirements for the Android team and responsible for onboarding new joiners on the codebase. I was also responsible for conducting training of junior developers on the latest frameworks and libraries we use here.

Reasons for Leaving

I spent two years at Byju's and learned a lot. Worked with really excellent Engineers and managers. Brijesh Masrani was one of the best managers I have ever worked with (although he was a lead at that point, he was playing the role of an EM only). I also got to work with Briject Patel, the Android Architect at Byju's, and the best engineer I had ever worked with. However, after spending two years, I was starting to feel there were no new challenges for me in the org and at the same time, someone from the Paytm Insider team reached out, and after pondering a little and discussing my peers, I decided to move on.

Android Architect (SDE-4) at Paytm Insider / Chat | Nov 2020 to Jul 2021

I joined Inside as an Android Architect. It was a small but very good team. Loved working with Neehar (CTO of Paytm Insider).

Roles and Responsibilities

I was responsible for technical solutioning, leading and architecting all Android projects in the organization. This includes various modules of the Paytm app (e.g., Movies, Feeds, chat, etc.) and the Paytm Insider app.

I initially started working with the Chat team. Basically, Insider was implementing the Chat feature for the main Paytm app. Again was involved in Kotlin migration and refactoring. We refactored the codebase from everything written in Activity to a state-based MVVM arch. Implemented many features in that chat, including media sharing, payment success messages, integrating chat with Paytm Money, etc.

I also worked a little on the Insider app (the event app) and Paytm Movies.

Reasons for Leaving

There was no particular reason to leave Insider, apart from getting an offer from Gojek, my dream company for so long.

Senior Software Engineer - Android - L3 at Gojek | Jul 2021 to Feb 2022

Like many developers in India, Gojek was my dream organisation for a very long time. I applied at Gojek multiple times, but was not able to clear the rounds, until I did.

Roles and Responsibilities

I joined a team called ICP-Identity which was responsible for everything related to user session management and login.

My responsibilities also included leading the development of new features/projects and leading Engineering Initiatives, including improvement of Test Coverage, architecting the existing and new projects, etc. Increased test coverage of the core-identity module from 12% to ~40%.

I also developed an SDK for two-way SSO (Single Sign On), between Gojek and Gopay apps. The SDK was designed in such a way so that it can later be used for Tokopedia as well.

Reasons for Leaving

I already published a blog about this

Android Lead (SDE-4) at Meesho | Feb 2022 - Dec 2022

Meesho was the 4th unicorn product based startup I worked with.

Roles and Responsibilities

Led "Product Feed" team, consisting of 6 android developers; my team was responsible for all the feeds (product listing and details) across the app. Along with writing code I was also responsible for aligning developers to different product and engineering initiatives, mentoring junior devs, planning sprints, preparing solutioning, and doing code reviews. Also regularly collaborate with the android-platform team to increase test coverages, modularisation, etc.

Reasons for Leaving

Meesho was probably the worst place I ever worked at. Started with disagreement on different tech/engineering initiatives. I didn't like how the things were planned and executed there. Tried raising voice, but was to no avail, got frustrated and resigned without any offers.

So now, you all know everything about my career trajectory, my experiences with different organisations, the projects I worked on along with the reasons for leaving as well.