On the 1st of July 2020, I joined Gojek as a software engineer. As is the tradition, I have to undergo an extensive training program, called “Bootcamp” internally, before I can get my hands dirty on production code at Gojek — spot on, I thought. I don’t want to sweat after committing buggy code that can potentially hinder the lives of hundreds of millions of people who use the superapp across southeast Asia! 😅
Well, today marks the end of a milestone in this learning journey — as part of my pre-bootcamp phase comes to a conclusion. In this post I’ll be sharing my experience going through this initial episode of bootcamp and few lessons I learned along the way.
To be precise, learning had begun the moment I joined that very first Zoom call as a Gojek software engineer. It was a humbling experience, even though I never expected a remote onboarding (no one else did, either 😄). Day 0, as I call it, didn’t involve any technical aspects, and was all about paperwork — bank & insurance stuff, ID submission and getting introduced to Gojek’s information security policies. But then, I had already started learning about the company culture and some of the tools they use for employee data management. This continued through initial part of Day 1 when I learned about values that Gojek seeks in me, as well as finance and etiquette policies.
The second half of Day 1 was when I got inducted to the “real” pre-bootcamp. The recent college-grads who had joined with me participated in a quiz about Gojek trivia, moderated by our bootcamp coordinators (who, by the way, are some of the most energetic and motivating people I’ve ever came across). If I remember correctly, I came ~14th in that quiz, out of 44 new joinees 😅, but I did learn a lot while playing it! After this induction, my assigned manager, tech lead and “buddy” gave me access to vast array of tools Gojek uses for a multitude of purposes — from scheduling meetings to viewing Grafana charts of app traffic to getting connected to Gojek’s private networks. I heedfully tinkered through them and learned a lot along the way.
From day 2 began a series of sessions that would make the bulk of this pre-bootcamp learning phase. Everyday we used to have ~2 sessions on different verticals of the company and popular projects open sourced by Gojek. We also got to know a lot about several cool internal projects, but, well, I cannot talk about them in detail here. 😉
I got very excited right from the first session, which was about building superapps 101. The facilitator, who joined Gojek ~4 years ago and had worked across many verticals within, talked about how the company scaled 6600x in the last 3 years and the vast array of products that came into inception during these times. It was really fascinating to feel this scale and think about being a part of it soon! Later, the new recruits were part of a session about creating user stories — where we learned about creating neat user stories and got to know about few aspects of agile methodology that surround this process. Later we were divided into small teams and were tasked to create tech stories for a hypothetical GoPay user story. Although I’d gone through a software engineering principles course in my college, it was refreshing to use this concepts in realtime within the context of Gojek products.
After going through these initial tech sessions, I noticed that the facilitators, who’re engineers themselves, always teach us these principles through real scenarios that occurred within Gojek. To me, this is really effective as it hammers these concepts in my mind in addition to learning how Gojek used them to build products and tackle challenges in the past.
It was around Day 3 when the bootcamp coordinators assigned us to read two books — Clean Code by Robert Martin (aka Uncle Bob) and The Pragmatic Programmer by Andy Hunt and Dave Thomas. We started with Clean Code, and were required to finish it within the next 10 days! This, along with tools, concepts and engineering strategies introduced in each tech session, came as a steep learning curve to me — not necessarily due to the complexities involved but because of the sheer volume of things to learn within a short time frame. But then, they taught us to embrace challenges, so I tried to devise a learning schedule for the next 10 days that’d help me achieve these learning goals. This involved reading ~45 pages each day to finish the 462-page book, among other things.
There’s a fun anecdote that happened around these times. I had started interacting with my product manager, manager, tech lead and code buddy (it wasn’t a heavy interaction, since I was going through the bootcamp, but it was helpful for onboarding and navigating through internal tools). Once, my tech lead invited me to a Zoom virtual coffee meet that my team, GoFood Search and Relevance, has every Friday after work hours. When I joined I heard my product manager scolding my tech lead about why Saurabh hasn’t finished on “Bayesian optimisation for dish relevance ranking”, while everyone stayed silent and my tech lead tried to convince him that I’d work on it over the weekend. Then, suddenly, the product manager turned on me and asked whether I’d be able to do that. Although I didn’t have the slightest idea about what “Bayesian optimisation for dish relevance ranking” meant, and had only been in the team for 2 days, I was quite afraid and said I’ll try my best. At this point, everyone in the meet started laughing and I realised they were pranking me! This was a small emotional roller-coaster ride for me but really fun and brought me closer to my fellow teammates. It was also warming to see that some of the folks remembered me from my internship last year.
During the next few days I learned about importance of Clean Code, did a code pairing exercise with a fellow recruit, learned about writing neat blog posts (well, you might say I still need to lear a lot 😄), and learned about different teams within Gojek. Got introduced to Transport platform and got to know its tough engineering challenges (like live tracking), effect of COVID-19 on its business and its tech stack. Later learned about the GoFood team and various streams within it, as well as the strategies they use to ensure driver productivity and quality delivery, among other things. On Day 8, learned about GoPay team and the extensive network of partners the GoPay app has in Southeast Asia. Side note: I was baffled to know that GoPay even supports international transfers! During the last few days I learned about the functionalities of the Driver Platform , Ops [operations] team and the Marketplace teams. Although these teams work on very different aspects of the superapp, it’s interesting to see the ways in which they collaborate, share information, and interface with products of other teams.
Across these sessions on teams with inordinately different functions, a common theme emerged: the facilitators always encouraged us to ask lots of questions and their common advice to the new recruits were almost always “Never stop learning” and “Be Yourself”.
I already knew that it’s fairly complex to build and maintain a superapp, but these sessions revealed me to a whole new level of complexity and sheer scale on which Gojek operates — there are so many moving parts — so many bells and whistles, so many users, drivers and merchants, and coordinating them is never an easy task. I was thrilled to now become an atom in this vast Byzantine of Gojek universe.
Interleaved with these team introductions were sessions on popular projects open-sourced by Gojek. I got to know about motives, system architecture and internals of several projects like Ziggurat, Proctor, Heimdall, and more recently, Darkroom. These made me realise that Gojek walks its talk about contributions to the open source community, and they in fact show Gojek’s technical prowess and passion to the world.
I learned a lot of technical concepts from the talks on these projects, like eventual consistency, akka actor model, event sourcing, HTTP request-response circuit-breaker models, and a lot of other things.
I was reading through Clean Code in parallel while going through the pre-bootcamp sessions, and was around Chapter 5 when I got my office laptop delivered to my home. In the book’s foreword, James Coplien talks about maintaining neatness and elegance around oneself should be an ideal just like maintaining a codebase’s cleanliness is an ideal. That statement, combined with the arrival of my shiny new laptop, enforced me to make my desk and my room tidier. Although my room still has a long way to go in terms of organization, I really am grateful to Clean Code and Gojek for encouraging me to make it a slightly better place!
My learning is never going to end within Gojek, but today marks the completion of the first phase of that drive. As of this writing, I still have to finish the last two chapters of Clean Code and there is still a lot of internal training to undergo.
But, embarking on the next phase of this ride, it’d be breathtaking and humbling journey to see how, soon, a bunch of mere keystrokes on my laptop, here in my room in a small Indian city, will positively impact lives of millions of people touched by Gojek across Indonesia, Singapore, Vietnam and Thailand.
This post also appeared on my blog.