For example, if the framework provides text storage, adding text processing might be a mistake. Instead, make another framework that can be strung onto the text storage one.
It increases the granularity, and the usefulness of the modules. You could have multiple processing frameworks.
In addition, it allows you to refine discrete functionality domains (which can also be personnel assignment domains), and reduces the places for bugs to manifest. You can devote more tests to each framework.