Runbooks.
The implementation layer — step-by-step production checklists for the moments where the system is already live and a misstep is expensive. When to run it, the procedure, how to verify it, and how to back out.
10 runbooks
- Database5 steps
Adding row-level security to a live multi-tenant table
Put the database-level tenant backstop under a table that currently trusts application scoping alone — without breaking production. Wire the context first, verify it's always present, then enable and force RLS.
- PostgreSQL
- Row-Level Security
- Multi-tenancy
- Performance5 steps
Killing an N+1 query under load
The endpoint that's fast in dev and melts in production. Measure the query count, eager-load the relations, replace unbounded subqueries with batched joins, add the covering index, then cache the aggregate.
- Laravel
- PostgreSQL
- Eloquent
- Mobile5 steps
Shipping a mobile release without out-of-bundle charges
Pre-release checklist for any app that uploads, downloads, or syncs: stream instead of buffer, default large transfers to Wi-Fi, make cellular a choice, and audit SDKs for background traffic you'll be billed for.
- iOS
- Android
- Networking
- Database5 steps
Diagnosing and fixing a production deadlock
Intermittent “deadlock detected” at peak — or silent data drift after it. Capture the two conflicting statements, find the opposing lock order, impose one order, and retry the victim instead of surfacing it.
- PostgreSQL
- MySQL
- Transactions
- Integrations5 steps
Wiring a new webhook consumer safely
Every inbound webhook is at-least-once and retried until you 2xx. The checklist to onboard a provider idempotent from the first delivery: verify, dedupe on the event ID, record-and-enqueue, respond correctly.
- Webhooks
- Laravel
- Redis
- Incident5 steps
Rotating a leaked secret
A key in a commit, a log, or a client bundle is already compromised. Revoke first, rotate, redeploy, purge, and audit — in that order — because scrubbing git history does not un-leak anything.
- Secrets
- Git
- CI/CD
- Database5 steps
Zero-downtime schema change (expand / contract)
Change a schema on a live, high-traffic table without downtime or a long lock: expand additively, dual-write, backfill in throttled batches, switch reads, then contract — each phase independently safe.
- PostgreSQL
- Laravel
- Migrations
- Workers5 steps
Deploying daemonized queue workers safely
Long-lived workers are where deploys drop jobs, memory creeps, and old code keeps running after release. The checklist for supervising, bounding, and gracefully restarting them.
- Laravel Horizon
- Supervisor
- Redis
- Runtime5 steps
Hardening Laravel Octane against state leaks
Moving to a persistent worker means the container survives between requests. This is the checklist that stops one request's tenant, auth, or config from bleeding into the next.
- Laravel Octane
- PHP
- Swoole
- Caching5 steps
Tenant-safe cache invalidation with tags
Namespace keys per tenant, group them with tags for one-call invalidation, version them by deploy, and keep a TTL as the backstop — so a shared cache never serves one tenant's data to another or goes stale after a write.
- Redis
- Laravel
- Multi-tenancy