Capability
One tenant decides whether everyone else's mail arrives.
That single property makes a sending platform unlike any other multi-tenant product, and it dictates most of the architecture. Here is what it dictates, and what the other four hard parts are.
I built an email marketing platform from scratch and ran it for seven years, then built two more products on the same ground — an exchange that sells advertising inside other people's newsletters, and a campaign platform for creators. Different customers, the same five problems every time.
- 0 → 50M/day
- an email platform built from scratch and grown to peak volume
- 500+
- campaigns a month, scheduled and reconciled by a small team
- 1 bad tenant
- is enough to degrade delivery for every other tenant
- 3×
- engagement lift from one gamified subscription product
What makes it hard
Five problems, in the order they will find you.
01
Your tenants share a reputation, which is unlike any other SaaS
unapproved by default
every creation path, with a review queue and an approval gate
In most multi-tenant products a badly behaved customer harms themselves. In a sending platform they harm everybody. Receiving systems score the infrastructure, not the account — so one tenant mailing a bought list degrades delivery for every other tenant on the same paths, and the victims have no idea why their numbers moved.
That single fact reshapes the product. Permission to send cannot be a side effect of signing up; it has to be a gate with a human behind it. Accounts start unapproved, a balance or credit requirement discourages casual abuse, a public identity has to be established before the first send, and there is a queue where somebody looks.
Every one of those feels like friction when you are trying to grow, and every one of them is cheaper than the alternative. Once shared infrastructure is damaged, recovery takes months and there is nothing to ship that fixes it.
02
You cannot trust the surface your output renders on
An email client is a rendering environment you have no control over, that strips scripts, rewrites styles, blocks images by default, and behaves differently across dozens of implementations. Anything that must be correct cannot be code that runs there.
So the things that have to be right get rendered on the server and delivered as an image. Native ad formats in one of my products are composed server-side and served as a picture, because a picture is the only thing every client agrees about. Content that has to be current — a countdown, a price, a live number — is resolved at the moment of opening rather than the moment of sending, which is a different pipeline with different caching and different failure modes.
The general principle transfers well beyond email: when the display environment is hostile and unversioned, move the correctness to where you control it and ship the result rather than the instructions.
03
Tracking is a measurement system, and measurement systems lie by default
~40ms
between delivery and a scanner fetching every link, which is faster than any human
Open and click tracking looks trivial and is not. Security scanners fetch the tracking pixel and every link within milliseconds of delivery, so naive counting records a burst of engagement that no human performed. A link rewriter that touches every href will happily rewrite the stylesheet in the document head and record rendering as a click.
Both of those were live in a product of mine. One report showed an open rate above three hundred percent, which is at least an obvious symptom. The dangerous version is the one that inflates by forty percent and looks plausible.
Uniqueness has to be an atomic claim rather than a check followed by an insert, exclusions have to cover the assets a client fetches on its own behalf, and — the part nobody enjoys — when you fix it you have to recount and tell customers their numbers have gone down.
04
Sending is asynchronous, billing is not
claim first, act second
the ordering that turns a crash into a recoverable state
A campaign is queued, then delivered over minutes or hours, against a balance that is decremented as it goes. Every interesting bug in a sending platform lives in that gap.
The rules that survived contact with production: claim the ledger row before doing the work rather than after, so a crash leaves a recoverable state instead of a silent discrepancy. Derive balances from rows rather than holding a mutable number. And at zero, pause rather than drop — a customer whose sending stops can top up, while a customer whose messages vanished has lost something they cannot get back.
None of this is exotic. All of it is the difference between a platform an operator trusts and one they reconcile by hand every month.
05
The operator's tools are as much product as the customer's
Running five hundred campaigns a month is not five hundred times the effort of running one, but only if somebody builds the tooling for it. Scheduling, per-destination reporting, complaint projection, and a way of ranking which accounts need attention this week — none of it is customer-facing and all of it decides whether the operation needs three people or thirty.
The default sequencing is to build the customer-facing product and add operator tooling once the support load forces it. That order is expensive in a way that never appears on a roadmap, because by then the operation has already grown the headcount that the missing tooling required. I built that layer at an agency before building the platform it later supported, which is the order I would choose again — you learn what an operator actually does at two in the afternoon on a bad day, and it is never what the roadmap assumes.
The lasting version of this lesson: if your admin surface is an afterthought, your support cost is the product's real price, and it is paid every month forever.
What that buys you
The work, stated plainly.
- A sending or campaign platform designed so one tenant cannot damage the others.
- Approval, balance and identity gates that stop abuse before it reaches shared infrastructure.
- Tracking that counts people rather than scanners, and an honest recount when it has not been.
- Ledger-first billing for asynchronous work, where a crash leaves a recoverable state.
- The operator tooling that decides whether running it needs three people or thirty.
The volume side of the same story is under operating at scale, and the funnel that sits on top of it under first touch to conversion.
Building one of these, or repairing one?
Both are familiar. The repair usually starts with whichever of the five problems nobody has named yet. Five days, fixed price, findings in writing.
Get in touch