I’ve been in outsourcing projects for years and experiencing with not only success but also obstacles and failures. For me, clearly both outsourcer and outsourcee have the same objective, they want to succeed, not to fight, not to transfer the problem and not to be failed. However, in some circumstances, they don’t prepare to be able to succeed. Something seems to be obvious but they don’t really take into account. Let’s see what they are under my view of project development team.
There are two main reasons that companies want to outsource a part or a full software development project to other countries. They find that the cost is lower and it is hard to find enough resources shortly in their country. To enlarge the success, outsourcer and outsourcee need to prepare the followings
1. Managing project scope and plan
Outsourcers need to have a clear defined plan including target schedule and especially the scope of what they want to outsource. Some outsourcers don’t plan clearly and just do the ad hoc business with outsourcees. Lacking of planning often causes a lot of change requests, changes in requirement, technical design, development and so on. As the result, the actual cost is increased much more than the budget.
At the beginning phase, outsourcer shouldn’t start with too big systems. It’s hard to control and evaluate the result. They should have some Proof Of Concept (PoC) to see whether both sides can work together as a pair or not, a discovery or a pilot project should be a good start. It is important for the outsourcer to understand the ability of the outsourcee before making long term partnership.
2. Applying the right project model
After the scope is defined, it should be divided into deliverable phases and it would be great to apply Agile/Scrum for sprints to increase the interactivities between product owner (outsourcer) and development team (outsourcee). They can give feedbacks and review early before the features are delivered. Early review will reduce rework.
Actually, I don’t object to other processes like RUP but we still can tailor to have smaller iterations and deliverables so that both sides will be on the same page on the status and progress of the project.
Regarding coding and testing activities which is outsourcees’ responsibility, the below matters are very important
· Applying unit test and integration test as early as possible will help to improve the quality of the design as well as the source code.
· Applying automatic build and continuous integration will help to detect the integration errors as soon as possible
· Defining design and coding checklist, doing peer review on designs and coding will help to improve the quality before delivery.
3. Utilizing the communication channels and tools
· If there are onshore (outsourcer’s side) and offshore (outsourcee’s side) working together, they need to have opportunities to communicate frequently.
· Blogging or Wiki site should be used to exchange and share idea.
· Face2face is always the best method in communication; therefore, resource transferring between onshore/offshore for training, hand-over requirement and so on is very important. When getting known well together, it will be easy at work.
· Team work: If two teams, onshore and offshore, work together, there should be activities to promote the team working spirit. This will also help to remove anti-outsourcing mindset of some people.
· Onshore team should provide prompt feedbacks soon after they receive deliverables such as code reviews, technical reviews if any. It is a real problem to wait till the end and they find that the quality doesn’t meet expectation.
4. Setting the right expectation
· Language barrier: Depending on the outsourcing countries, the average level of English may be different; therefore both sides should set the right expectation of communication as early as possible so that the team can work easily. Any communication via conferences, phones should be captured and resent to make sure every attendee is on the same page. Even though, the team members from outsourcing company need to improve their English skill by using dictionary or spelling check, some minor errors in communication such as grammar shouldn’t be a show stopper.
· Resource retention: At the side of outsourcee, the resource attrition is always a problem when people are about moving around and it’s hard to keep good resources long term.This is reality and the business of not only outsourcee but also outsourcer. Attractive policies plus small amount of loyalty bonus will encourage people to stay long as well as keep their working performance steady.
5. Conclusion
Above ideas are just my experiences of working in outsourcing environments. In conclusion, the success of a project needs a good plan and cooperation between onshore and offshore. If you have different thoughts, please discuss.
6. About the Author
Senior Software Developer BCC AdSystems Melbourne, Victoria, Australia |
A great post, obviously! I really like the way you open the post.
ReplyDeleteHowever, from what I have learned, there is one more reason for a organization to outsource its work: to avoid doing what it is not good at; in other words, you should focus on what you are good at and outsource what you are not.
I've also learned that Agile/Scrum is only suitable for small projects (10 people or fewer). How do you think about this theory?
Really good article. But I have a concern about SCRUM process. If we separated a team with a onsite and offsite team. So how they can communicate and work together smoothly? Because I see some projects are also work offshore very well using SCRUM in my company.
ReplyDelete@Cuong, @Thang: Actually, we can apply by dividing the team to many small teams called sprint teams. I joined a past project with 5/6 different teams with nearly 40 people and they were good.
ReplyDeleteTo communicate between onshore and offshore, we used conference calls. In each team, we had strong team leader which can communicate smoothly and also had to have recap messages for making sure both sides were on the same page.