Short version:
We have multiple teams each developing multiple apps. They need to share some data. Should we combine these apps into one larger one to simplify data integration or should we keep them separate and utilize some data exchange/caching mechanism?
Longer version:
We have a number of teams each working on a set of applications. Many of these applications need to share data. One option is to use asynchronous messaging to have one system of record - where all writes occur - and to broadcast that data out to any other systems that need it. These systems would store the bits of data they need in a read only cache (in their database).
The benefit of this layout is that one system can blow up without affecting the other systems. It also makes it easier for individual teams to work on their individual applications. It makes scheduling of releases easier, smaller code base to navigate, etc.
Another option is to decide that these apps share way too much data, and that the overhead from the messaging/caching is too high. In this case you could decide to merge these three applications into one larger app. You would then completely eliminate the data integration problem, since you'd move the integration into the app's individual module's service/transactional layer. In other words, MyGiantApp could still be split (jars, app contexts, etc) into various modules who speak with each other via transactional services API of the other module. In our case we'd be using Spring almost like a service bus, with method invocation instead of web services or async messaging.
While this second option simplifies data integration, it complicates development. Now X teams have to work on the same code base. This can be eased somewhat by using branches, continuous integration, and separate libraries/contexts, etc, but at the end of the day it's still one deplorable artifact we're all building. Also, now the mistakes of one team can spread more easily to the entire app; one app blowing out the heap could take all down.
How would you decide when to use solution #1 and when to use solution #2?
I've put this in a seperate answer as its focus is quite different to my first one.
It sounds like you've thought things through and have a good grasp of both your problem and solution. Let me have another crack at (what I think is) your key question...
How would you decide...
Go back to basics: start with what you know to be true.
Have a whiteboard workshop with relevant people from your team(s), in which you need to:
This information should be enough to start establishing a framework for discussion and decison making.
There's also some extra things you can do ahead of this workshop (or as part of it depending on the political and social dynamics of your situation).