Most of them are talented and a joy to work with. However, giving them work is often a form of programming... they will do exactly what you tell them to do, no more and no less.
For example, unless you describe the tests you want them to write, they may not write tests. If they see a possible refactor or optimization, they won't volunteer to do it. One of the frequent side-effects of this is that the project develops more tech debt and slows down with time.
From the perspective of an outsourced programmer, this makes sense. You're optimizing for efficiency. You're in contractor-mode by default because odds are, your career has been heavily contractor work. You haven't been hired to look at the bigger overall picture and you've never been encouraged to develop the agency to make independent decisions.
The most successful teams with outsourced engineering teams have found ways to better integrate them into the team. For example, I know a few startups with engineers domestically in the US whose main purpose is to interact with large teams of engineers in countries like Belarus. This hybrid approach comes with its own challenges but the cost benefits are huge.