Preface:
- The success of a software development project depends on many factors that affect each other and affect each other. Therefore, we cannot find a way to ensure that the software development project is 100% successful.
- However, in the field of software development, adoption of some specific practices or practices can greatly improve the chances of successful software projects. Therefore, it is necessary for us to discover and adopt these practices and practices.
- Many general methods and practices can improve the success probability of software projects, whether it is offshore development or onshore development. However, the purpose of this article is not to describe these general practices.
- This article is only concerned with issues that appear relatively prominent in the offshore software development environment, or are relatively prone to problems.
- Most of the content mentioned in this article comes from the author's work experience in related fields. I hope these experiences will be helpful for everyone to succeed in offshore software development projects.
Q: What is special about offshore software development?
Most of the problems encountered during offshore software development are similar to those encountered during shore development, but mainly because of distance restrictions and time zones, several factors that are closely related to the success or failure of software projects have become prominent:
- First, collaboration between teams becomes more difficult, including coordination between the onshore team and the offshore team on work content, it also includes synchronization of project progress between two teams;
- The second is the increase in barriers to communication, which mainly includes barriers to information sharing and knowledge transfer between teams. The possible impact is the increase in rework and waste caused by misunderstanding of information;
- In addition, teams located in two different locations are prone to distrust, which will affect the smoothness and effectiveness of team cooperation and increase unnecessary costs;
Let's talk about the collaboration between teams. In offshore software development, you may have encountered the following problems:
- The changes made by the team lead to code compilation failures of the team on the other side, which affects the normal progress of the team's work;
- The check in content of the team leads to the loss of changes to the team on the other side, and one party has to roll back Or redo the relevant work;
- The Code integration process of both parties exceeds the expected time and is full of pain, which leads to dissatisfaction and system instability;
- The work content of both parties is repeated;
- Bugs reported by the other party cannot be reproduced;
It is not hard to see that these issues share a common feature, that is, the coordination and consistency between the two parties are not in place. Taking the following practices in personal experience will help reduce the probability and impact of these problems:
- At the beginning, both parties should establish a public code library, develop code based on the code, and adopt continuous integration to regularly synchronize code;
- Establish and follow common rules, such as checking in every day, and after checking in, it must be compiled before it can get off work;
- Try to use common development tools and environments, such as controls of the same version and the same test environment;
- Regular synchronization, such as regular merge of branch and trunk; for example, two weekly remote standing meetings;
- Adopt the same practices and try to make them cross-cutting. For example, the offshore team should adopt two Monday iterations and hold demo meetings at the end of each iteration;
In an offshore environment, the communication problem mainly lies in the difficulty of face-to-face communication and the difference in time zone, which may lead to the absence of overlap between the two teams. Common problems include:
- It is difficult to clearly describe the requirement without looking at it or to understand the customer's requirement description;
- Questions about the requirement documents are not answered in a timely manner, thus affecting the progress;
- It is not what the customer really wants;
How can we deal with these problems? Effective Practices in personal experience include:
- At the beginning, we established multiple communication channels, at least to ensure that both parties know each other's IM, email, and phone numbers, and planned a fixed period of communication, such as Tuesday and Thursday communication, each time is from;
- Try to use documented and traceable methods for communication. For example, use more written documents instead of verbal communication. If verbal communication is performed, record and retain as much as possible;
- If you need to transfer documents, it is best to fix the format, use as many images and tables as possible, and use less text; user story and test case are very effective communication methods;
- Prototype is the best method for transferring non-document requirements. The simplest prototype is a hand-drawn sketch to scan or take a photo. You can also consider a recorded video clip;
- Try to use products for communication, for example, presenting the product to the customer once every week or every two weeks and obtaining feedback;
- Establish a common information platform, such as Wiki
In short, the smoothness and effectiveness of communication have a great impact on the success or failure of projects in the offshore environment, first, it may be necessary to ensure that both parties can spend enough time in communication (because some customers often do not want to spend time in this area ), the second is to use various communication methods to enhance the effect of communication. If you are a contractor, do not be the manager of the attacker's ideas. If the implementers do not have a deep understanding of the product, how can you do a good job of the product?
As for the issue of trust, the offshore environment is also quite prominent, because apart from tangible output, the two sides generally do not see what each other is doing. If there is no trust between the two sides, it will be harmful to the success of the project. I have encountered two situations:
- The sender does not trust the package owner. The package owner is worried that his resources will be wasted, so he will try to set various requirements and restrictions to ensure that the team will not be distracted from other matters; in fact, the team has been fully invested. To meet these requirements and restrictions, it not only adds a lot of extra work burden, but also the team members feel that they are not trusted and lack enthusiasm.
- Mutual suspicion between team members on both sides-I met a project, and one of the developers thought that the requirement of a developer on the other side was not clearly described, and they kept returning the requirement, the other personnel thought that the demand was clear enough and did not want to provide further feedback. This led to delays in the demand process of some tasks and the overall work progress was slow, the two sides are unwilling to work together to solve this problem because of lack of trust.
I believe that there are still many problems that may result in project progress blocking due to lack of trust, which is one of the reasons for team building. How can this situation be improved in an offshore environment? For the following suggestions, refer:
- This will increase the chance for both parties to meet each other. For business access and video conferences, as long as the two parties can see each other and feel the real existence of each other's individual, that feeling is much better than just looking at the cold code, text, and screen;
- Establish a mechanism to jointly solve the problem. For example, after each iteration, we will hold a meeting to review and discuss common problems;
- Actively and regularly share and disclose information;
In addition to the practices mentioned above, a good job splitting can also improve the success probability of offshore software development projects. The recommended practice is to split the work content according to the functional features, the main purpose of this operation is to avoid coupling at the business logic layer and reduce the communication and coordination needs between different teams. If you want to outsource a project to an individual or a team whose capabilities are not qualified for the system-level design, it is helpful to try to differentiate the tasks in a small and clear way when splitting tasks, because small and clear tasks facilitate implementation and management, the project is more controllable.
The above are three common problems in software development projects and their countermeasures in the offshore software outsourcing environment.