At the beginning of this topic we said that whenever you want to send some data to another process with which you don’t share memory—for example, when you want to send data over the network or write it to a file—you need to encode it as a sequence of bytes. We then discussed a variety of encodings for doing this.
We talked about forward and backward compatibility, which are important for evolvability (making change easy by allowing you to upgrade parts of your system independently rather than having to change everything at once). Compatibility is a relationship between one process that encodes the data and another process that decodes it.
That’s a fairly abstract idea because data can flow from one process to another in many ways. Who encodes the data, and who decodes it? In the rest of this topic, we will explore some of the most common ways data flows between processes via databases, service calls, workflow engines, and asynchronous messages.