It's a common scenario, my solution had some features but over time the concept has been reworked and now they're no longer being used and I want to remove them. In this example, I have a workflow and a child workflow. The child workflow has a dependency on the workflow that invokes it.
But they've been deployed as part of a managed solution.
No worries, I remove the components from my dev environment and export the solution as managed. When I import that solution into my test environment (or a client's environment) I'm faced with the scenario that I can't delete my components and apply my new solution because it can't delete a component with dependencies.
Turns out it's trying to delete the child workflow first. Of course that will fail, the parent workflow requires it!
If it would have deleted the parent workflow first, there would have been no problems, then the child, again at that point also no problems.
Delete components without dependencies first. Please!