...
The current tight coupling of code makes it harder to reason over about the expected behavior of the system, as code is layered on top of more code, each layer potentially influencing behavior that is unpredictable.
In order to start unwinding this ball of yarn we need need to refer back to some Good Design Strategies:
...
The proposed architecture needs is based on trying to meet the following Proposal Goals. The main goals are Abstraction, Separation of Concerns and Modularity.
Bootstrapping Lifecycle
Upon startup, each module/component will follow the following bootstrapping lifecycle.
...