I have a SharePoint 2013 site with Multi Tenancy configured. I have a Managed Metadata Service also configured in Partitioned Mode since it is a multi tenant environment. I have a Visual Studio project with Site Columns, Content Types, Lists and Event Receivers. Some of the Site Columns are of Taxonomy type. Also, all the Site Columns and Content Types are declarative (CAML based). The lists are created through code. There is a reason for this. For every Tenant, we have a site collection for Content Type Hub, Root Site and Document Center Site along with the Tenant Admin site. Once we deploy the Site Columns and Content Types in our Content Type Hub and publish the Content Types, these Content Types don't reflect in the other site collections till the Content Type Subscriber Timer Job runs (we have configured it to run for every 1 min, though) and our lists need to be created in the Root Site and they need these Site Columns / Content Types.
So, if we create the lists declaratively using CAML, then we were facing issues, since the Columns and Content Types were not getting populated. We could get around this only by creating the lists through code. Now, we have wrapped so many modules into a single WSP, since MS doesn't recommend using multiple WSPs. But the downside is any change in one of the modules, will require the entire functionality to be redeployed and the features of all the modules need to be reactivated. Also, sometimes, the columns behave weirdly. Some columns don't appear in the subscribed sites, though this is rare.
With that said, can anyone suggest a good solution for this problem? We have thought of splitting the WSPs based on the modules, which will improve the manageability, but the downside is to have multiple WSPs. The other solution is to have Feature Upgrade and Solution Upgrade. But I have read that Feature Upgrade & Solution Upgrade are complex and are not recommended unless absolutely required. So, please advise.