For OTPs and password resets, seconds are the metric. Where latency hides in the sending path, how to measure time-to-inbox honestly, and what budgets to hold.
Marketing email is judged on placement; transactional email is judged on a stopwatch. A one-time passcode that arrives in four seconds is infrastructure; the same passcode in ninety seconds is a support ticket, an abandoned login, and a user retrying until your own resend logic rate-limits them. Yet most teams measure transactional mail with delivery rates, a metric that scores a five-minute OTP as a success. Time-to-inbox is the real SLO, and it has to be measured end to end, because the latency hides in four different places.
Where the seconds go
Segment one is yours: from the triggering event to submission at the provider. Job queues batching sends, workers waiting on template rendering, and retry middleware add up quietly, and an OTP that sits eight seconds in your own Sidekiq queue has lost its budget before leaving the building. OTPs and resets deserve a synchronous or priority path, never the same queue as receipt PDFs. Segment two is the provider: their queueing and throughput to the destination. Segment three is the SMTP conversation itself, usually fast, occasionally tarpitted. Segment four is receiver-side: security scanning, greylisting on first contact, and the mailbox provider's own internal delivery, none of which you control and all of which you experience.
Measuring honestly
A time-to-inbox measurement stack
- 1
Timestamp the trigger, not the send
The clock starts at the user action (login attempt, purchase), captured as an event property that travels with the message via a custom header or metadata.
- 2
Instrument the segments you own
Trigger-to-submission from your own telemetry, submission-to-accepted from the provider's API response and events. These two numbers separate your queue problem from theirs.
- 3
Probe end-to-end with seed mailboxes
Automated probes trigger real sends to mailboxes you control at Gmail, Outlook, and Yahoo, and measure arrival via IMAP polling. This is the only view that includes receiver-side time.
- 4
Report percentiles per provider and stream
Averages hide the tail where users suffer. p50/p95/p99 per mailbox provider per stream, charted continuously, with alerts on p95 breaching budget.
- 5
Correlate spikes with causes
Latency spikes map to your deploys, provider incidents, deferral bursts in bounce logs, or one destination greylisting. The segment instrumentation names which.
Engineering the budget down
Isolation first: transactional mail rides its own subdomain, its own IP pool or provider, and its own submission path, so a marketing campaign can never queue in front of a password reset. This is the stream separation argument again with a stopwatch attached: shared infrastructure means shared congestion, and campaign bursts are exactly when your provider's queue is deepest. Priority second: within the transactional stream, authentication mail (OTPs, resets, verifications) outranks receipts and notifications, and providers with priority routing or dedicated transactional products earn their pricing here. Hygiene third: the deliverability fundamentals double as latency work, since a stream with pristine reputation gets accepted on the first attempt while a suspect one gets deferred into retry cycles that turn seconds into minutes.
The stubborn tail is receiver-side. Greylisting delays first-contact mail by design, which for OTP flows means the first login from a new address at a greylisting receiver eats a retry interval; stable envelope senders keep the triplet cached so it happens once per recipient rather than per message. Corporate gateways add scanning seconds you cannot remove. The product-side mitigations matter as much as the infrastructure ones: set expectations in the UI ("this can take a minute at some providers"), make codes valid long enough to survive realistic latency, rate-limit resends generously, and offer a non-email second factor where the stakes justify it.
The SLO conversation
Time-to-inbox belongs in the same SLO framework as any latency-sensitive dependency: a budget per stream (authentication mail tighter than receipts), percentile targets, error budgets, and a dashboard someone owns. The measurement also changes vendor conversations, since a provider's marketing says fast and your seed probes say p95 of 47 seconds to Outlook at peak, which is a negotiation position. Most teams that instrument this for the first time find one embarrassing surprise in their own segment one, fix it in a day, and halve their p95 before touching anything downstream.
Frequently Asked Questions
What latency budgets are realistic?
Is delivery rate not enough for transactional monitoring?
How many seed probes are enough?
Should OTP mail skip the queue entirely and send synchronously?
Key Takeaways
- Transactional mail is judged in seconds, and delivery rate scores five-minute OTPs as success
- Latency accumulates in four segments: your queue, the provider, the SMTP path, and receiver-side processing
- Measure from user trigger to seed-mailbox arrival, reported as percentiles per provider and stream
- Isolate transactional infrastructure so marketing bursts can never congest authentication mail, and prioritize OTPs within it
- The receiver-side tail is partly immovable; product design (expectations, code validity, resend logic) absorbs what infrastructure cannot
Related articles
Deliverability Postmortems: Learning From Incidents
The incident is over, placement recovered, and the pressure to move on is enormous. The blameless postmortem practice that converts each incident into prevention.
Backscatter: The Bounces You Never Sent
When spammers forge your domain as their envelope sender, the bounces come to you. What backscatter is, why it happens, and how to stop causing and receiving it.
DNSSEC for Email Operators: Worth It, and How Not to Break Everything
Every email trust decision resolves through DNS, and DNSSEC is what makes those answers tamper-proof. What it buys email, what DANE requires, and safe operations.