I work for a company which relies heavily on outsourcing to an offshore company in Ukraine. Actually last 3 companies i worked for, relied heavily on outsourcing in india, pakistan , china etc. I also have worked for companies who were being outsourced to , and then sat on the other side of the table where i was outsourcing work to other companies. i have seen both sides of the equation. That makes me a wee bit qualified on this topic
Outsourcing to an offshore company can be tough due to distance, However this whole outsourcing model has allowed people to start businesses with very little capital. Just hire a couple of guys in India and churn out some product and start selling it, fix all the problems as they go along. This , along with a rapid improvement in communication due to skype and other video and audio tools have enabled small global companies which would have never been possible. At the end of the day Outsourcing has proven more good than bad IMHO.
Some reasons i have seen over a period of time, lack of which results in failure, are listed below. This list by no means is exhaustive.
Communicate , Communicate, Communicate. Get a video conferencing facility. An eye to eye contact is essential. you will feel you are communicating better exponentially when you are able to see and wave your hands to your development team in Islamabad.
Go see your development team every month, or invite someone over. Keep the communication lines open 24 x 7. Come early to work if it gives you more overlap with your outsourced offshore team.
2) Competent Outsourcing Managers
Most people i have seen fail with outsourcing were simply incompetent in managing even an in-house onsite software project or product. Let alone an outsourced one.
A couple of business folks got together, got an idea, decided to build some software, did some body shopping in Ukraine. But don’t have a clue on how software are built.
The requirements are not always clear, the idea is still evolving, you want to ship quick and early, on top of it you add distance and lack of communication and basic lack of understanding into how software pieces should be built and put together and you have the perfect recipe of a failure.
It’s OK to have unclear requirements, its OK to have your idea evolving all the time, it’s OK to be wanting to ship it quickly even if its not 100% finished. But it all needs to be managed and crafted together with great skill, there are people who specialize in these things , go hire them.
Building software or managing a team doing it is not as simple as you think. Common sense will only get you that far. After that you need skill and training.
My current company had our COO (he is a great guy btw and i like him) who has a degree in marketing managing the outsourced software team. i mean really? just being able to use MS Windows makes you qualified to oversee the development of your flagship product?
Your outsourced team is not a juicer where you put your fruit from one side and the juice comes out from the other.
3) It’s people who build great software not processes
Despite the fact that the company who you outsourced to, wants to sell you services of a kick ass scrum practitioner and who has the magic bullet of fixing your project mess, it is still likely to fail if it’s wrong people building it.
It is still true that it’s great people who build great companies and great software and NOT great project managers or great processes. They are both over-rated.
A good PM and a good Process is ONLY a facilitator it is supposed to channel the energy and brillance of great developers in the right direction and in right amount to build the right stuff. They are a means to an end and that’s it.
Hire good people. Put personal effort into interviewing and finding great people in india or pakistan or where-ever, don’t just leave it to your outsourcing partner to decide what you are going to get. Hire them like they are your own people. Actually they are your own people.
You are just about to put your future in the hands of some guys from a small town in a remote country, make sure they can handle it.
Once you hire great people they can hire great people for you. A players attract A players, this principal is true in US as much as it is true in Vietnam.
4) Groom the culture of one team, one vision one company one goal
If your development team is hired through a body shopping company providing HR services in a different country. Those people have their loyalty to that company and not you. It is because they know that the same company has the ability to put them on other projects when your’s goes bust. You have to change that mind-set , and that’s one of the hardest things to do.
You should NOT be a faceless entity in a far away rich country outsourcing to some poor chaps in a not so rich country who are cheap labour. If this is how you are looked upon (and most of you outsourcing are looked upon like that), they will never put in their heart and soul like there is no tomorrow. Without this attitude you can forget about being the top player in your business area. You need top notch execution and commitment to turn your idea into reality.
If your developers feel committed to your cause , and believe in it, they will be loyal to you. Otherwise they will pack-up and go to Oracle when they come knocking for more resources in Bangalore or Pune.
5) Keep your Chief Architect(s) and the Code Gatekeepers near you
Great software are built when great ideas can be translated into working design and code and that needs a very close partnership between product managers/owners and the main architects of your product.
If those guys are not together locked in the same room or hanging out for a coffee or going out for a handball game together then it’s tougher to convert that great idea into a great design.
Written specs alone are flawed, even text written by lawyers have loop holes in it, let alone a software spec.
Make sure this brilliant chief architect you have is right besides you and he is able to transfer his brilliant translation of your vision to your offshore/ outsourced team.
Once that is done, someone needs to review the output coming from the team to make sure it is sane, before it ends in your code repository. Best to have this guy also sit with you.
He/ She can be the code night-watchman of the product you are building and he is near you so you can shoot him when someone bad happens. That is also good for your own mental sanity.
6) Be patient and understanding and aware of cultural differences
When you go to other countries to build software teams in order to save money, it comes with multicultural challenges. For example, folks from US are used to a very direct way of communication which would be extremely rude to a developer coming from islamabad.
You can’t enforce your american or danish or english management culture on people who don’t work that way. Hire a great local administrator and let him handle sensitive admin / human issues. Don’t act like an arse who thinks he/ she has hired some slaves to do everything for them.