One of the challenges of designing distributed systems is to decide which of the services that compose the application are loaded in the same process and communicate directly and which should be deployed on different boxes and use inter-process communication. Sometimes, we cannot anticipate this at all and we’d want the flexibility to change it based on usage metrics collected while the system is running in production. In this session we will learn, from real life projects experience, how we can achieve the flexibility of deciding only at deploy time, without changing the code, on which of our services communicate in same process and which use inter-process communication. We will achieve this using the iQuarc.AppBoot library, which is an abstraction over a Dependency Injection Container and provides support for modular applications.