Designing Data-Intensive Applications: the Big Ideas behind Reliable, Scalable,