I have been working with an offshore company for more than five years, and I would like to share my story and some of the insights I gained from this experience (roll down for the tips).
Our product supported many variations e.g. different platforms, many installation paths and more. I realized that we, a team of three, will never get good test coverage on our own, so I decided to get assistance from a testing outsource company.
Our first offshore experience wasn't that good. The communication was confusing, and we didn't set the expectations correctly. After a general preview of the system we gave them, I handed the STDs to the guys, decided upon the tested configurations and waited for the results. The task took much more than expected and they didn't perform the tests well. I thought that maybe I wasn't that clear, so I did two things:
Updated the STD's to be as intelligible as possible, with screenshots and any data needed to execute the tests.
Created procedures. I handed the tests to the outsource guys, asked them to go over them and say if it is clear. When they approved, I asked them if 4 hours is OK. When they agreed, we asked them to start.
During the time I asked them if everything is OK, they confirmed. When the time was over, we got the results. All tests failed in the first step - the installation. The next steps were all marked as fail, which is reasonable since the installation failed and the products weren't installed at all... 4 hours of 8 testers went to the basket, and such a failure could have been found after 20 minutes and an hour to fix.
We chose another company, and here the results were completely different in a positive way. At first, after the bad experience we had, I monitored them closely. This time the results were above expectations, trust was built and even friendships. The big leap of faith happened after we visited them in their native country. There I understood that I am dealing with a professional and trustworthy group of people.
This is what I learned:
Trust is essential, always and more so when the team you manage is physically separated.
We build trust over time. On the other hand, you can't start your relationship with distrust. Also, if you are not coordination expectations, we will damage the trust for the wrong reasons (misinterpretations of an event for example).
I suggest investing in coordinating expectations and setting some procedures with the team. It may include morning meeting / stand up, daily reports, agree when they should update in case of an issue or bug found (for example based on severity).
Treat them as your partners. It is very easy to get into relations of "I give them assignments, and they are just the performance power." In worse cases, some might consider them as only resources and as human automation tool: they will do the 'dirty' tasks (regressions for example), and in our site, we will do the exciting stuff.
This will not work, certainly in the long term. Just as you understand that you will never succeed if your in-house team doesn't succeed, so is the situation with the outsourcing. The outsourcing team will have a hard time to connect to you, your company and your product. Also, dehumanization doesn't work well.
With the development of trust and also appreciation, they got the same tasks as the team on the site. We consulted them about test strategy, and they decided about the tasks effort estimation and planned some of their tasks including STD writing and executing.
They are partners, but you are still the manager and accountable. You need to manage the process: make sure that the work is progressing, there is no idle time, the quality of the work is good, etc. You decide about the tasks and priorities. Managing interfaces looks very trivial to me, but I saw cases where testes w/o managerial experience assigned tasks to the outsource team, without explaining the nature of the mission and purpose, and only upon completing the in-house team complained that the work wasn't done as expected.
Teach them about your processes, the organization and its vision, the people, the product. If they lack a technical skill that you posses, give them training.
Visit the team as much as you can, and make sure that at least some of them visit your site.
It is known that "face time" is the best way to support teamwork. It will be easier for them to ask for help from your team and other stakeholders, deepen the relations and feel more comfortable to speak our minds.
Don't be a bottleneck. If the outsourcing team is professional and knows the system, they should have an open line to programmers, product owners, and any stakeholder. If they are not familiar with the product or processes yet, I suggest being in the loop otherwise your interfaces will rightly complain.
You must be sure to keep the information flowing. Update the outsourcing team in case of plan or priority changes, if we plan to be OOO*, in case of feature change, and even in significant changes that happen in the company (as long as you make sure that you are allowed to convey the information, and it is not confidential).
If the team know these things they will not work in vain, they will not be busy guessing about things they saw on the internet about your company, and they will feel like partners.We expect the same: in case they are OOO, going to a meeting or unavailable, changes in the company.
It is not easy to work from a different location and not be in the same room or floor with the team. Take this into account.
As partners, I expect them to be involved: ask questions, be skeptics and that they will not do things they don't fully understand.
Check their professionalism. You can trust the outsourcing team, but as with us all, they might make mistakes. It is also essential that they will know you are monitoring them in a reasonable degree:
- Ask them questions about any product they created (plan, STD, etc).
- Monitor the quality of their bugs.
- Review their test results.
- Perform Exploratory Testing after their tests from time to time.
You can politely share your findings.
Don't hesitate to have retrospectives with them periodically and in case of an issue found like a passing test when it shouldn't (and yes, it happened). In case of minor problems, I just talked to their team leader. In more critical issues I sent them a detailed mail with everything about the incident and gave them time to set up a meeting with their findings. I also expected that they would bring not only the details but also solutions to prevent it from recurring.
Last but not least: don't hesitate to compliment on a job well done and reward when appropriate.
Make sure to get the outsource team feedback about you, interfaces, processes. Be sure they feel comfortable enough to tell you.
Take this very seriously and fix what is needed to be fixed.
The outsource company interest that they will succeed, and most time it is aligned with our interest: perform a good work, be on time and within budget. Keep it in mind though, that both interests may not always be aligned. For example, It might serve them not to send testers for professional courses and thus miss the income and take the expense.
Yes, we did work with them after transforming to Agile. After discussions, we decided that each local team will include a fixed outsource team (by splitting their one team to small groups). It worked well. I was delighted to go between the rooms and see the stand-ups with the remote part of the team.
We didn't have a time difference, but we had different working days. The outsource company worked on Friday but not on Sunday, we - the opposite. That wasn't that bad, because when we work correctly, we had planned the tasks they had to do on Friday, and we didn't "bother" them, so the progress was good. On the other hand, on Fridays, I was on-call, and sometimes it might take the better part of the day. In cases like that, I got a mid-week day off to compensate.
Should you be involved in recruiting new members to the outsourcing team? It depends. You don't want to Interfere in the process on the one hand because you don't want to harm their independence. On the other hand, you want to make sure you have a great team. I suggest setting with them the roles and responsibilities for the job, but let them do the hiring. If you feel you are in good relations and they will not mind the involvement, you can also ask to be in the process and interview the candidates after the outsourcing company chose the best qualifying ones.
There are more tips about working in distributed teams in the book More Agile Testing. For example, set a camera and screen in both locations so you can view each other.
*Out Of Office