Cost of glue
Modularisation in software design is about breaking down simple collections of complicated components into complex collections of simple components. A complicated component acts incorrectly when you cannot understand its internal behavior. A complex collection acts unexpectedly when you cannot understand their external interactions.
All non-trivial software is both complicated and complex, and we can refactor to trade-off between complicated and complex designs. Object-oriented programmers explored these trade-offs for the last few decades and now microservice architects are exploring them too.
Since working with a few microservice designs, I'm starting to see some trade-offs, especially with tracing interactions and serialisation overhead.
The image above was remixed using the following source image:
- "after the harvest" (CC BY 2.0)