3 million+ orders a day across 20+ products on multiple devices, operating systems, and services. That’s a lot of notifications. 😅

gojek.jobs

Push notifications are an essential tool to inform users about events that require their immediate attention. At Gojek, we handle more than 3 million orders a day across our 20+ products.

As you can imagine, the number of push notifications we send are proportionally large — about a million every hour to be exact.This post describes the challenges we faced while working with such high notification volumes, and the solutions we developed to solve them.

Volume is only one part of the problem, many additional challenges were somewhat unique to Gojek:

1. Multiple applications

Gojek isn’t comprised of just a single app. In…


The single responsibility principle helped us fix Icebreaker, our chat service. This is how we did it.

gojek.jobs

The single responsibility principle is one of the most tried-and-tested tenets of software design. Every module or class should do one thing, and do it well. We found this principle was applicable, and incredibly important, while designing our systems.

About a year ago, we released a new chat service (which we internally called Icebreaker). It allowed our users to communicate with drivers through the app itself, rather than use SMS (which cost both the driver and customer money).

However, all was not well. For numerous reasons, the service gave us a lot of issues and late night pagers. …


For the backstory on how we came up with a personalised experience for every GO-JEK user, click here. This post is about the mechanics of how this ambitious project came to fruition

gojek.jobs

TLDR; Our system is pull-based rather than push-based, and enforces a guaranteed response time.

GO-JEK currently has multiple internal services that want to get their cards delivered to the user. If the user were to wait for all services to return their own cards, it would limit the overall response time to that of the slowest of these services. …


We have 18 products and the product pipeline is growing rapidly. Our users vary radically, but what if we can personalise products to every user and offer an ‘experience’ of using the GO-JEK app?

gojek.jobs

Think of how long it takes to book a ride home from work. Every user has to go from the same place to the same destination, at approximately the same time, and yet, one has to supply the same information everyday to order a cab. …


The job of any application, to put it bluntly, is to do things. Sometimes, those things may take time, and the application cannot wait to make sure they are done. But still, it’s necessary that they are.

I’ll explain this with an example: For any new user who signs on our platform, we create multiple profiles for our different services. We give every user an instant confirmation as soon as their signup is successful.

A few problems arise if we treat this as a synchronous problem:

  • How can we give the newly signed up user an instant confirmation if the…

One of the most challenging aspects of building applications in Go is managing the many dependencies an application uses.

“Dependencies” here refers to any external service or transport layer an application needs to communicate with.

In an ideal world, the application would be stateless — with only one input and one output — essentially acting like a pure function.


Microservices are great. They offer a way to split a monolith into independently scalable and maintainable chunks.
One of the challenges engineers face while adopting this architecture is the task of making these services talk to each other at scale. As the number of services go up, the conversations between them gets increasingly complex.

As you might have guessed, a lot of things can go wrong:


Microservices are great. They offer a way to split a monolith into independently scalable and maintainable chunks.
One of the challenges engineers face while adopting this architecture is the task of making these services talk to each other at scale. As the number of services go up, the conversations between them gets increasingly complex.

As you might have guessed, a lot of things can go wrong:


This post will go through how to add a postgres database into your Go application.

It is not enough to just add a driver and query the database in your code if you want to make your application production ready. There are a few things that you have to take care of:

  1. How would you write tests for your application?
  2. How will you ensure that everyone else who wants to run the application (including other servers and VMs) are using the same database structure as the one you developed?
  3. How do you most effectively make use of your computing resources?


Go is getting more and more popular as the go-to language to build web applications.

This is in no small part due to its speed and application performance, as well as its portability. There are many resources on the internet to teach you how to build end to end web applications in Go, but for the most part they are either scattered in the form of isolated blog posts, or get into too much detail in the form of books.

With this tutorial, I hope to find the middle ground and provide a single resource which describes how to make…

Soham Kamani

Developer and writer. https://www.sohamkamani.com/blog/

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store