Ask a falsifiable question
Chaos engineering investigates how a system behaves under a controlled disturbance. A useful experiment starts with a specific hypothesis, such as: “If one API replica becomes unavailable, the remaining capacity can serve the representative workload within the agreed error and latency limits.”
That is more useful than “kill something and see what happens.” Passing a staging test does not prove the code correct, and a production experiment is not automatically necessary for every team.
Define an experiment record
For an illustrative replica-loss test, record the environment, target selector, traffic model, expected behavior and observation period. Name the operator and the person who can stop the experiment.
Capture a healthy baseline first. Include user-facing request success, latency and active connections, together with the resource signals that explain changes. Establish that the remaining replicas have sufficient capacity before removing one.
Use an isolated or staging environment first. Any later production test needs explicit authorization and a bounded plan appropriate to the service.
Understand what the tool actually does
Chaos Mesh distinguishes Pod failure from Pod kill. Killing a Pod is an action; it does not mean the replacement remains unavailable for a requested duration. Controllers may create another Pod. Use the installed release's documented resource schema rather than an old scheduling field copied from a blog. Chaos Mesh Pod faults.
A namespace-wide percentage selector can reach more resources than intended. Resolve and review the actual selected targets before execution. A single test workload is a clearer starting boundary.
AWS Fault Injection Service supports stop conditions based on CloudWatch alarms. Those alarms must exist and represent the chosen steady-state boundary. Stopping an experiment does not necessarily undo an action already completed; recovery still needs its own plan. AWS FIS stop conditions.
Recovery is part of the test
For a service with long-lived connections, observe how clients reconnect, whether they spread their attempts and whether accepted work is lost or duplicated. A healthy replacement Pod does not prove every client recovered.
Record the effect of retries on remaining capacity. An aggressive retry policy can amplify traffic just when the system has less capacity. Verify deadlines and jitter rather than assuming a configured breaker contains every failure.
Distinguish readiness from liveness. Removing an instance from new traffic can be appropriate when it cannot serve requests. Restarting every instance because a shared dependency is briefly unavailable can worsen the incident.
Stop on evidence, then learn
Choose concrete stop conditions: excessive errors, unacceptable latency, unexpected target selection or failure of the observation system. Test the stop procedure before relying on it.
After restoring the environment, verify that temporary rules and fault resources are gone and normal behavior has returned. Write down what the experiment established, what differed from the hypothesis and what remains untested.
A useful result might be that ordinary HTTP requests recovered while a WebSocket client needed repair. Fix that behavior and rerun the focused experiment. Do not convert one passing scenario into a claim that the entire system is resilient.

Sardar Mukhshaf
Full-Stack & DevOps Engineer
I build scalable web applications, secure backend systems, and production-ready cloud infrastructure. My engineering focus spans interface design, API architecture, deployment pipelines, and observability. Follow for more deep dives into system architecture, performance engineering, and emerging technologies.
More from the practice
Keep the useful ideas close.
Follow new articles with your preferred RSS reader.
Open the RSS feed ↗


