Skip to content

Senior + team lead · :Different · Proptech

Many channels, one message system per agency

:Different manages $1B+ in property. I led a small engineering team that owned the communications platform end to end: fan-out architecture delivering email, SMS, push, and in-app simultaneously, multi-tenant configuration so each agency sent under its own brand, and weekly company-wide architecture sessions where engineers, architects, and leads worked through real platform problems together.

Role

Senior + team lead

Scale

$35M-funded · $1B+ under management

Team

A small engineering team

Hero outcome

Multi-tenant comms, no per-agency build

Recreated mockup — confidential engagement.

The business problem

Communications were the whole product

Every maintenance request, lease renewal, inspection reminder, and payment notice runs through messaging — so comms isn't a feature at :Different, it's the backbone.

Three things made it hard. “:Different for Agencies” needed each agency to send under its own brand on shared infrastructure. The core pathways carried real legacy debt. And in-app messaging lived apart from the Kustomer CRM the operations team actually worked in, so customer context fell through the gaps between channels.

What I did

One system, many tenants, less debt

The hard part of communications isn’t sending a message. It’s dispatching every message reliably across channels simultaneously, keeping tenants isolated on shared infrastructure, and maintaining a CRM the operations team can’t be pulled out of. The system had to stay up for thousands of daily users while all of that was being extended.

1 · Multi-tenant, white-label comms

Replaced hardcoded templates and configs with a tenant-aware system: each agency configures its own branding, sender identity, and notification schedules over shared infrastructure. Moving from per-agency code to per-agency configuration meant new agency partners could onboard without custom engineering for each one.

Recreated mockup — confidential engagement.

2 · Orchestration over delivery

Email, SMS, and push ran through established third-party providers, so the team owned the orchestration logic — when, what, and to whom — instead of delivery plumbing. I extended the existing GraphQL layer for communication needs rather than bolting on parallel REST, keeping caching, batching, and type safety consistent across the platform.

Recreated mockup — confidential engagement.

3 · Fan-out communications architecture

I designed and built the fan-out architecture that made multi-channel delivery reliable. A single communication event is dispatched across email, SMS, push, and in-app simultaneously. Each channel is handled independently: a failure in one does not block the others, and each can be scaled or replaced without touching the rest. The result is a delivery layer that holds under load and degrades gracefully when it doesn’t.

Recreated mockup — confidential engagement.

4 · CRM integration & modernization

Wired in-app messaging into Kustomer so the operations team saw every customer communication in one place, syncing message state across systems without coupling them. In parallel: surgical migration of legacy pathways to TypeScript — not a rewrite — plus Jest, Sinon, and Mountebank testing that mocks the third-party comms services for integration tests that don’t depend on them being up.

Recreated mockup — confidential engagement.

5 · Company-wide architecture sessions

Beyond my own team, I ran the weekly architecture sessions for the whole engineering organisation. Every week, engineers, architects, and leads picked a real platform problem and worked through solving it together. Running those sessions meant staying across decisions well beyond my own team’s remit. It’s a different kind of technical leadership: less about output and more about how the org thinks.

I came in as senior to extend and modernize an existing platform. Not to rebuild it from scratch. I led the team that owned communications end to end.

The outcome

Scalable, unified, easier to ship

No per-agency build

The multi-tenant architecture let new agency partners onboard through configuration, not bespoke engineering for each one.

One operations view

The CRM integration gave operations a single view of customer communications across every channel, cutting the context-switching that lost support quality.

Less friction to ship

Legacy → TypeScript modernization and the testing infrastructure lowered the cost of shipping each new communication feature.

The volumes stay confidential. What I can say is what changed: agencies onboard without custom work, operations works from one view, and the team ships against less debt.

Built with

  • Node.js / TypeScript
  • GraphQL (extended)
  • Multi-tenant / white-label
  • Kustomer CRM integration
  • Jest · Sinon · Mountebank
  • Terraform / AWS

Next case study

AI that reads case law

1,200+ judgments, 89 categories, ~$30. Published with a frank retrospective.

Leading a team through a system that has to stay up?

Multi-tenant scale, legacy debt, and a roadmap that can’t slow down.