In function composition architectures, we would want at least three principles met:
Substitution: being able to replace (or perhaps extend/modify) a component without breaking the rest of the system;
Isolation: each component should be a black-box, no service should be aware of other services' implementation details;
Zero-waste: since serverless is about pay-per-use, we would like to avoid a double-billing situation, for example (more on that below)
https://dev.to/dashbird/production-ready-microservices-composition-and-orchestration-37jn