Worklog Post

  • learn (System Design): read chapter 1 of Designing Data-Intensive Applications

Designing Data-Intensive Applications

Link: https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/

Chapter 1, Reliable, Scalable, and Maintainable Applications

This chapter introduces the fundamental ideas that underpin data-intensive applications. It breaks things down into three key concerns:

  • Reliability - the system should continue to work correctly even when things go wrong. This covers hardware faults, software errors, and human errors, and how to design systems that tolerate them rather than try to prevent them entirely.

  • Scalability - as the system grows, there should be reasonable ways to deal with that growth. The chapter introduces ways to describe load (using things like Twitter’s fan-out problem as an example) and how to measure and think about performance, including the importance of percentiles over averages.

  • Maintainability - the majority of the cost of software is in its ongoing maintenance, not the initial build. This section talks about operability, simplicity, and evolvability as the three design principles that help keep systems manageable over time.