closed as not constructive by gnat, Walter, Jim G., GlenH7, Thomas Owens♦ Sep 20 '12 at 20:40
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or specific expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, see the FAQ for guidance.
I think all
Thus, creating code is easily outsource-able but business domain related knowledge is not.
In other words, try to give more importance to the business and data flow side of the application. People who know the business flow side of applications with all rules are the ones who are hardly replaced, even if there are tons of documentation.
This is true for complex applications with hundreds of business rules.
Soft skills like communication and diplomacy are what you are looking for. Technical skills are well and good but in order to be out-source proofed to any real degree, you need to provably easy enough to work with that no off-shore agency could replace precisely whatever it is you do in totality.
In short, you should strive to be more quality than quantity. Your qualities should be obvious but difficult to measure allowing those that are to speak for you from a hard data standpoint but at the same time adding that edge of being unquantifiably good in many areas.
Learning to talk to designers and UX people would be your best bet in terms of web development. Understanding usability and design and how to facilitate and work into that from the technical side are very valuable skills and highly unlikely to be truly outsourceable.
IMO here are the activities which I've seen outsourced which have met with varying degrees of success:
Unit tests and grunt coding obviously can't be outsourced to the same partner :). So you want to move through the above skills as quickly as possible, IMO. Another reason not to get stuck in the above activities for too long is that CASE tools, code generators, scaffolding etc make it easier and easier to automate the above. The benefits of outsourcing the above isn't necessarily just cost, but also turnaround time - many offshore partners will work 24x7. (Time is important when you consider that your own staff can sit idle waiting for devs to complete work)
What I've not seen outsourced with repeatable success, are areas which involve high levels of technical risk, and those which involve direct engagement with customer, i.e. This is where you want to get yourself ASAP.
i.e. the outsourcing partner is provided with the v0.1 'thread' of an app or system containing an example of each 'layer' of code, and the cookie cutting is done offshore.
The obvious problem / consequence to outsourcing 'grunt' work is that our local junior devs don't get enough repetitive development or unit testing experience to build their skills sufficiently to become seniors (and no doubt our offshore partners are building their senior skills)
The difference is are you delegating or abdicating the work. I think the success or failure of any project being outsourced depends on the person/company doing the hiring. There may be some tasks that are slightly easier to outsource, but what really matters is the importance. I also think it is easier to outsource tasks you know how to do really well and can monitor and identify if someone else is doing quality and timely work.
Everyone always underestimates how much time they will have to spend with the outsourced workers. Many companies may do better with onsight employees because they don't realize how much time is spent telling them what you want. It's more convenient to ask a quick question without scheduling a meeting. Of course they also don't realize how much time they waste.
I remember a co-partner and lead programmer gave a project to two junior programmers to convert a dos application to Windows. He let them code for months without putting any effort to supervise or review the code. He was disappointed with "them" for the terrible end result. That was his excuse to the other partner eventhough he hired both of them and he was responsible for the project.
Most people can't outsource tasks because they don't know what they're doing and just rely on the kindness of strangers.