My Journey to Become an Android Engineer at Tokopedia

January 03, 2021

It's been a long time since I write a blog post. I've meant to, but I keep procrastinating it 😂. Fortunately, I found the motivation. I will start this blog's first post with a story about my journey to becoming an Android Engineer at one of Indonesia's big e-commerce companies, Tokopedia. I will start from my first encounter with programming through my interview process and land a job at Tokopedia.

High School

I have never known to program until I was 17. It all began when I was in high school. One of my friends told me that he could make money from the Internet by creating a blog and placing an ad on it. If someone clicks your ad, you get some revenue from that click. I am amazed by it, so I start creating my blog at blogger.com, which is now owned by Google. I post many things with several unrelated topics to increase the total number of posts because I learn that you need to have many posts to appear on page 1 Google search result page.

Back at that time, I usually copy-paste articles from another website, which I shouldn't have done. I never enjoy creating the posts anyway. So I decided to make another blog mainly focusing on technology. I still look at other websites for reference, and I construct my own words to write the post. One day I want to change the page's style and thus began my journey of learning HTML, CSS, and Javascript. At that time, blogger.com has this admin page where you can edit your website template. I always mess around with the code and see what gets changed. I usually follow step-by-step tutorials from other websites without knowing the logic behind the code I copy and paste.

College

In college, I start learning the web development basics on my own through this fantastic website that I think is the best for a beginner in programming - teamtreehouse.com. I recommend their courses for beginner to intermediate programmers.

I start by learning the basics of HTML. Then I move into CSS to change the style of an HTML element, use flex-box, grid, responsive web layout for different screen resolution, animation, etc. After that, I learn Javascript to modify DOM (Document Object Model). one of the popular Javascript libraries I use with my learning is jQuery. I know how to show a dialog, add click listener, manipulate DOM, etc. At that time, I already understand the basics. If I want to implement a feature on my blog, I search on Google how to add scroll to top at blogger I usually still copy-paste the code, but now I try to understand the code and modify it based on my need. Too bad my previous blog is no longer exists to show it to you because of some personal reason.

Teamtreehouse has a form of points reward mechanism where the more you watch & learn videos for a specific language, the more you earn the point for that language. At that time, my most significant point is Javascript because I really like it. The way you can manipulate an HTML page without refreshing the page and adding dynamic interaction on the page is just fantastic. You can still see my Teamtreehouse public profile here teamtreehouse.com/rifqifahmi. Even though I finished learning Android development on the platform, the most significant point still Javascript, haha.

At college, my majors don't teach me how to code. They have this introduction class to C++, but that's it, just printing some pattern to the console, no real-world project. My majors mostly taught about telecommunication engineering such as physics, antenna, microcontrollers, etc. I've been building websites for a while in my first year at college. I even join this Microsoft Student Partner group. The test is pretty simple. You need to create a website with basic CRUD operations and host it on Azure cloud services.

After tinkering a while with web technologies, I start thinking creating my own Android app would be pretty cool. Fortunately, Teamtreehouse has a beginner Android course. When I first take the class, it says that it will be better if you have some basic understanding of the Java programming language. I first decided to learn the Java programming language on Teamtreehouse.

After finishing several courses and practices on the Java programming language, I decided to learn Android development. I remember my first Android app project is called Fakta Terpendam in English means Hidden Facts where it will show you some infamous fact in an activity with an image. Every time you press a button on that page, it will present you with a new fact and a new image. The content was still hardcoded at the app, including the pictures with no internet request whatsoever. At that time, I still so naive, as I was adding the 10th fact then run the app to test it. The app crash, saying that I got OutOfMemoryException. At that time, I still don't know why this happened. The good thing is that Teamtreehouse taught me the critical skill of debugging or looking for an answer.

At that time I encounter a video presented by Chet Haase where he explains how to handle bitmap on Android. The learning continues, I also learn from other resources such as Udacity, blog posts, etc. I have made several apps such as an app for my blog where people can access my blog from a native Android app. I also create an app for my mini boat microcontroller where the app communicates with a Bluetooth module attached to the microcontroller at the boat to control the boat movement and direction. these are several apps I made and published to Play Store, I don't remember the exact time it published but I am gonna list it sequentially based on time:

Then in my 5th semester, I got a chance to do an internship. I am pretty familiar with Android development. Now is the chance to test it in the real world. I decide to apply for an internship at this firm not so far away from my university. The commute to that place though it takes about 45-60 minutes. It's a pretty popular firm which develops software for a client named Suitmedia. They have Android, iOS, and web developers. They give me a chance to become a part-time employee to be more involved in a project. I was curious about what sort of test for the part-time position, so I took the challenge.

They gave me a test to create an Android application. The application is like an event application where you can choose nearby available events at your place with google map view integration. They gave me the task description, requirement, design page, flow, and all the assets I need. After finishing and submitting the test, they ask me to come for an interview at their office. They say I passed the first test. Then the next is to do the interview. Long story short, I am accepted as a part-time Android Developer there. On my first day, I was really nervous, but the people there are very kind. They make me feel comfortable. I was even invited to join them to attend one of the employee weddings, and on the way back home, we visit this water pool together. It was a pleasant experience.

After six months, I decided to quit the company because I am in my final year at college, and I need to finish my final project. It's a bit sad to leave the company because I was having so much fun there. I have tried doing the work and finishing my final project simultaneously, but it's tough, and if I continue, I am going to get sick or burn out, so I decided to quit. They are very nice though they are welcoming me to come back if I ever want to work again at the company after I graduate for a full-time position.

