A calendar is not a health check
Waiting until “day four” does not make a mailbox ready for a higher send level. A ramp is safer when each increase requires evidence from the previous batch. For a small sender, health gates can be simple: authentication still passes, actual output matched the plan, permanent failures stayed near the recent baseline, temporary failures are understood, and inbound state was processed correctly. Time is still useful because it gives receivers and your own system a chance to produce feedback, but elapsed time should never override a failing gate.
Gate one: authentication has not changed
Before increasing, inspect at least one fresh received message from the active sending path. Confirm SPF/DKIM and DMARC alignment are still the expected values. This catches subtle changes after DNS edits, provider migrations, or account reconnections. Authentication failures are structural; lowering the batch by a few messages does not repair them. If identity is broken, stop the ramp and fix the record or signer first, then establish a new passing baseline with controlled tests.
Gate two: permanent failures are suppressed immediately
A 5.x.x address failure should change recipient state before the next batch. Count permanent failures as raw events as well as rates, because one or two bad addresses are meaningful when batches are small. Trace them back to list source and verification age. If the same source produces repeated dead addresses, re-verify or pause that segment rather than merely reducing the daily cap. A ramp should not teach the system to tolerate preventable hard bounces.
Gate three: transient failures have an explanation
A 4.x.x response is not permission to retry instantly. Enhanced status codes and the provider's text can indicate temporary rate, resource, or policy conditions. Group deferrals by recipient provider and time window. If one receiver starts deferring after the mailbox moves from 12 to 15 messages, hold the next increase while you observe whether a smaller, spaced batch behaves normally. The important question is whether the transient condition is bounded and understood, not whether the spreadsheet says tomorrow's target is 18.
Gate four: the queue did what you asked
Compare planned sends with message-level logs. Retries, duplicate jobs, and follow-ups can make actual volume much higher than the nominal campaign limit. A mailbox planned for 18 first touches might send 31 messages once scheduled follow-ups and a retried worker are included. That is a failed gate even if receiver metrics still look fine, because the operator no longer controls the experiment. Fix idempotency and total-volume accounting before raising the cap.
Gate five: recipient state is current
Volume growth increases the cost of stale recipient state. A reply at 10:12 should prevent the noon follow-up, and a hard bounce from Mailbox A should suppress the address before Mailbox B can contact it. Confirm that inbound processing, suppression, and send-time state checks work under the current workload. A ramp that increases only sending capacity while reply handling lags behind creates exactly the behavior that generates unnecessary messages and complaints.
Record why each increase was allowed
A useful ramp log contains date, planned and actual sends, authentication status, hard bounces, transient failures by provider, human replies, complaint signals if available, and a short decision: increase, hold, reduce, or pause. This turns “we usually add five per day” into an auditable operating system. When performance shifts later, you can identify the last known-good level and what changed, rather than reconstructing history from a campaign dashboard that was never designed for deliverability diagnosis.
Include receiver-specific health, not just a global bounce percentage
A domain can look healthy in aggregate while one receiving network is already pushing back. Group outcomes by destination family when volume is large enough to make that useful: Gmail, Outlook consumer domains, Yahoo and other major buckets. A sudden cluster of Gmail 4.7.28 deferrals should not be diluted by successful deliveries elsewhere. The same applies to Yahoo temporary deferrals that cite unusual traffic patterns or complaint pressure. This does not mean optimizing separately for every mailbox provider; it means preserving the receiver code so a local change is visible. A health gate can remain simple: no unexplained increase in permanent failures, no repeated provider-specific temporary limits, authentication unchanged, queue within plan, and contact state current. If one provider fails that gate, hold the global increase until the cause is understood.
Make the gate auditable by recording the decision
Each planned increase should leave a one-line decision trail. Example: “Move 18→24 tomorrow because 18 actual sends matched plan, zero permanent failures, one genuine reply, no repeated 4xx, SPF/DKIM/DMARC unchanged.” The opposite is equally valuable: “Hold at 18 because Outlook returned two authentication-related rejections after provider migration.” These notes stop the ramp from becoming an automatic calendar. They also let a later incident answer whether the last increase was supported by evidence or happened by habit. For a solo sender, a plain CSV is enough; the discipline matters more than the tooling. If the same gate repeatedly blocks progress for the same reason, fix the underlying list, DNS or queue problem instead of weakening the gate.
Require a queue-integrity gate before any volume increase
The sender should prove that its own scheduler is behaving before interpreting receiver feedback. Compare planned sends with actual submission timestamps, confirm each recipient was claimed once, and verify that retries did not create duplicates. If a job intended to send 20 messages actually submitted 27 because two workers overlapped, the next-day increase is invalid even when no provider complained. The infrastructure has already shown that it cannot enforce the requested cap. Fix the queue, replay the test at the same level, and only then consider increasing. This gate prevents a software bug from masquerading as a successful deliverability experiment.
Field checklist
- Require passing authentication before every material increase.
- Suppress permanent failures before the next batch and trace them to source.
- Do not auto-retry 4.x.x deferrals without classifying the response.
- Compare planned and actual sends including follow-ups and retries.
- Confirm reply and suppression state is re-read at send time.
- Log an explicit increase/hold/reduce/pause decision for each ramp step.
Primary sources
Standards and provider policies can change. These links are the reference points used for this field note.
- RFC 3463 — Enhanced Mail System Status CodesIETF / RFC Editor — 2.x.x, 4.x.x and 5.x.x delivery status code classes.
- Email sender guidelinesGoogle Gmail Help — Authentication, TLS, DNS, spam-rate and bulk-sender requirements.
- Gmail SMTP errors and codesGoogle Gmail Help — Temporary and permanent Gmail SMTP errors, including authentication and unusual-rate failures.
- SMTP Error CodesYahoo Sender Hub — Yahoo guidance for temporary deferrals, permanent errors, unknown recipients and traffic-pattern problems.
