Imagine a new offshore factory in an oriental country. A sizable mission-critical project decomposed into 2 phases has beed assigned to the offshore team. It is a J2EE project relying heavily on Open Source technologies : Postgres, JDK 1.5, Hibernate, Struts, JSTL, JSP 2 and JasperReports, running on Tomcat 5.5. The offshore development team is in the process of being recruited and trained.
Our story starts around the time the phase 1 development activities where scheduled to be getting up to speed. At this point, project monitoring has started giving alarm signals:
- Delays in milestone deliveries where becoming apparent
- Code reviews showed poor coding quality, disparate coding style, beginner errors, and dubious architectural choices
- Preliminary alpha testing is giving very poor results: many test cases cannot even be completed
- The project management reserve was dwindling daily.
Faced with this increasingly alarming situation, Jack, the project manager, studies the situation with Mohamed, the offshore team leader, in one of their regular meetings using IM or IP-telephone. During this meeting and the ones that followed, several major issues are implicated:
- A high developer turnover, resulting in an under-sized team and a lot of ongoing training. The team of 6 had just lost 2 trained developers to a major multi-national IT firm. Another had left the previous month. The scheduled team size at this point in the project was 8, with 5 Java developers, whereas in reality they were reduced to 5, with just 2 Java developers.
- Management prefered to look for already-qualified and locally-trained engineers, rather that to provide costly tailored on-site training. However, Open-Source Java skills where harder to find on the job market than initially thought. As a result, the offshore team leader was experiencing difficulties getting the development team up to strength and operationnal.
- Developers who where found were often lacking in experience: many had trouble applying architectural recommendations and best practices, creating an overhead in code reviews and corrections.
The situation was effectivly critical: delays were slipping fast and the code that was written was badly written and buggy. Action had to be taken, and fast!
Jack decided to attack the problem from several angles:
- Bring in local reinforcements to work on the project
- Tailor offshore recruitment techniques to the local job market
- Provide individual coaching where needed to raise the level of the offshore team
A team of 3 experienced local developers where added to the project. They were based in the European HQ. They had never met the offshore team. They were able to implement an important module in the Phase 1 part of the project, allowing the offshore team to concentrate on the rest. There were however some organizational downsides to this solution : Cultural differences, political issues, and some cases of individual negative attitudes, created friction between the two teams.
Tailoring offshore recruitment techniques
One thing Jack and Mohamed had noticed about the offshore development team was this : one of the best developers had no previous Java experience, whereas some very mediocre ones had many years experience. However this developer was smart and curious, and eager to learn.
From this point one, less emphasis was placed on precise IT skill-sets, and the recruitment process privileged looking for smart, curious people capable of learning quickly. A trial period ensured that this fairly intuitive approach could be verified.
Individual training and coaching
This recruitment technique naturally required additional effort in individual training and coaching. Although time consuming, this helped foster a team development culture, and allowed a first-hand experience of the developer's aptitude for the job.