On systems thinking
A short note about why most architecture decisions look obvious in retrospect but felt impossible at the time of making them.
A short note about why most architecture decisions look obvious in retrospect but felt impossible at the time of making them.
Designing Data-Intensive Applications, The Pragmatic Programmer, and a few papers on distributed consensus.