In Chapter 5, we introduced two major problems that arise in the design of distributed applications: network latency and the possibility of partial failure. Clearly, when designing a server (or choosing between design alternatives), you should take these problems into account. In particular, your goal should be to minimize the impact of network latency and to avoid the problems caused by partial failures.
The problem is translating the desire to avoid these problems into specific design criteria. What follows is a list of questions you should ask yourself when making design decisions or evaluating designs. This list isn’t intended to be complete; as you get more experienced at designing distributed systems, you will undoubtedly come up with more questions, and your own ways of thinking about these problems. It is, however, a good start.