Loading
← All work

Messaging at scale · DPL, 2024 – 2026Bulk Push Notification Scheduler

Built the scheduler behind bulk push campaigns: 700–800k notifications per run in 7–8 minutes, read in chunks and sent with controlled parallelism to Android (FCM) and Huawei devices.

Company

DPL

Role

Software Engineer

Period

2024 – 2026

Stack

.NET, Schedulers

700–800knotifications per run
7–8 minto dispatch a full run
how it workshow it works

800k recipients, never all in memory at once

Pick a step to replay it

Adminimports a fileNotificationsbody · type · timeMSISDNsper notificationSchedulerreads in chunks2 workerssemaphore = 2FCMAndroidHuaweiHMS PushMarked processed12345retry failed700–800k per run · 7–8 min

The problem

A campaign can target 800k or more MSISDNs. Loading that many recipients into memory at once would take the system down, and anything that fails to send still has to go out.

What I built

  1. Back-office flow: the admin imports a file of MSISDNs and sets the notification's body, type, and send time
  2. A scheduler picks up unprocessed notifications, then reads the MSISDNs stored against each one
  3. Recipients are read in fixed-size chunks instead of all at once, since holding 800k+ records in memory is not safe
  4. A semaphore caps parallelism at 2, so two workers each process a chunk at a time
  5. Each worker looks up the device (FCM or Huawei) and the notification content, then delivers to the right platform
  6. Sent records are marked processed, and anything that failed is retried once every chunk has been delivered

Stack.NET, Schedulers, Semaphore, FCM and HMS Push

written upwritten up

Read the engineering note

next case studynext case study

Redis Connection Multiplexing

ReliabilityDPL, 2024 – 2026

Redis Connection Multiplexing

In the Mixx Tanzania app, every Redis call was opening its own connection. At peak that went past the connection limit and caused downtime, so I replaced it with one shared, multiplexed connection.

600k+concurrent sessions without running out of connections

Built with.NET, Redis and Connection multiplexing

Read case study

Building something that has to work on the first attempt?

Open to product, full stack & backend roles.

Let's talk