Design a read-heavy product catalog that serves most reads from a cache instead of hitting the database every time.
Design the backend for a product catalog that is read far more often than it is updated. Shoppers browse products constantly, but the catalog itself changes rarely. Reading every product straight from the database on every page view wastes the database and is slower than it needs to be.
The one idea this design introduces is caching: put a cache in front of the database so that repeated reads of the same popular products are served from the fast cache, and only cache misses and the occasional update reach the database. Build on the basic web-app shape (clients enter through a load balancer and reach a scaled tier of application servers) and add a cache on the read path.
Lay out the architecture, then document the API and the trade-offs of caching, such as how a product update is reflected when a stale copy might sit in the cache.