A membership business is a billing system with content attached. The failure that costs money is not a slow page — it is a payment notification that arrived and was never processed.
Almost every request is from a signed-in member, and the most important requests of all come from a payment processor rather than a person.
A renewal, a failed charge and a cancellation all arrive as POSTs from your processor. Cached or rate-limited, they are lost and the member's access silently diverges from what they paid for.
Retry schedules and expiry reminders are cron jobs. On visitor-triggered cron a quiet Sunday means the retry never fires and the subscription lapses for no reason.
Every member is logged in, which is precisely the traffic a page cache refuses. The object cache is what carries the load instead, and it has to be sized for it.
Orders, subscriptions and their meta grow forever and are never deleted. Three years in, the subscriptions admin screen is the slowest page you own.
A member export or a revenue report is a long query over your largest tables. Run in a page request it either times out or holds a worker for a minute.
The expensive failures here are quiet: a stalled queue, a dropped webhook, a retry that never fired. None of them produce an error anybody sees until revenue is missing.
Processor callbacks arrive in a burst while members sign in to check their access, and both are entirely uncacheable requests.
These differ from a standard WordPress site on the same plan, and each follows from revenue depending on requests that cannot be cached.
| Setting | What we do | Why |
|---|---|---|
| Processor webhook endpoints | Exempt from caching and from rate limiting entirely | Renewals, failed charges and cancellations all arrive as POSTs from a payment processor, and one dropped by a cache leaves a member's access permanently out of step with their billing. |
| Billing schedules | Run by the platform scheduler rather than by visitor traffic | Dunning retries and expiry reminders are time-critical, and WP-Cron simply does not fire on a quiet day, so a recoverable failed payment turns into a cancelled subscription. |
| Object cache sizing | Sized against the signed-in working set rather than a default | Every member is logged in, so the page cache never applies and the object cache carries the entire load it would otherwise have been spared. |
| Subscription table maintenance | Indexed with archival for closed subscriptions | Orders and subscription meta accumulate permanently in a business built on recurring billing, so the admin screens degrade steadily even while traffic stays flat. |
| Report and export jobs | Executed as background jobs rather than inside a page request | A member export queries the largest tables you have, and running it in a request either exceeds the execution limit or holds a worker hostage while it finishes. |
Every plan includes free migration, daily backups, SSL and 24/7 support.
Free migration, webhooks that always land, and retries that fire on a quiet Sunday.