Using the tight coupling strategy has the immediate advantage that it is, in some respects, more straightforward and easier to optimize compared to loose coupling. For example, data exchange between the parts of the program that treat different subsystems becomes simple and efficient. However, it can lead to considerably higher long-term maintenance efforts because of the larger code base. Extending the multiscale capabilities of a tightly coupled implementation, e.g. adding support for new QM methods or MM force fields, can involve substantial implementation effort and often results in duplicated functionality that is already present in other programs. Moreover, multiscale capability is often added to existing programs that are otherwise dedicated to a specific model and thus also optimized with that model in mind. This, combined with the fact that the best parallelization strategy for different models can be different, can complicate the parallel optimization of multiscale methods in monolithic programs. The advent of massively parallel computers, with millions of cores, and hybrid architectures (e.g. hybrid CPU/GPU computers) makes it even more challenging to achieve high performance in the tight coupling strategy. Exploiting the evolution of computer architectures within the monolithic tight coupling paradigm may prove particularly challenging in such a context.