When outsourcing software development, the customer naturally wants to be confident of success and satisfied with the result. Unlike with an in-house development team, the customer cannot keep an eye on the outsourcing team, and everyday work is not always visible. This is why choosing suitable people and forming an effective team is a significant challenge.
What really matters
For successful software development, it is not just technical experience that matters: the following should also be considered:
- Communication skills are one of the core aspects for an outsourcer. Miscommunication and misunderstanding can result in the failure of an iteration or even the entire project.
- Personal soft skills of each team member may have considerable meaning for the entire team.
- Ability to work in a distributed environment is another core quality for an outsourcer.
- Self-discipline is required to perform satisfactory work on time, without being permanently monitored.
- Problem-solving skills allow developers to not only be not task performers, who stop working as soon as an unexpected problem arises, but to understand the problem, find out what has caused it and be able to overcome it.
These qualities are required for each developer in an outsourcing team. When forming such a team for software development, it is not only the skills and qualities of each developer that are important, but also their synergy.
How to choose
The BusinessDictionary gives the following definition of the term team: “A group of people with a full set of complementary skills required to complete a task, job, or project… A team becomes more than just a collection of people when a strong sense of mutual commitment creates synergy, thus generating performance greater than the sum of the performance of its individual members.”
I would highlight two approaches to forming an outsourced IT development team:
- Choosing individuals—Under this approach, the customer interviews every candidate and forms a team from the chosen developers.
- Choosing the team core—The customer interviews and chooses core specialists (team lead (TL), tech lead, etc.). Later, the team lead forms the development team according to the project requirements.
Both approaches are widely used in our company. Below, I will to describe the process of forming the team in each case in detail.
During the pre-contract negotiations, we offer the customer the delivery manager with expertise in the domain of the project (FinTech, Mobile development, Telecom & Networks, Enterprise software, etc.). The customer talks to each delivery manager and starts to work with one of them. The customer then gives us a list of developers and other specialists required for the project, or the delivery manager suggests what the team should look like based on project requirements. We select people relevant to the customer’s requirements. The customer reviews their resumes, interviews those who seem to correspond with expectations, and then makes their selection chooses the proper ones. The team lead works with the team formed by the customer.
If after the project has started, a developer leaves the team—for personal reasons, because he/she can’t integrate into the team, or because the customer is disappointed with his/her performance—then we offer new resumes, and the customer interviews new candidates.
This approach has its pros and cons.
- The customer feels more confident about the chosen developers because each of them was interviewed personally.
- Selecting and interviewing each candidate takes time and delays the project development.
- Separate individuals cannot always generate the synergy required for effective performance.
- If the team lead does not participate in forming the team, he/she may not be able to guarantee the best result. In this way, an IT development team can be compared with a soccer team: the coach cannot guarantee the result if the team players are chosen by the club’s president.
Choosing the team core
Similar to the approach described above, in this case, the customer first chooses a delivery manager with the relevant expertise. Then, according to the project details, the delivery manager identifies whether the project needs aTL or a project manager, or any other core specialists (business analyst, technical lead, quality assurance lead). The requirements for core specialists are defined by the customer in accordance with suggestions made by the delivery manager.
The process includes the following steps:
- If core specialists who meet demands of the project are unavailable, we find candidates from the market.
- The delivery manager interviews all available candidates and selects the several of best. Their resumes are offered to the customer.
- The customer chooses, interviews, and approves the most proper specialists. Work on the project starts.
- The customer subsequently works with the TL to form requirements for other team members.
- Based on the requirements, the TL forms a development team for the project.
This approach assumes that after the customer has chosen the core specialists, he/she will trust them to form the team and ensure the project development. If a developer needs to be replaced, new candidates are interviewed and chosen by the TL. This replacement can even go unnoticed by the customer: he/she sees the result (another iteration is successfully completed), and doesn’t delve into how and by whom it was done.
To use the soccer team analogy again, this approach corresponds to a case in which the coach chooses the team players and thus guarantees the result. The club’s president doesn’t interfere in the team building process, but instead he/she demands results from the coach. The same situation applies to a development team formed by the TL without the customer approving each candidate.
This approach also has its pros and cons.
- The customer doesn’t have to spend time interviewing every candidate. Only core specialists are selected by the customer, and other developers are hired by the TL according to the project requirements.
- Having formed the development team, the TL can be confident he/she will be able to make the team create synergy and perform as highly as possible.
- Having selected people personally, the TL can rule out the possibility of incompatibilities between team members.
- The customer may have doubts about the project success.
To mitigate any doubts customer has about the TL’s ability to work and create an effective team, we offer to provide a trial mini project to demonstrate the TL’s ability.
Interviewing a TL
In my experience, the TL is one of the most important roles in a development team. The TL influences the entire team’s work, and the project success depends on the TL’s effective work with the team.
This is why I want to discuss interviewing the TL in detail. In addition to possessing technical skills, the candidate should be able to form an effective team and have enough experience of managing teams. To identify the TL’s suitability in this regard, it is worth examining him/her:
- Experience in starting a development team—The candidate should be able to describe how he/she formed teams for various projects. What was the candidate’s best experience in forming a development team and starting a project?
- Ability to comprehend his/her own mistakes—What mistakes have been made in terms of choosing team members? What were the consequences of these mistakes?
- Ability to draw conclusions from his/her own experience—The candidate should be able to give advice about forming and managing a team, and share his/her best practices regarding establishing communication and providing an effective working environment.
- Ability to act in a conflict situation—What actions does he/she take if a team member is inefficient? How does he/she minimize the loss from replacing the team member?
- Strategy to provide team stability—How does he/she seek to minimize the possibility of personnel turnover in the team, and to stabilize the performance indicators?
- Approach to building the development process inside the team—How does he/she facilitate effective communication between team members, code review, mentor ramp-up of new specialists, etc.?
- Approach to ensuring transparency in teamwork—The candidate should describe what forms of reporting can demonstrate the teamwork and results.
- Use of key performance indicators—Which indicators show whether the team is efficient?
- Approach to providing feedback—How would the candidate ensure effective and rapid development, without quality loss?
I would emphasize the importance of technical skills for a TL, in addition to team management experience.
He who pays the piper calls the tune. When hiring an outsourcing team, the company-customer chooses the most convenient way to form the development team. Each of the above-described approaches has its advantages, but at the same time, each has its drawbacks.
The following issues should be noted when forming an outsourcing development team:
- Not only do the skills of every team member matter, but so too does their ability to show better performance when working together.
- Speaking English is very important for core specialists, but not so important for other developers. Communication mostly occurs between the customer and core specialists. Sometimes it is better to pay the same wage for a developer with more experience but poorer English skills, than a developer with intermediate English but worse technical skills.
- If a TL has shown his/her best qualities during a trial mini-project and further work, he/she can be trusted with forming the development team.
Which of the above-described approaches do you use to form outsourcing teams? Maybe you use a completely different approach? Share your experiences in the comments—I would appreciate the chance to discuss your ideas.