Self-organizing, cross-functional teams are good when it is possible and advisable to achieve them.
The question is how do you create them? I tend to look at the edge conditions because I believe that when you learn to handle difficult cases you also learn how to manage and teach the easier cases even better.
There are two methods I’ve seen given to achieve cross-functional teams. The first is to presume they are always possible and to just create them. The second is to explain their value and how to manage without them. Their value is fewer handoffs and delays, greater collaboration and innovation, increased ability to self-organize, fewer outside dependencies, a greater sense of ownership, an ability to try out new things, and more. Learning a little Kanban allows you to manage without cross-functional teams.
The first approach provides little guidance on achieving cross-functional teams. Worse, if doing Scrum, teams are often chastised for not achieving them (“ScrumBut”) often resulting in the abandonment of Scrum.
With the second you can start working towards and likely get to them as your understanding improves. This knowledge is useful even after achieving cross-functional teams as it can be used to increase flow.