Oh gawd. Company I'm with outsourced an EJB application to an Indian company that, apparently, didn't know any more than we did about Java. Deliverable: yesterday, I saw a 400-line class that coulda been reduced to maybe 10 lines of code if anyone had known what the hell they were doing.
(a) Outsourcing to an organization that didn't have a clue about our product. I wasn't involved directly, usually, but my involvement *still* featured endless time-wasting meetings while we tried to overcome culture differences and backgrounds. Not only did we get crap code, they never really "got" it.
(b) Not learning from previous mistakes (e.g., this company had done similar with a Visual Basic application, hiring consultants who were really learning-on-the-job and delivered a piss-poor badly documented (har, documentation?) shit.)
(c) Few programmers in this company learned anything about the applications in either (a) or (b); more like we got crappy code and didn't know enough to properly evaluate it as crap until *we* devoted more resources to the code than we would have had to than if we'd developed it ourselves. Or if we'd had *real* Java or Visual Basic experts developing it, not just wannabes.