I am wondering how projects that have multiple component teams manage their sets of cookbooks?
We are trying to figure out how we can have an ops team provide a set of "common component" cookbooks that can be re-used by other teams that will also write their own cookbooks. For example, the ops team should own the Java cookbook, while a component manages their cookbooks written for their component or build engines.
From my little experience with chef server, this kind of workflow seems to not be well supported since the server stores and manages all cookbooks - so there is a potential to overwrite a cookbook written by another team.
How do other projects deal with this type of problem?
A version control system (like git which Michael Hampton mentioned) is the usual solution to this: Your teams edit their cookbooks and store them in a git repository, and the server checks them out when it's time to push configurations.
There is a bit of added complexity here (you want to make sure your cookbooks don't override each other or create conflicts), but that can be solved through human factors control (make sure your teams talk to each other), or if you're ambitious you can use git hooks to programmatically ensure you're not getting yourself into trouble.
Storing your cookbooks in version control has other benefits - like the ability to branch them for development, and to easily get back to a previous revision if you discover something horribly broken.