I recently listened to Interview with Jürgen Höller on SE-Radio (lead developer on Spring framework project). One interesting thing he mentioned was that they are following really strictly the rule that there must be no circular dependencies between packages. Of course it's quite obvious that such dependencies on any level are not good but still quite often this heuristic is broken especially on package level.
One way how to solve this problem is by extracting an interface and moving it into client package. Previously I have not thought this to be very practical - why should I introduce interface just to improve some statical analysis benchmark. However I think now that by adding this interface it will be much easier to notice other (possibly more dangerous) violations on package level or maybe even on layers.
As an example many people who are using DDD approach are putting interfaces of repositories into domain package. By doing this any direct dependency on repository layer is removed. If now it is needed to implement some Query Objects it will not be that obvious anymore to put it into repository package/layer. Is it end of the world if we happen to put our Query Objects into repository package? Probably not but if we consider that the purpose of Query Object is to provide and abstraction of persistence mechanics then who knows.