This document discusses using microservices with Varnish caching for improved performance and scalability. It describes moving from a monolithic Java application to many small, stateless services with Varnish caching all data. Key-value caching is implemented using X-Key to invalidate cache dynamically based on HTTP headers. This allows related cached objects to be automatically invalidated on a cache purge. The architecture has proven effective over 10 years in production by reducing complexity, improving debugging and scaling through statelessness and caching with Varnish and X-Key.