This post is written by Divya Vikash, Android Developer Intern at Haptik.
I came across Haptik for the first time when I peeped into my friend’s phone while he was searching for the nearest ATM on the Haptik App. The idea of a real assistant answering my queries on chat fascinated me to the extent that I spent the next two days exploring various parts of the app and indulging in conversation with the assistants. And it was not by accident that five months later, I found myself at the Haptik HQ in Mumbai working on the very app that I actually used and loved a lot.
I joined Haptik as an Android Developer Intern in May, two days after I was done with my semester exams (yes, i was that desperate to leave college). To be honest, I was very nervous at that time and had no idea how to be a “professional” software engineer intern. Know what i mean? Now in August after finishing the internship, I realize that hardly matters and moving from Jaipur to stay in Mumbai and working at Haptik, is easily one of the best decisions I have made so far. Haptik has helped me learn things I could really not have learnt anywhere else.
The fact that I had a decent amount of experience in building Android apps before I came here, helped me in the initial days when I was able to complete certain tasks like the Custom Share Feature and fix some small but critical bugs, rather quickly. And that’s probably because these tasks didn’t require me to understand the actual stuff i.e the infamous Messaging Activity. The codebase that we have is huge and it definitely takes a while to get a hang of it. When I was introduced to the code, I was like ‘Wow! What have I got myself into?’.
Analyzing and improving the performance of the Haptik App was the first major project assigned to me. The best part of working on projects which have no defined boundary is that you get to explore the entire codebase. I’d never actually cared about performance before, so for me this was a steep learning curve and looking back, I’m grateful that I was given the opportunity.
I mostly used TraceView to know which method calls take the most amount of time. One important issue i found using this was that getColumIndex() method in SQLite is being unnecessarily called a lot of times. The fix I applied was to store the column index and create a projection array.
Layout Optimisation is one of the most underrated performance parameters. Many of us just ignore the overdraws and the GPU cycles go waste. Finding overdraw issues and fixing them was the next thing I did. Maintaining 60 fps in Android is quite important to provide and run an app that doesn’t feel sluggish and tools like GPU debugger, Systrace can help one find out where that 60 fps is not maintained. I have to mention here, how glad I am that Googler, Colt McAnlis exist. Their videos on Performance are a class apart and I couldn’t have been happier to have discovered them.
Coming back, there were always many high priority tasks to resolve, such as Battery issues, MQTT issues etc., and I was encouraged to come up with new tasks regarding performance as well. I used Battery Historian to profile the battery data and fixed two important issues regarding wakelocks. Memory monitor and LeakCanary helped me to identify some memory leak issues and towards the end, I prepared a Performance Analysis report and then solved some of the bugs based on that report. I couldn’t be more thankful to Nakul, Raveesh, Swapan and Parth for being patient and helping me through this.
My next big assignment was implementing the Runtime Permissions flow in the app so that the User knows what, when and why he/she is giving a particular permission.
Haptik relies a lot on the geolocation of a user. Right from the home screen to location smart action, we try to detect the location in every way possible. I had to also implement the permissions model because we didn’t want to take user’s location if he/she doesn’t intend to share it. Things got a lot messier and we had a lot of test cases to cover. In fact we had 32 test cases, relating to location, on the home screen alone. Another interesting situation arose when Google made changes to the Place Picker all of us were confused as to why the Place Picker was not working properly. Due to this, at the very last moment, I had to implement permissions model there as well.
Apart from the two major projects, I also worked on a lot of UI/UX fixes, created an environment chooser in the debug apps, a tutorial framework to educate the user about different functionalities of the app and a bunch of other interesting stuff too.
Personally, I had never worked on a large Android project like Haptik, and furthermore had never used MVP properly and neither did I have any prior experience with Testing Frameworks, so everyday I got to office, a new challenge came my way. You might think this was demotivating, but let me tell you I have only bettered and grown as a software engineer, overall.
Writing code is one thing, writing good code is what matters. I wrote quite a few significant unit tests using JUnit, AndroidJUnit and Mockito. At Haptik, your code would not even be reviewed if there are no proper tests. I learnt a lot by code reviews. There’s always a more elegant solution to a problem. Some code reviews took a lot of time and I was fortunate enough to have guys like Jigar who would patiently tell me where I went wrong and where I can improve.
Software engineering is not only about coding. At Haptik, I needed to express myself. I needed to defend myself why I am doing things this way instead of that way. I now understand how important it is for engineers to be verbal. You would never be a good engineer if you don’t have the courage to speak out your mind during team meetings. Evaluating the technical tradeoffs of every engineering decision is something you need to discuss thoroughly with your team. I have learnt a whole lot just by interacting with fellow developers during standups, sprint planning and retrospective.
No one treated me like “the intern” and gave equal weight to my opinions as they would to anybody else’s on the team and that’s something that truly took me by surprise. While I was working on features, I reached across teams and interacted with the iOS guys, backend, product, design and the QA teams (especially Sanchita, who would come up with test cases, a normal person could never even imagine!) The structure is quite flat and I felt no barriers, whatsoever, trying to coordinate with the other teams.
I could turn to anyone for help and they would willingly take me through the problem I was facing. I did ask some stupid questions too, but nobody shut me down. I remember, going to Parth again and again, and asking him to explain some large parts of the code and he would do so, patiently till I got a hang of it. Everyone here is more than willing to share knowledge, engineering tricks, good practices, and more. I have learned far more about software engineering at Haptik than any class in my engineering college could have taught me.
I had my limited share of interaction with Git before. Swapan, CTO at Haptik, introduced me to the Git flow (followed at Haptik) on the first day and that short, simple illustration, was the best I could have asked for, as I was aimlessly going through the documentation we had, for the last hour. I did learn some useful git features (on the fly) like cherry-picking commits which turned out to be a life-saver. And now I can finally say there’s some greenery in my Github profile. Phew!
Okay enough about coding.
At Haptik, there are a lot of weekly events where we could take a break and relax. Every Friday, we have a breakout session where we discuss ideas and interact with everyone across the board over pizza and beer. This was always my highlight for the week.
A month back we also had a full day Offsite at a beachside complex and it was the best intellectual gathering, I’ve ever been to. Frankly speaking, “talks and presentations” have never been my cup of tea. But the offsite left me awestruck at how interesting “talks and presentations” can be. It was very involving and we all got to know a lot about each other and also about Haptik’s vision and where it stands and what we all can accomplish with the talent we have.
Being an intern at Haptik, I got the opportunity to be a part of one of the coolest startups of India and I truly enjoyed every minute of it. Every day was a new opportunity to learn and do something new. I learned a whole lot, worked with some amazing people, created things I couldn’t have imagined doing and overall had an excellent, educational and fun experience at the Haptik office. Without a doubt, I would love to come back here full-time.
If you liked reading this, do share 🙂
P.S: They’re still hiring!