Skip to content

Work

Systems I’ve built.

Each of these is written as an engineering case study rather than a project card: what was difficult, what could not be changed, how the system worked, what I chose and why, what it cost, and what it taught me.

FlagshipCommunication infrastructure

High-Volume Campaign Platform

Laravel · Redis · MySQL · ClickHouse · Elasticsearch · AWS · Docker

Evolving a mature, multi-tenant Laravel campaign platform into an asynchronous, observable sending system engineered for billion-scale workloads, without stopping the product.

The system was already mature. The goal wasn’t to rewrite it. The goal was to isolate bottlenecks, introduce better execution paths, and evolve the architecture without breaking existing functionality.
  1. 01

    Recipients

    Segments resolved per tenant

  2. 02

    Streaming

    Cursor-based, never loaded whole

  3. 03

    Queue orchestration

    Chunk, order, pace

  4. 04

    Redis

    Queues · dedup · throttles · cooldowns

  5. 05

    Batch processing

    Workers pull bounded batches

  6. 06

    Send infrastructure

    Providers, failover, webhooks deferred

  7. 07

    Analytics

    Events, not row updates

  8. 08

    ClickHouse

    Per-campaign send data, columnar

Campaign execution path after the redesign · recipients to analytics · names generalised

Key decisions

Five architectural choices carried the redesign. Three of them are here; the case study explains all of them, what each cost, and what they changed.

  • Decision 01

    Stream recipients instead of loading them

    Memory ceilings were the first wall. Cursor-based streaming made the audience size irrelevant to worker footprint and let batching become a tuning parameter instead of a limit.

  • Decision 02

    Put coordination state in Redis, not MySQL

    Deduplication, throttling and cooldowns are high-frequency, short-lived and latency-sensitive. Redis is the right home for that; a relational table under row locks is not.

  • Decision 03

    Defer webhook processing

    Providers deliver events in bursts that had nothing to do with our capacity. Accept, enqueue, process. The database stopped being hammered by someone else’s traffic pattern.

  1. 02

    Internal developer CLIcli

    Developer tooling

    A developer CLI for the campaign platform: a thin orchestration layer around Docker Compose that understands the application’s topology.

    Bash · Docker Compose · Laravel · Redis

    Case study
  2. 03

    Amana Market

    Financial & marketplace infrastructure

    The platform behind CoAmana’s market hubs: member onboarding and KYC, buy-now-pay-later ordering, wallets and payout rails, finance automation and analytics, built as an event-driven Laravel monolith where every money-moving step runs off the request thread.

    Laravel · MySQL · Redis · Horizon

    Case study
  3. 04

    MarketView

    Data & intelligence platform

    A data-intensive intelligence platform that turns fragmented market activity into structured, queryable insight.

    Laravel · MySQL · ClickHouse · Redis

    Case study
  4. 05

    Angalia

    Verification infrastructure

    KYC verification for Kenyan businesses: instant validation of National ID, KRA PIN and vehicle registration, exposed as a service others build onboarding on.

    Laravel · MySQL · Redis · APIs

    Case study

Contact

Building something difficult?

I’m interested in hard engineering problems, ambitious products, and systems that need to work at scale.

Get in touch

kenmsh@gmail.com