All posts Deliverability

The hidden cost of DIY transactional email

Rolling your own email stack feels cheap until you count the dev hours, the deliverability surprises, and the 2 a.m. pages. Here's what it actually costs.

Erik Vlčák
Erik Vlčák
Customer Success Engineer
6 min read

Almost every SaaS starts the same way: a single Mail::send() call, an SMTP server picked in a hurry, and a quiet hope that the welcome email lands somewhere useful. It works — right up until it doesn't.

Transactional email looks like a solved problem from the outside. You wire up a mail driver, drop in some credentials, and emails go out. But the moment your product grows past a few hundred users, the cracks start to show — and they rarely show up where you're looking.

The bill you can see

The obvious cost is infrastructure: a sending service, a couple of DNS records, maybe a queue worker. That's the part teams budget for. It's also the cheapest part. Here's the setup most teams reach for first:

app/Notifications/WelcomeMail.php
use Lettr\Laravel\Facades\Lettr;

Lettr::to($user->email)
    ->template('welcome')
    ->with(['name' => $user->name])
    ->send();

Clean enough. The problem isn't the code you write on day one — it's everything that surrounds it on day ninety.

The bill you can't see

The real expense of DIY transactional email is the work that never makes it onto a roadmap. It hides in interruptions, in debugging sessions, and in revenue you never knew you lost.

  • Deliverability drift — open rates quietly fall as your sender reputation erodes, and nobody notices until a customer does.
  • No visibility — when a user swears they never got the password reset, you have no log to check and no way to prove otherwise.
  • On-call tax — bounces, blocklists, and DNS misconfigurations become 2 a.m. pages for engineers who should be shipping features.
  • Template sprawl — every email lives in a different Blade file, and changing a footer means a deploy.

What good looks like

The fix isn't to hire an email-ops engineer. It's to treat transactional email as a product surface — something observable, editable, and monitored — instead of a fire-and-forget side effect.

You shouldn't have to choose between shipping features and knowing whether your emails arrive.

— Every developer who has debugged a missing receipt email

That means delivery logs you can actually search, alerts when open rates drop before customers complain, and templates your marketing team can edit without filing a dev ticket. The mechanics of authentication and warmup should be handled for you — not assembled by hand from a dozen Stack Overflow answers.

DIY transactional email is rarely a deliberate decision — it's the default you never revisited. The cost isn't a line item; it's spread across every engineer who gets pulled away to chase a bounce. Counting it honestly is usually enough to change the plan.

That's exactly the problem we built Lettr to solve: one platform for transactional and marketing email, with the deliverability work handled and a clear view of everything your app sends.