Re-reading Martin Kleppmann's Designing Data-Intensive Applications for the second time. After shipping production systems at Factoryze, the chapters on replication, partitioning, and transactions read completely differently.
The section on linearizability vs. serializability finally clicked. When you've actually debugged a race condition in production, the theory stops being abstract.
Highly recommended if you haven't read it. Even more recommended if you have — wait until you've shipped something non-trivial and read it again.