By Dhruv Jain
When I was in college, I was exploring internship opportunities in the software engineering domain. That’s when I first came across Gojek. It was the very first time I learned about Gojek and the scale at which it grew in such a short span of time attracted me to it like a magnet.
At the time, I could not find a suitable opportunity for me to apply at Gojek, but I always wished to experience what it is to work here and collaborate with the best and the brightest minds. Who knew that it would come true sooner than I ever thought!
Curious to know how I made it?
During my final semester, I was surfing on LinkedIn when I came across an internship program — GoSquads 4.0. Earlier, three versions of this program were held only in Indonesia and this time it was global. The application process consisted of aptitude, computer science fundamentals, coding, and debugging assignments as well. The first two sections of the assignment consisted of MCQ questions on topics ranging from aptitude, data structures and algorithms, operating systems, and oops. The next section involved 4 DSA coding questions and the last section was a code debugging section.
After a few weeks, I was reached out by the HR team to set up an interview round. The technical interview started off with an introduction. Then we had a short discussion on the auth system that I designed and implemented in an open-source project called rc4git— Gitter assimilation adopted by Rocket.Chat. I also shared my first GitHub bug bounty experience that started while I was contributing to Rocket.Chat. Next, the interviewer gave me a DSA problem on trees that I had to discuss and share my approach to solve. He then asked me questions related to computer science fundamentals involving operating systems, database management systems, computer networks, and different programming paradigms. I had appeared for a lot of interviews earlier, both on-campus and off-campus, one thing unique about this interview was that the interviewer himself shared his feedback at the end and asked me to provide mine.
We at Gojek have a strong feedback culture and we believe that it is critical for one’s improvement and growth.
Two days later I received a call from the HR team and guess what… I was selected!
My internship experience
Two days before the joining date, I received a GoSquad 4.0 welcome email from the GoAcademy team that caused a flurry of excitement. The email shared the onboarding schedule for the next few weeks involving sessions by the people and culture team, finance team, and GoAcademy team.
The first week was jam-packed with the sessions related to IT, workday onboarding, finance, adaptability, time management, and the importance of feedback. The techniques shared really helped me a lot moving ahead. During these sessions, we also got the chance to interact with the other interns who joined Gojek in different functional teams globally as part of the session activities. We also had sessions with the CTO and Heads of Engineering. The sessions were quite insightful as they shared their experiences and mantras to get the most out of this opportunity at hand. Soon we were introduced to our buddies and teammates where we learned about the project that we would be owning in the next three months.
I was part of the GoFood team as an intern and now full-time. GoFood, Indonesia’s largest food delivery app, handles over 50 million transactions per month in Southeast Asia. It has also become the world’s most helpful and #1 user-friendly app during the pandemic.
Along with me, Silvanus was the other intern in our team. Our super buddy, Ajat Prabha, introduced us to the problem — mimic production-like traffic to load test Courier infrastructure. You can read more about Courier here. He also shared the necessary reading material to get started. We were also added to the daily standup and weekly IPM calendar.
The second week was one of its kind. We had our mini-bootcamp, a week-long program where we were introduced to coding best practices followed across the organization, an initiative to bridge the gap between academia and industry. It was really an eye-opening program for me. We got a chance to get hands-on a series of assignments that were quite basic in terms of problems but involved a lot of good practices and principles like TDD, OOPS, pair-programming, YAGNI, and writing clean code. The regular feedback from the coaches was the key that helped us improve on a daily basis. Usually, bootcamp is a 3-month long program, it was just a teaser. I really wish to attend one if given an opportunity in the future.
The bootcamp finished on a high note and we had the mandatory group photo with the coaches and program managers in the end.
Next week, I had to join my team and start with my project. Since my 7th semester on-campus exams were scheduled that week, I had to take a 4-day break. I really appreciate my teammates as they were supportive and allowed me to freely concentrate on my exams for the week.
Since our team built the information superhighway between mobile and server using persistent connections, we call it Courier. We did not have the right tool to test the infrastructure scalability and perform capacity planning. The scope of the project was to build an efficient load testing system with the ability to mimic on-demand 3x production-like traffic patterns, around 1 Million concurrent persistent connections with 5k msg/sec as send and receive rate.
We divided our project into four milestones as follows:
[ Milestone 0 ] Evaluate load testing tools and prepare an ADR
[ Milestone 1 ] Load test with 10k connections on test environment
[ Milestone 2 ] Mimic production-like traffic patterns on test environment
[ Milestone 3 ] Document & release it as an easy to use tool for the dev team
We started by exploring the open-source testing tools available that had the ability to meet our demand. Across Gojek, we follow a habit of documenting our work in the form of ADRs/RFCs(Architecture Decision Record/Request for Change). This not only helps build clarity across the team but enables the new joiners to grasp and know the project background and its details easily. These documents help record the reason behind the choice we make while we build our product as it helps going ahead to refer back and evaluate our decisions critically in turn saving a lot of time and effort. Silvanus and I evaluated multiple load test tools with respect to our needs and created an ADR for it. We went ahead with MzBench as our load testing tool.
One of the cons of MzBench was that it was hard to setup majorly due to a lack of active community support and maintenance. It did not stop us from starting and we finally made our way to setup the tool locally using vagrant. The next task was to move the setup to integration and estimate the infrastructure requirements with respect to our demand. We tried to maximise the number of connections on a single VM keeping in mind our milestones 1 and 2. After a lot of pairing sessions and mentor guidance, we were able to reach 64k connections on one of GCP’s
n1-standard-2 VM which is
2 vCPU and
7.5GB RAM machine. We could have worked more on it to increase it further but we also had to keep our milestone deadlines in check as the internship period was only three months.
During the internship, I got a chance to work using a variety of tools and technologies such as MQTT protocol, Vernemq brokers, Vagrant, Dockers, shell scripting, Chef, HA proxy, and MZBench. I always wished to contribute to products that are built at scale and wondered how products are tested before release in production. Here at Gojek, we as interns do get the full freedom to work on products that are released into production impacting millions of users. We also got to attend the townhalls and GoFood showcase to keep ourselves updated with the org/team-wide happenings. During my intern period, I also gave three presentations related to my work which in turn helped me improve my presentation and oratory skills. Since the internship was in WFH mode, it never felt like one. I never felt alone or left out even when we were at home and this speaks volumes of the culture we have at Gojek.
The journey to achieve 1 Million connections with a 5k msg/sec send and receive rate with no packet loss and pub/sub latency keeping below 20ms was not an easy task at all. It was definitely not an individual’s game. The combined effort helped us achieve our goal and we completed our project just in time.
Finally, I was offered a full-time opportunity with Gojek.
I’ll be covering the journey of reaching 1 Million connections in another blog post as part of the Courier blog series where I’ll be sharing the challenges we faced at each step in detail and how we overcame those challenges to achieve our goal. Stay tuned for more interesting blogs and updates coming your way.
Check out more stories from the vault here.
Oh, and we’re hiring: