I maintain a pair of Nuget packages. Let's call them Rosencrantz and Guildenstern (why not?). Guildenstern has a dependency on Rosencrantz, so if you install Guildenstern, you get both of them.
It turns out that, in practice, you always need both of them; installing just Rosencrantz is valueless. Furthermore, it turns out that they need to be updated in lock-step. So if you update Rosencrantz and not Guildenstern, you might get weird problems. (If you update Guildenstern, its dependencies will automatically update Rosencrantz as well, so that works fine.)
I want to consolidate these into a single package. Ideally, I'd like to name this package Rosencrantz, because as far as developers are concerned, that's what this is called, and the fact that they also need to install Guildenstern is a bit of a point of confusion. (This means that people regularly upgrade Rosencrantz and not Guildenstern, causing problems.) I can do that: I can change my build and publish process so that v1.1 of Rosencrantz includes v1.1 of Guildenstern, and never publish a v1.1 of Guildenstern separately. But if I do that, then when someone updates their project from Rosencrantz v1.0 to v1.1, they'll still have Guildenstern v1.0 in their project, plus they'll get Guildenstern v1.1 along with Rosencrantz v1.1.
How can I make this a clean developer experience? My ideal-world scenario is that when a developer upgrades to Rosencrantz v1.1 or later, Guildenstern v1.0 is automatically removed from their project.