Exercise 3: Why Ticket 3 Needed Two Separate Fixes — Possible Solution ==================================================================== THE TWO SEPARATE CAUSES, PER THIS CHAPTER ------------------------------ Session loss was caused by "the load balancer redistribut[ing] sticky-session assignments when the instance pool changed size" combined with the application still relying on local, per-server session storage (Chapter 5's own mechanism). The capacity shortfall was caused by new instances "repeatedly cycling in and out of ready state" because their readiness check depended on a slow third-party shipping-rates API (Chapter 8's own mechanism) - a completely different underlying mechanism. WHY BOTH HAPPENED AT THE SAME TIME ------------------------------ Both problems were triggered by the exact same event - the scaling action that changed the size of the instance pool. Scaling up both changed which server each sticky-session user was assigned to (causing session loss) and brought new instances online whose readiness checks then started failing due to an unrelated slow dependency (causing flapping) - one trigger event, but two genuinely independent consequences, each following its own separate mechanism. WHY ONE FIX COULDN'T ADDRESS BOTH ------------------------------ Migrating to a shared session store (the fix for session loss) does nothing to address a readiness check calling an unrelated third-party API - the two problems live in entirely different parts of the system (session storage architecture vs. health-check configuration) and share no common root cause beyond both being surfaced by the same scaling event. Similarly, narrowing the readiness check (the fix for capacity) would do nothing to prevent session loss on a future scaling event, since local session storage would still be in use. WHY THIS WORKS AS AN ANSWER ------------------------------ It names the two distinct underlying mechanisms clearly, explains why a single shared trigger event (the scaling action) doesn't imply a single shared cause, and explains specifically why each fix only addresses its own mechanism and not the other.