After the post about configurations and direct instantiation of entities, I remembered a problem I had with libraries maybe two years ago. I remember that some design teams used libraries a lot in older code, then stopped using them in newer code. I also noticed that different tools handled libraries a little differently. After looking at this and google, I think the issue was that I had expected "work" to refer to a library -- similar to how it is presented in tools.
The issue I recall was that some commonly used code was placed into "work", but then couldn't be referred to within another library because "work" would mean something different. Because existing code frequently referred to the common code using work.name, and because the synthesis tool only allowed a file to be in one library, the use of libraries was made more difficult and eventually new code just assumed everything was in "work".
I wish I had known this for some of the coregen VHDL cores that gave some entities the same name but with different ports...