Nudges Platform in Halodoc

Dec 28, 2021

What are “nudges” and Nudges Platform?

Nudges Platform is one of Halodoc's platforms to provide a better in-app experience through interactive UI for our customers. Halodoc's nudges give a surface of personalized information with a non-intrusive performance after our customers use our services.

Hopefully, we can provide reasonable assistance for our customers to use Halodoc's services optimally.

So, this is it, Nudges Platform!

Why did we require Nudges Platform?

Halodoc app now has varied use cases, which need to be delivered well in real-time to the Halodoc customers. The main objective of this initiative is to achieve below:

  • Relevant information

At Halodoc, we'd been using nudges to provide easy-to-understand service information for our customers. Such as with any scheduled doctor appointment, we need to deliver real-time nudges to remind the customer D-several days towards the appointment day. Another example is also to give updates on the pharmacy delivery order status.

  • Shortcut to workflows

Minimizing the number of screen-taps will provide a good user experience for our customers. So, here the nudges will come into the picture. Our customers no longer need to access the menu of each service they are using, and Nudges will provide preliminary information right on the top of the homepage. Also, less than two taps are required to access the complete information to the specific service itself.

  • Service feedback

Getting feedback from customers is so hugely important for us. Nudges Platform will help provide feedback from our customers regarding our service quality.

How do we build a Nudges Platform?

On a high-level view, Nudges Platform has two main parts:

  1. Nudges Platform SDK for mobile
  2. Nudges Platform Backend

Backend Architecture

We'll primarily focus on building the backend side of things and the end-to-end platforms in this post.

Event Producers

These are our existing or upcoming services responsible for publishing events of user activities.

Event Processors

This service is responsible for consuming events published by the event producers and processing them into a nudge. Event processors will also work as one filter level as processors may not convert all the "events" to nudge. The processor will only convert specific events to nudges based on certain criteria or rules defined by us.

There are three sub-parts of event processors.

  1. Data enrichment talks to respective services and gathers the relevant data. Once we have all the necessary data, we'll replace the placeholders from the nudge template and proceed to the nudge service.
  2. The event router transfers the filtered events to configured channels like the nudges system. Then the nudges system will transport that nudge to the particular user.
  3. The Event evaluator works as a filter for transferring only relevant nudges to the user.

Nudge Catalog

Nudges platform uses catalog management to store all predefined templates, nudge properties, conditions, channels, and actions to form a Nudge-Template. Every Nudge-Template will have all the necessary information like priority of nudge, expiry of a nudge, etc. Nudge-Template will always be mapped to a type of event like order_completed or own derived nudge events like complete_your_profile.

Nudge Service

It is a system that nudges a user based on the configuration and requirement. This system will manage the entire life-cycle of the nudge. Let's call this service NMS henceforth. There are also specific responsibilities of this NMS, such as:

  1. Life-cycle management
  2. Handling the TTL of the nudge
  3. NMS is archiving those nudges in a terminal state to the S3 bucket.
  4. Expiring particular nudge using CloudWatch
  5. Store the active nudges to AWS DynamoDB
  6. Delivering the nudge using live-connect transport

We have two kinds of nudges. The first one is transactional types. It is generated through our existing transactional services, e.g., pharmacy delivery and doctor consultation. Transactional nudges are real-time and have multiple states, e.g., order_confirmed and order_shipped. While NMS generates non-transactional nudges through EMR jobs, these nudges will be restricted to the single per user per nudge type. They can't have multiple states as they are generated through batch jobs.

The nudges have their life-cycle. The life-cycle will be different for each type of them. For recurring nudges they will recur till expiry at a specified interval. They will be transitioning from active to dormant until done.

Nudge Life-cycle

For the first time, NMS created nudges in the system. Soon they're active, Data Enricher enriches the nudges, and they are ready to be consumed. In contrast, nudges that are dormant will soon be operational. Once done with their purposes, Nudges Archival will remove the nudges from the system.

NMS moves the simple and transactional nudges upon user action or expiry.

There will be default TTL for all the nudges types, which will mark those nudges as expired. So we can archive those nudges to the S3 bucket for analytics purposes.

Nudge TTL Flow

CloudWatch event expires the nudge after it reaches the expiry duration.

Some notable points about Nudges Platform

  1. Configurable, simple, and lightweight
  2. Excellent support for real-time activities
  3. Reusable and easy-versioning templates
  4. Efficient nudge payloads delivery.
  5. Built-in data enrichment.

What does Nudges Platform offer compared to other similar solutions?

  1. We can easily update all nudges' classification on the fly simply by updating the configuration template on the nudge catalog service itself.
  2. Nudges Platform collects all of the customers' expired nudges as well. This point allows us to monitor the platform's health as events, drop rates, and batch performance funnels right on the platform dashboard.

What’s next?

We at Halodoc always want to improve the tools we have created. So we plan to make some improvements to the Nudges Platform. This platform could serve our customers better in-app experience and provide better data quality for the Halodoc team with less sorrowful effort.

Several planned updates are lining up on our queue:

  1. Provide actionable nudges
  2. Improve nudges visibility to reduce customer confusion
  3. Next version of nudges templates.

Read also:

LiveConnect - Leveraging MQTT as a scalable, low-latency persistent connection transport mechanism for mobile devices
LiveConnect is a home-grown low latency persistence connection transport platform built over MQTT protocol. We wanted to establish a persistent connection with all of our clients(user’s device), the only way to build it by moving towards two ways of communication protocol.
LiveConnect - low latency transport mechanism with MQTT for iOS
LiveConnect is an in house messaging platform designed for fast, efficient, power-sensitive, and reliable data movement to and from connected nodes. A node can be any client i.e web, iOS, Android, and even backend.

Join Us!

We are always looking out for top engineering talent across all roles for our tech team. If challenging problems that drive significant impact enthrall you, do reach out to us at

About Halodoc

Halodoc is the number 1 all-around Healthcare application in Indonesia. Our mission is to simplify and bring quality healthcare across Indonesia, from Sabang to Merauke. We connect 20,000+ doctors with patients in need through our Tele-consultation service. We partner with 3500+ pharmacies in 100+ cities to bring medicine to your doorstep. We've also partnered with Indonesia's largest lab provider to provide lab home services. To top it off, we have recently launched a premium appointment service that partners with 500+ hospitals that allow patients to book a doctor's appointment inside our application. We are incredibly fortunate to be trusted by our investors, such as the Bill & Melinda Gates Foundation, Singtel, UOB Ventures, Allianz, GoJek, Astra, Temasek, and many more. We recently closed our Series C round and, In total, have raised around $180 million for our mission. Our team works tirelessly to make sure that we create the best healthcare solution, personalized for all of our patient's needs. We always try to run continuously to simplify healthcare for Indonesia.

Syahrul Arifuddin

Software Development Engineer, Backend