Before
Sequential calls to multiple travel APIs on every page load — ~40s worst case — with no shared cache strategy.
Changes
- Parallel fetches where dependencies allow.
- Cache-aside Redis with destination-scoped keys and sensible TTLs.
- SSR + CDN for static shell; dynamic data behind cached API responses.
After
Cold paths improved dramatically; cached paths consistently hit ≤100ms for tour lists in production-like conditions.
Takeaway
Performance work here was 50% infrastructure (Redis, AWS, CI/CD) and 50% key design — bad cache keys waste RAM and serve stale data.