You'll never be completely ready for the real world of programming. There always will be something more to learn about.
After completing my undergraduate studies, I joined BookMyShow - India's largest online entertainment ticketing portal - for my first full - time job as an Android Developer.
During college, I spent couple of years working with Android. I learned how to code through Android. I had been a complete Android fanboy - from completing the Android Developer Nanodegree to getting the Associate Android Developer certification, from working as a freelancer to working a part-time job for 6 months as my final year project.
But even after all this, the real world worked quite differently.
First and foremost, we had a 2-day induction at the organization. The 1st day was introduction, words from the CEO, company policies, and paperwork. The 2nd day was interesting, as we were taken to the Customer Experience office. This included exercises based on teamwork, learning how customer experience works, and then actually hearing live queries from the customers and observing what the queries were and how they were being resolved.
First Day at Tech Office:
On the 3rd day, I was assigned a buddy, who helped me get to know other developers and introduced me to the team. I was then asked to choose a place and system was assigned to me. Following week, the developers one-by-one helped me get insights into how various parts of the code base worked - including explaining me the architecture, overview of the flow of the application, how unit tests work, and more - while I was learning about how scrum works within the organization.
We follow 2-week release cycles.
The sheer size of the Android code base at BookMyShow was overwhelming at first and it was impossible for a single person to even remember the flows, let alone manage it. I learned that our app used both Native and React Native for the development (RN doesn't fit into our use-case and we've been extracting it gradually from our code base).
View from my desk.
The 1st task I was assigned was a production issue, that was causing crash in a WebView activity because something returned a N.P.E., which I fixed.
This was my first PR that was merged!
Then, I was assigned a few minor bugs and production issues that had cropped up. Also, I started attending the ongoing knowledge sessions everyday from 10am–11am which were for anyone who wished to learn about how different things work at BookMyShow.
Following day, there was an ad-hoc meeting about updating a certain SDK library. Subsequently, I also got engaged with my first feature development task.
First Feature Development Task:
For my first individual feature, I was to work on a custom Header Frame component that would reside on all the home screen that can be navigated using the bottom tabs.
The component I developed.
This took me around a sprint to complete, and another to add analytics and unit testing to it. Even then, it was followed by further additions and improvements w.r.t. the changes that came in complementing another feature.
I was elated when what I worked on went live and my manager was quite happy with me, coming in less than 3 months ago and shipping out something that would be visible on the landing page was quite a big deal!
The component has already been seen by more than 15 million users so far with most of them interacting with it too.
Currently I'm working on distribution of our application through App Bundles and refactoring a bit of routing logic. The Android team currently is also involved in modularizing the application and we've been having bi-weekly catch-ups to discuss and plan out our roadmap before diving into the implementation.
The fact that I can just turn around - with either queries, ideas, annoying questions, anything that I can think of - and talk to a whole lot of amazing people is what I dig here.
- Making something scalable is very important - you would never know when you might need to accommodate similar things in multiple ways and your code needs to be able to do that without you needing to change a whole lot of things.
- Every line of code previously written is for a particular reason - don't directly refactor that without understanding it's impact.
- The development is never complete until the feature is shipped - there will be changes (maybe business, maybe product, etc.) that'll keep coming in w.r.t. new discoveries that come to light (company specific - but often the case with companies that have been in the industry for a while).
- Backward compatibility needs to be taken into account - not every user updates your app and waits for the features. A lot of the people are satisfied with the primary use case and don't update apps until absolute necessary.
- Take up something others are too busy to do - I took up responsibility for analytics and unit tests for a couple of modules that I hadn't written code for. Taught me a whole lot of things about how these things works. You create dependency this way. Which works in your favor.
- Get reviews from as many people as possible and work on them - I've been taking reviews every month from most of the people I work with. Everyone will have at least something different to say. Note down the do's and dont's and keep working on them.
- Since I've joined the organization, I've been keeping a track of things I'm working on - on a daily basis by maintaining a journal. I've not been able to update it recently for the past month … but I'm starting again from today. This helps me keep a track of what I've worked on and what I need to work on.
Journaling my thoughts
- Get to know what other people are working on - talk to them, try to help them when they're stuck, this helps in building fruitful peer relations and you become a valuable member of the team.
- Be social - again ... communicate. Don't eat or take coffee alone. I am naturally an introvert so this was a bit overwhelming at start, but this will make working long hours easier for you.
- Blog your learnings - or share your discoveries online. There's a whole lot of community that you want to be involved with once you understand it's importance. This will help both - you (to keep a track of yourself) and others (helping them when they come up with similar problems).
I think I've had an amazing initial period at BookMyShow. There's lot to learn, work on, implement, and succeed at! I look forward to the next set of challenges, and doing my bit to create a great product and evolve it to greater heights.
PS: I've officially moved away from Medium and future blog posts would mostly be hosted here. Also, I am not using a CMS or a template, and I've instead created an in-house Markdown to HTML element converter that'd render MD pages as blog posts. Lots of thanks to GatsbyJS for making blog creation easier!