I often come across teams that have QA individuals, which I neither encourage nor discourage. However, one practice that I try to promote is the idea of cross-functional individuals rather than cross-functional teams. I find that when QA members are introduced, members tend to rely on QA for testing and quality-checks instead of continually being responsible for their work. If QA individuals are implemented properly, as a second set of eyes to ensure quality along with the developers, then QA individuals can become the co-enablers for specific backlog items. This practice can allow QA members to grasp some of the development aspects while facilitating. Developers can also take on this role of co-enabling QA to gradually form a cohesive team with cross-functional members. Creating cross-functional members through experience and knowledge sharing techniques will force the team to communicate and collaborate as they work.
Another one of my findings is that the more efficient you want the team to be, the more you want to decrease the time between when an error is created and when the error is discovered. Training cross-functional members can decrease this period by increasing expertise in specific areas. Issues that are discovered faster can be fixed faster, leading to more efficient operations.