Approaches to building super-configurable applications

Hi there,

I’m building an application that’s super-configurable. In fact, I’d want almost every part of the supervision tree for each “runner” to be initialized based on my configuration files – or, at some point, dynamically. This app runs indefinitely, and would ideally support swapping out modules at runtime.

I was wondering if anyone else here has experience with building these kinds of applications, and if so, how you managed to get the different parts to talk to each other? Right now, I’m using Phoenix PubSub to create a channel for each group of modules per “runner”, and publish messages on that channel whenever I want the different groups – or different parts of the same group – to talk to each other.

This works for now, but I’m concerned that it might become difficult for other developers to work out the message flow over time, and that I’d have to include a lot of boilerplate when I create new implementations of a certain set of functionality (macros could be useful there). Are there other approaches you would recommend, or that you use for your projects and I could investigate? If you need any more details to give and answer, please let me know. Thanks!

If you wanna go that far then I’d think using etcd / consul might be easier?