Scott: Thanks for sharing Polymer's perspective on this. I'm still unsure where that leaves businesses that want to include a variety components which aren't all developed in lock-step.
Let's stipulate that Polymer is a special case in a number of ways. It's big, for one thing, and patches the browser in all sorts of ways that might make loading multiple versions challenging. Polymer's also got a sizable full-time team behind it that can maintain the project in perpetuity. Let's further stipulate that Polymer has a focused role that, once finished, will not change much in the future — and, hence, won't be subject to many breaking changes. Finally, Polymer has a non-trivial set of interrelated components whose deployments are closely coordinated by the team.
So let's set all that aside and consider the question: what about all the other components? Suppose components X and Y depend on some useful building block Z. Perhaps X and Z are actively maintained by teams, but Y is an evening hobby project for a single person. The day Z includes a breaking change that X wants to track — but which Y can't track yet (or ever) — the project including both X and Y is horked, no?
We could say that tracking all this is the responsibility of the project owner. If the makers of X, Y, and Z are very careful about versioning, perhaps the project owner can follow along closely enough that to see that they can't use the latest X yet, because that depends on the latest Z, and Y's still requires an older, incompatible Z. If the project owner is lucky, Y might update quickly enough. Or maybe the author of Y is off doing other things. Y still works on its own, but in practice it's useless because its dependency on an old Z makes Y unworkable in apps that include the latest and greatest X.
And all this complexity is in a tiny, toy case where the project owner can follow the dependency chain without too much trouble and work out which versions they can use. But I already have components with small, bushy trees of dependencies several levels deep. I think it'll be too much to expect someone to carefully walk through all the dependencies for every component their project includes to work out potential incompatibilities. That is, the "high-granularity, high-reuse model" creates enormous work. Even if Polymer itself closely manages backward compatibility and versioning, it's unlikely every component vendor will proceed as carefully.
I'm just expressing a concern that dependency management feels like an underexamined (or under-documented?) aspect of the component ecosystem. In practical terms, I'm concerned this will limit the ability of businesses to freely include components from different vendors who aren't closely coordinating their actions.