Careeroza
Production Checklist
Before Going Live
| Area | Checklist |
|---|---|
| Design | Each service owns its data; no shared tables; APIs and events documented (OpenAPI, AsyncAPI) |
| Data consistency | Saga with compensations for every multi-service write; outbox for every event; idempotent handlers |
| Resilience | Timeouts on every remote call; circuit breakers; retries only for idempotent operations; fallbacks for optional data |
| Security | JWT validation in every service; audience and scope checks; client credentials or mTLS between services; no secrets in Git |
| Observability | Trace ID in every log line; RED metrics dashboards per service; alerts with runbooks; DLT monitoring |
| Kubernetes | Resource requests/limits; readiness, liveness and startup probes; graceful shutdown; PodDisruptionBudgets; HPA |
| Delivery | One pipeline per service; immutable image tags; expand/contract migrations; canary with automatic analysis; one-command rollback |
| Operations | Backups tested by restoring; load test at 3x expected peak; chaos test (kill a Pod, stop Kafka) in staging |
Load Test Before a Sale
Example
A quick load test with k6 against staging shows whether the system meets its targets:
k6 run --vus 500 --duration 5m checkout-test.jsExample output
checks.........................: 99.87% ✓ 148203 ✗ 192
http_req_duration..............: avg=142ms p(95)=388ms p(99)=712ms
http_reqs......................: 148395 494.6/s
orders_confirmed...............: 49421
orders_cancelled_out_of_stock..: 311
✓ p(95) < 500ms ✓ error rate < 1%Note: If the numbers are bad, use the traces to find the slowest span first. In practice the culprit is usually a missing index, an N+1 call pattern, a too-small connection pool, or a synchronous call that should be an event.