After almost two decades of experience with different companies on different teams, I feel like the biggest problem with software teams is the lack of focus on the SW architecture. We don't properly define which parts need to be independent, we don't spend the time to well define interfaces between systems, we don't properly break the modules down into parts that are easily tested and maintained.
At the end of the day, large-scale software development is hard. Functional programming is great for some problems and domains, but it's not the answer for everything. I really feel that we need to educate people about more than just writing code... they need to understand how to architect SW to be maintainable, testable, and robust.