This has been my experience over my career. Developers tend to forget they're ultimately developing tools for humans. Very few care about the underlying technology, complexity, how clean your code is... they just want something they can use to reach a goal reliably, with manageable complexity, and at reasonable cost.
Once you really understand that, you'll understand why it's difficult for those in other cultures, using other primary languages, and sometimes even remote employees to develop effective software without difficulty.
Much of software development assumes that specifications are perfectly understood, translated, and captured. This is rarely if ever the case. Developers are very frequently inferring and making microdecisions within the context of what they're developing using their personal knowledge. When they don't do this, you often get products that just don't solve the target problem.
One factor businesses really shot themselves in the foot when they butchered agile into a micromanagement time pressuring system to squeeze work out is that it made localized workers even more of a necessity because it has to be done (and interpreted) fairly quickly. This, IMHO, puts remote workers, especially those in other cultures, at a huge disadvantage as well as the systems/tools they're developing.
I don't doubt for a second talent can be distributed world wide but I do doubt that there's enough talent that can understand the context of the systems they're building to make project managers, businesses, clients, etc. happy.