Thursday, 14:02
Mira compares prices. Its checkout calls GET /price/{sku} for every item in the basket, and that one lookup is 71% of the traffic. Prices are read far more often than they change, so they sit in Redis for 30 seconds in front of Postgres.
At 14:02 on Thursday a deploy flushed Redis. Within two minutes forty thousand baskets had missed the cache and gone straight to Postgres. The database hit 96% CPU, price p99 went from 11ms to 2.8s, and completed checkouts dropped 31% for nine minutes. It recovered on its own once traffic spread back over keys that were warm again.
The action item from the review: this read path has to survive a cold cache, and it has to survive Redis not being there at all. Prices stay correct and the checkout stays usable. The pricing rules and the database stay where they are.
What the starter gives you
The price service (Python and FastAPI) doing plain cache-aside over Redis and Postgres, and a harness around it. make up starts it on localhost:58000; every answer says where the price came from in source. make burst replays Thursday on a small scale: it empties Redis the way the deploy did, sends 40 requests for one SKU at the same moment, standing in for the forty thousand baskets, and prints how many reads reached Postgres and the p99 the callers saw. Postgres counts those reads itself, and it is tuned to behave like a busier primary than a laptop's. make redis-down and make store-down stop Redis or Postgres for real, and make contract checks the service still answers as it did.
You can port the service to another language: keep its route, port 8000 inside the container, DATABASE_URL and REDIS_URL, and run make contract until it passes.
Some of this won't fit on a laptop: caching across regions, warming the cache across a fleet, and what the business does with a price fetched from Postgres more than 30 seconds ago. Put those in your design notes.