In our minds, your project is divided into modules, each with its level of difficulty and set of needs. As a result, the design of each module may be tailored to its specific needs. Despite this, we must treat architecture as a living organism, and it will alter and adapt as the project progresses.
In most cases, deciding on a single design for the entire system is bad. You should think of your system as a collection of modules and then pick a system that effectively meets the requirements of each component, always preferring simplicity.