How We Do What We Do at GOJEK
By Bergas Bimo Branarto
I started working at GOJEK when the number of orders per day was around 100–150 (Context: We do 3+ million now). At the time, it functioned as a call centre. Customers called in and available drivers were assigned manually for each order.
I was one of the first developers, and we were a team of four (of which three were consultants 😉). My task was to automate the entire process with an app. I thought of it as ‘an Uber, but for motorbikes, and with several more features’.
In my cocky mind, I thought this would be a simple 3–4 month project.
Little did I know GOJEK would become a unicorn; a startup that’s indispensable to an entire country. I’ll try to elaborate that story from the perspective of someone who has witnessed how we went from 4 developers in a small house to 250+.
The Nature of Technology
The problem is simple: we can’t scale human capital as fast as a users’ demands (which we support with our products). This is across verticals: business, operations, and even management.
When we realise demand can’t keep pace with supply, we iteratively hand over things to be automated by machines:
- Automate the call to drivers by providing a backend system and a driver app. Each order will be assigned via a bidding mechanism, directly from the backend.
- Automate the call from a customer by providing a consumer app. This directly accesses the backend to assign a driver and fulfil a consumers’ needs.
An example: Our data showed many users asking our driver partners to buy food from their favourite restaurants on our then shopping ‘feature’ (yeah, it was started as a feature). Then came the question of things to consider in order to automate this experience to make it simpler:
- Available restaurants in a specific area, menus, their exact location etc.
- Manually inputting items customers want to order
- Explain the order to the driver partner, so they can tell the restaurant the details of the order.
So we released GO-FOOD as a product — to automate manual actions to just a small number of clicks. Consumers can now browse restaurants and menus directly from the app, make a few clicks, and a driver will automatically receive the details of the order. Simplicity. Automation.
Down the rabbit hole
That was for our external users (consumer and driver). What about our business team who needed the details of the restaurants to input them, one by one? We automated that too. We built a tool to get a list of restaurants with each menu and sub category. This made it easy enough for our business team to structure the data we received. We then created another tool to insert this data (think menu, prices, offers, etc.) in bulk.
With the rapid growth, there will always be room for improvement and automation. That’s an endless cycle at GOJEK. New technologies bring better efficiency, speed, and stability, along with the potential for further automation.
We provide what users need to make their life easier, in a way that eventually makes our life easier.
So, a good portion of our work is to listen, and be earnest. A lot of our products were fine-tuned based on user feedback. We also act as users and play the devil’s advocate. It’s how we iterate. And our core objective of it all is to let the machines do the work.
Listen- Understand- Ideate- Build- Automate.
The devil is in the data
When demand surges, the business and operations team find it hard to digest all the feedback. This acts as a bottleneck to our ability to improve our products. Being able to analyse troves of data and funnel our learnings into decision making is what makes us a superior product.
So a Data Engineering team was born.
This progress happens in every part of the organisation. Each team depends on another. Products on business, business on partner onboarding, data recommendations on business intelligence, and so on.
In the engineering team, we have our plates full supporting automation across departments — for internal facing products as well.
As an analogy, tech is like electricity; it’s the base of every activity in the organisation. And we’re here to make sure it’s always up and ready.
Engineering complexity is about simplicity
On the backend, it started with one codebase. Before we realised this codebase will not be able to keep up with the pace of the growth, it had become too big to dissect. We called this very first codebase Stan Marsh. It’s almost like a living breathing entity within GOJEK, and you can read more about it here. The past years have been all about splitting this one codebase into smaller codebases and infrastructures to make it easier for us to maintain, scale, and improve.
And now, we have more microservices than engineers 🖖. And growing.
As a consequence, the complexities of the system continue to grow. Automating our internal tools is a task in itself; to make development, monitoring, debugging and deployments easier. To make our life easier really 😉.
The challenge — we have to do production support as well as automate new needs from users (both internally and externally as features/products). The latter includes: maintaining existing systems, redesigning new ones and migrating these moving systems without downtime.
All this, while we scale. Sounds like a challenge?
Naturally, we are hacking to build detailed monitoring tools, smart alert systems, easy environment setups and deployment tools in a scalable way. Not an easy thing to do, but it needs to be started, maintained and grown. Same as other external products, these internal products are also a work in progress. As business and operation grows, these will always grow.
In this continual ideation, a million stories and a zillion challenges await us.
For example, when we started, we built app packages locally and uploaded manually to each server. Each had a separate log file and used third party services for monitoring/alerting. As the number of servers and services increased, we added capabilities to have a centralised deployment manager. Now, we can deploy to several servers in a click — building a centralised logging system to make log tailing between services and servers faster and simpler.
We didn’t just stop there. We upgraded again, by setting up a deployment pipeline. This automates the setup for integrating to a centralised monitoring and alerting tool based on statsd, centralised configuration management and so on. This cycle never stops.
We serve millions in Indonesia now. The genesis of that story starts with humble beginnings; making boring look cool. It’s not easy doing rewrites, not fun doing testing, but we do what we do because we’re passionate about it. We’re driven by this ability to create impact with code. We’re pushing boundaries because what we do here reverberates across a country. There’s no bigger high than that feeling of building something from absolutely nothing.
GOJEK has grown into a unicorn startup that processes an average of 50 orders every second. That small, four-member team has grown to over 250. Getting things done despite the odds is now part of our culture. Sounds like fun? Head to superapp.is and grab the chance to be a part of this unbelievable journey. 🚀