I've been reading quite a bit, but I can't find any articles that fit our use case (maybe I'm blind), I'm after some suggestions or articles to read.
We have a couple of outsource teams who currently use SVN and I need to get them using our source control (Mercurial -Kiln) to enable use of CI/CD -AppVeyor. So there are multiple teams, working on multiple features (and of course with changing priorities).
Overall, the trunk has to be production ready at all times and is setup for CI/CD. Currently branches aren't part of CI/CD, only trunk, but we could introduce a dev & qa branch so builds could be automatically tested and deployed and hotfixes applied more easily).
We have a Dev->QA->Prod release process, however as priorities are changing or some developments are more complex than others, we end up in a situation where feature A (complex) and feature B (simple) are developed at the same time, feature A moves to QA (and as its complex takes time to test), whilst testing A, feature B is also moved to QA, tested and ready to go into production, however, feature A is not ready yet (or has changed requirements) so we can't push feature B into the trunk as it is already merged with A (sorry, I've tried to simplify this explanation, oh look, a high priority hot fix and tiny feature is required in production immediately).
Now in the SVN world our outsource team seems to be able to cherry pick changes and merge them into the trunk, so they don't have this problem (I noticed hg graft, though I don't fully understand its tradeoffs/repercussions).
Does anyone else have a development process as "flexible" as this, and how do you overcome the bottleneck and apply CI/CD?
My current thinking is to treat branches independently (test etc) until they are ready to be integrated into production, then the CI/CD through dev/qa/prod takes over.