Good article which touches on real issues that a lot of developers won&#x27;t <i>really</i> appreciate themselves until it happens to them (unless they have a strong background in distributed systems theory, and maybe even not then). A little strange that it doesn&#x27;t use the word &quot;consistency&quot; even once though. :)<p>By dropping a cache into an existing system, you&#x27;re weakening consistency in the name of performance. At best, your strongly-consistent system has started taking on eventually-consistent properties (but maybe not even eventual depending on how you invalidate&#x2F;expire what&#x27;s in your cache). Eventual consistency can help you scale, but reasoning about it is really hard.<p>In some sense caching as described by OP is a tool to implement CAP theorem tradeoffs, and Eric Brewer described the reality of trading off the C (consistency) for A&#x2F;P (availability&#x2F;partition-tolerance) better than I ever could:<p><pre><code>  Another aspect of CAP confusion is the hidden cost of
  forfeiting consistency, which is the need to know the
  system’s invariants. The subtle beauty of a consistent
  system is that the invariants tend to hold even when the
  designer does not know what they are. Consequently, a
  wide range of reasonable invariants will work just fine.
  Conversely, when designers choose A, which requires
  restoring invariants after a partition, they must be
  explicit about all the invariants, which is both
  challenging and prone to error. At the core, this is the
  same concurrent updates problem that makes multithreading
  harder than sequential programming.</code></pre>