Symptoms
capacity.headroom.lowarrives in the weekly review, with total demand past 80 percent of pool capacity.daily.run.incompletestarts appearing for workspaces that were fine last week.asobeast_workspace_daily_requests_estimatedgrows faster thanasobeast_pool_endpoints.- Registrations answer
503because the signup gate is already holding the line.
Triage
1
Measure the ceiling, do not estimate it
GET /jobs/budget gives the same view for one workspace.2
Separate growth from a store mix change
A Google Play keyword check costs roughly eight store requests against one for the App Store, so a handful of customers moving to Play can multiply demand without any change in customer count. Compare the two
store labels on asobeast_workspace_daily_requests_estimated week over week.3
Name the heaviest tenants
Sort the same metric descending, then check
workspace.cost.unpaid and workspace.cost.exceeds-revenue. A trial workspace taking a tenth of the pool is a different problem from healthy paid growth.Containment
- Close the door before the room fills. Set
SIGNUP_CAPACITY_MAX_UTILIZATIONso that registration is refused once tracked collection passes that share of daily capacity. It only applies when billing is enabled, so self hosted installs are never gated. - Leave existing customers untouched. Shedding work from paying tenants to admit new ones is the wrong trade in every direction.
- If one unpaid workspace dominates the pool, suspend it with a written reason rather than degrading everyone. Suspension stops collection for that workspace even on keywords another tenant also tracks, because a shared search is judged per workspace before any row is written.
- Do not lower the depth of Google Play searches as a first move. It changes the data customers already have and is hard to explain.
Recovery
- Buy datacenter endpoints ahead of demand. They are the cheapest input in the business by a wide margin, and the sync job adds them on its next run.
- Confirm capacity with
/admin/capacitybefore raising the registration gate. - Raise the gate in steps and watch one full daily cycle at each step.
- Revisit the plan limits if a single plan repeatedly reaches the pool ceiling on its own. A limit that never bites is not a limit.
Who to tell
- People who could not register, in the refusal itself. A waiting list is a better outcome than a broken product.
- Existing customers, only if their collection was actually affected.
- Nobody, for a gate that held. A gate doing its job is not an incident, it is the plan working.