After College

After several months I finally finished my final project and graduated from college. I graduated in November 2018. The next month my family and I went on a trip to Bali. We spent a lovely three days there. On the last remaining days of 2018, I began learning more about Android Development and preparing for coding or whiteboarding Interviews. I also join this online program from a company called Dicoding where they teach you Kotlin for Android Development.

December 2018 marks the start of me learning competitive programming. You know, like algorithms, data structures, the Big O notation, time complexity, space complexity, recursive, approaching a problem, etc. I use HackerRank as a place for practicing my competitive programming skill. I also read from other references on the Internet like a blog or youtube tutorial. For me, the most impactful or resourceful skill that I got for my competitive programming skill is coming from this book I read Cracking the Coding Interview: 189 Programming Questions and Solutions 6th Edition by Gayle Laakmann McDowell. It's a fantastic book for a beginner to learn and prepare for their next technical interview. She teaches you how to approach a problem, analyze for bottleneck or improvement, and system scalability. You should check it out. Quote I like the most from the book is this:

There is no "perfect" system. There are always tradeoffs.

In early 2019 exactly in January, I am ready to apply for a job as an Android Software Engineer. At the time, I plan to learn and experience an Interview in a tech company in Indonesia. So I don't apply to several companies simultaneously. I apply to a company one by one. If I fail for the interview, I can learn from it and prepare for the next interview. I will tell you by order of the company I apply to.

Traveloka

Traveloka is a big Indonesia's travel company. I apply as an Android Software Engineer in January 2019. I passed the resume screening, and the next step is to finish the online coding interview. They use Codility as a platform for asserting the candidate's problem-solving skills. I'm not going to tell you the detail of the interview questions for privacy reasons. They give me a total of 5 coding questions that I need to solve in 90 minutes. Unfortunately, I don't pass the online coding test because I could only answer 1 question correctly.

That didn't stop me. I try to understand and solve all the problems on my own afterward and look where I can improve the solution. After several days I decided to apply again to the next company.

Bukalapak

Bukalapak is an e-commerce company in Indonesia. Same as Traveloka, it is also considered a big company. I applied at BukaLapak in February 2019. Then I pass the CV screening. The interview step is pretty similar to Traveloka. Then they gave me online coding questions at Codility that I need to solve in under 90 minutes. I aced the online coding interview. Then I was invited to the company HQ at Jakarta for the next user Interview.

At their office, I met with 2 of the Android engineers to interview me. First, they ask me some system design questions related to Android. I need to draw the architecture for an app on a whiteboard. That was my first time doing a whiteboarding interview. I'm a bit nervous, and also, I wasn't really prepared to answer questions about system design, so I tell them what I just had in my mind. Then I need to build an app on-site with specific requirements they provide. Each UI component and functionality has its own point. I can't finish all the specifications, but I got over 50 from 100 points. I forgot the exact score I got.

After several days I got an email from the company HR saying that I'm not qualified for the position. It's a bit sad. I thought I aced the user interview. I asked them what skill I lacked to improve myself in the future, but they didn't respond. I figure it was probably because of my system design interview. In the next several days, I learn system design and build all the specifications for the app. After several days of learning from the previous interview failures, I am ready to apply to the next company.

Tokopedia

Tokopedia is also an e-commerce company in Indonesia. You can say Bukalapak is the competitor. In March 2019, I applied at Tokopedia for the Android Software Engineer role. I pass the resume screening then come to the next interview step. Tokopedia test is a bit different. They gave you an Android project which contains several tasks that you need to finish in 5 days. The project also includes some Algorithm questions where they will assert it on the unit test classes. I remember vividly asking the HR person to extend the day to 7 days to complete all the program requirements. Thankfully they gave me an extension period.

After several days I got an email from the company HR that I passed the online interview. They said the next step is the user interview at the office. They ask me whether I want an online video call or on-site. I choose on-site at Tokopedia Tower office in Jakarta. On the user interview, I was interviewed by 1 Engineer and two senior Engineer. They ask me to solve a coding problem on a whiteboard. They also ask what is the complexity of my solution and how can I improve it. I remember my solution has O(N^2) time complexity, the naive way. Then one of the senior engineers asked me if I can improve the time complexity. At first, I had no idea how to improve it. Then one of the senior engineers started giving me some hints until I found the faster solution, and the time complexity became O(N). After the whiteboarding interview, they proceed with some questions to test my knowledge in Android Development. You know, like the Activity/Fragment lifecycle, Android architecture, etc.

After finishing the user interview, I feel confident that day that I aced the interview. The same day, they told me that I passed the user interview, and they want me to proceed to the next step, an interview with the Android Engineering manager. I was pretty happy with my accomplishment. The HR then scheduled an interview with the manager for the next several days. Unfortunately, the manager is not available in the office, so they scheduled me for an online video call interview. The interview is more like a behavioral interview to assert your behavior whether you fit with the company culture or not. After the interview with the manager, I need to wait for several days whether I proceed to the next step or not.

After several days I got an email that I pass the interview with the manager. I was thrilled I never got this far before. The next step is offering. At that time, I don't really know about the salary standard. I just went ahead and accepted the offer.

Then I began looking for rent nearby the office because if I commute from my home to the office, it takes about 2 hours of traffic, and with that kind of traffic, I would spend 4 hours only commuting back and forth from my home to the office. I think it's a waste of time and energy, that's why I choose to rent a flat near the office.

I started my first day at Tokopedia on March 25, 2019.

twitter • github • stack overflow