In the early days, networking issues affected only programmers working on low-level software: operating systems, network protocols, remote filesystems, and so on. Today, every system is a distributed system. Every application must grapple with the fundamental nature of networks: networks are fallible. The wire could be broken, some switch or router along the way could be broken, or the computer you are addressing could be broken. Your thermostat can’t talk to your TV because the microwave is on. Even if you’ve already established communication, any of these elements could break at any time. When that happens, your code can’t just wait forever for a response that might never come; sooner or later, it needs to give up. Hope is not a design ...

Get Release It!, 2nd Edition now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.