When you build products that nations depend on daily, each second is precious as the product relies on real-time data transfer to deliver excellent services and a smooth user experience. If you are Indonesia's first Decacorn, then you will be dealing with millions of processes every minute.
This is the exact place that Gojek is today. What started as a ride-hailing business in 2010 has grown to become a household name and superapp providing products in transport and logistics, payments, food and shopping, entertainment, with coverage in most Southeast Asia.
Due to the time-senstive nature of the markets that Gojek operates in (ride hailing and multi-service app), delays must be avoided as much as possible. This is true if you intend to remain at the top. With Gojek, you will find that they stand by three pillars.
The first pillar upon which Gojek is built is speed. The second is innovation, and the third is social impact. And this is evident in all of Gojek's products.
Our focus in this case study is Gojek's package delivery service known as GoSend. With GoSend, customers can have their packages taken from their location to another location of their choice. GoSend has three delivery services: GoSend Instant, GoSend Sameday, and GoSend Intercity.
The Problem Explained
Port Cities' team met GoSend's in 2019 and was tasked with a complex mission. In discussing the intricacies of the project, Port Cities CTO, Dennis Guillot, said:
They challenged us to integrate the complexity of their high technology multi-service business with a very custom in-house flow of operations.
"They also required that we build from scratch a specific transport management system (TMS) which for now does not exist inside Odoo. They also asked us to implement fleet management at a quite elevated level, which is beyond the standard Odoo Fleet feature. There was also a necessity to interface and integrate with existing systems at the group level."
Previously, Gojek did not have a back-end system to handle any type of warehousing or logistic operation for its courier service, which was running at a high volume that reached thousands of daily transactions.
When GoSend first started, the team offered a service that only transported goods from one city to the other. Slowly, they increased the number and sizes of their warehouses and the cities they covered. This allows GoSend to pick whatever goods from the customer's location to their location of choice nationwide.
As the business grew, the need for constant data validations also increased. For instance, customer #405 asks GoSend to deliver one cubic meter package from point A to point B. There has to be a system that checks if GoSend has the space in its warehouse to accommodate the delivery. It is also important to allocate for the space in their fleet else, they go to the customer in a truck without the capacity to carry the order.
However, the biggest issue was the deep integration that must exist between the geographical details, with the specificities of the warehousing, the routing, and the capacities of the routes to be used.
In the end, Port Cities' team identified over 120 validation flows that must be executed at any moment to ensure GoSend can complete an order. It means, within a split of a second, the system must check and interact with the frontend for dimensions, origin, destination, capacity, routes, leave time, delays, and other factors. It is after all these conditions have been satisfied that an order can be processed.
The second part of the issue is the time of execution. A paying customer isn't going to wait for several minutes before they can know whether their order will be approved or not.
Dennis explained the situation further, "Gojek did some R&D with their own Odoo implementation, the maximum number of interactions and validations that they got was about 2 to 3 per second on standard Odoo. When we started to include additional criteria, such as the unique GoLogistics flows of GoSend, we got 20-second validation per order.
“However, the requirement was that we needed to be capable of validating potentially & simultaneously more than 1,500 up to 2,000 orders per second. It is a very big difference between 2,000 orders per second and one every 20 seconds."
And that was where the challenge laid. The incoming orders must be validated before they are accepted, but paying customers don't have the patience to wait for minutes. So, a system that brings real-time back-end validation and integration with Odoo without penalizing customer experience was required.
Now, what solution did Port Cities provide, and what was the result achieved?
Port Cities' Solution for GoSend
Our solution for GoSend was an entirely customized and complex system built from scratch to accommodate in-house flows of GoSend's operations with a high volume of daily transactions.
Upon understanding the problem, it also became clear that this system must also integrate with a very high number of 3rd party platforms that GoSend is already using. At the same time, it must be capable of validating data from high volumes of transactions in real-time.
To actualize this, the system consisted of three sub-systems:
Order Management System (OMS)
Fleet Management System (FMS)
Transport Management System (TMS)
When asked about challenges faced during the project's implementation, Dennis took note of Gojek's transactional pace.
He said, "Imagine for a second, up to several thousand sales_order_lines being submitted per call or even sometimes in bulk, within a few seconds over peak hours. Imagine very heavy payloads requiring real-time advanced data validation control acceptance and a requirement to immediately give and return either an error code or message or an indication and do per case logic and protocol API response.
"Then imagine that within the validation rules of this API, they also asking you to integrate more than 200 conditional verifications at the order submission time. So is the package this size or that size, if it's above that weight, if it goes from this origin to that destination, if it's using this route or that route? Based on that, the API should reply immediately what the price is, whether it is accepted or not, when it will be executed and what the ETA will be.
"Specifically, when the customer requires that you get all that in real-time within a decent response time, which is, let's say in the worst-case scenario less than two or three seconds per call."
Despite the challenges, Gojek saw an immediate increase in their order processing without making paying customers wait.
Our result with Gojek's project can be summarized thus:
Development of a unique Order and Fleet Management System, deeply connected to geographical details and the specificities and capacities of warehouses and routings nationwide.
A system capable of validating over 120 validation flows per order and potentially simultaneously more than 1,500 up to 2,000 orders per second.
High-performance API integration with Gojek's complicated flow of operations and 3rd party systems. One of such integration is with Kafka, a high-paced internal data streaming platform used for real-time data analytics and high-performance data pipelines.
Port Cities is one of the biggest Odoo Partners in the world. However, this project has further shown that our service extends beyond Odoo implementation. Whatever the size and discipline of your organization, we have the expertise and experience to help with IT implementations. Should you have questions about our work with Gojek or inquiries about Odoo and IT implementation in general, don't hesitate to reach out. We are always happy to help.