Sometimes it is one or more programs writing to a queue or topic, and other programs reading from that topic.
Or programs writing to and others reading from a Unix pipe.
Or programs talking to each other using HTTP.
Or Erlang processes communicating concurrently on one machine or across a network.
Or different programs sharing one database.
Or many objects communicating by passing messages in a small talk program.
There are many ways to encapsulate programs and have them interact.
write(message), read() -> message
> Or programs talking to each other using HTTP.
request() -> response
> Or Erlang processes communicating concurrently on one machine or across a network.
sendMess(message), waitMess() -> message
> Or different programs sharing one database.
execute(query) -> response
...
I'm a mathematician at heart so I'm staying away from category theory as long as possible.
That's not great.
Unfortunately been dropped into that situation. The system was constantly broken due to missing of malformated arguments. Nobody dared to change anything.
Same applies to prematurely microservicing a monolith. At least there folks seem to be sensible enough to use protobufs or json, instead of loosely typed strings.