  When we consider the application layer of networked infrastructures, data and
control flow are important concerns in distributed systems integration.
Modularity is a fundamental principle in software design, in particular for
distributed system architectures. Modularity emphasizes high cohesion of
individual modules and low coupling between modules. Microservices are a recent
modularization approach with the specific requirements of independent
deployability and, in particular, decentralized data management. Cohesiveness
of microservices goes hand-in-hand with loose coupling, making the development,
deployment, and evolution of microservice architectures flexible and scalable.
However, in our experience with microservice architectures, interactions and
flows among microservices are usually more complex than in traditional,
monolithic enterprise systems, since services tend to be smaller and only have
one responsibility, causing collaboration needs. We suggest that for loose
coupling among microservices, explicit control-flow modeling and execution with
central workflow engines should be avoided on the application integration
level. On the level of integrating microservices, data-flow modeling should be
dominant. Control-flow should be secondary and preferably delegated to the
microservices. We discuss coupling in distributed systems integration and
reflect the history of business process modeling with respect to data and
control flow. To illustrate our recommendations, we present some results for
flow-based programming in our Industrial DevOps project Titan, where we employ
flow-based programming for the Industrial Internet of Things.
