Just to add another slant to this:
There are things you can do within the model which will prevent metadata caching at runtime. Examples include hard-coding specific SQL queries in data source query subjects (ie modifying 'Select * from Table' to be something else), adding calculations to data source query subjects etc etc. If these issues are not addressed, the result is increased metadata callbacks from C8 to the data source(s) to determine metadata structure. A nifty way to prevent this would be that for each data source query subject you need to modify in the model, add in a second version of the data source query subject to the model but leave it unmodified. When defining your packages later on, include the relevant unmodified query subjects in the package definition, but mark them as hidden. In this way, metadata for all relevant tables can be cached by the C8 server, and metadata callbacks can be minimized.
If you've not nodded off by now after my incoherent rambling- well done!!!
Regards,
MF.