As an Australian Software Engineer with little previous knowledge of the working culture in the Asian technology business, in the early days it was somewhat of a challenge organizing teams of Chinese software developers to deliver products to Western clients in Australia, the UK, Europe and the US. The working culture, dynamic and expectations are radically different, and in order to bridge the gap between what is being done on the ground in Beijing and what SinoCode's clients expect requires strong process and sound, consistent methodology.
Selecting an appropriate methodology for team collaboration and customer communication has been one challenge, and has involved an iterative process of trial and error and project reflection, eg what is working and what isn't?
In my 'previous life' as a software developer in Australia, I found myself often adopting processes which supported the extreme programming approach and the agile development methodology. This was mainly brought about by evolving requirements in response to changing business direction of clients, something that occurs more often then not, particularly when working for smaller private software development companies that need to be able to adapt to changing market conditions quickly.
It has also been clear that it is easier to please business decisions makers through the use of the agile software development methodology because it empowers the customer (business decision makers) to understand the workings of the project more easily. For example, rapid prototyping allows the client to picture how the product will look and sets the expectation as to what is going to be delivered. Sometimes even if a customer has asked for something, they may not fully understand what is going to be delivered until they see it. Also, the progress of the project can be quantified through the delivery of working components of the system.
Given the benefits for the customer in using the agile methodology, this has been something that I've been keen to implement. However, the implementation of this methodology in the 'right shoring' environment has led to some interesting problems. The main issue is that the agile method relies on geographic closeness to allow team members to collaborate, preferably on a face to face basis. This is not physically possible when the people writing the specification are seated at a desk in an office remote to the end user's. In order to address these issues there are a few simple things that we have identified that allow us to minimize communication issues, particularly when working in different time zones.
- Simplify everything and over-communicate - It is not my intention to state the obvious, however the idea here is about identifying assumptions and always trying to provide more information than considered a necessity. This is important, as over communicating in this context will identify and hand over information that may have otherwise been communicated through informal office communication, which may have been missed working in different physical locations.
- Propose resolutions to the client's team as opposed to questions - You should always try to ensure that issues that could potentially block the critical path are discovered before they become a problem. However for a variety of reasons, such as unavailability of client staff etc, it doesn't always work and the project may be unable to continue until an issue has been worked through with the client. This situation can potentially cost valuable time. A great way to minimize possible delays caused by raising questions and waiting for answers is to communicate solutions to the client instead. Quite often the development team, is in a good position to suggest cost-effective technical solutions to problems where there may be multiple approaches and when the client is not as particular with the 'how' as they are with the desired outcome. This type of client support can drastically reduce the amount of time for resolution and improve the customer experience.
- See what the client sees - It's very important that you can collaborate as closely as possible with the customer. In order to facilitate this, it's important to share a common online environment with the client to ensure that you can understand and resolve issues as fast as possible. This is particularly useful when it is simpler to resolve these issues based on viewing the problem first hand, rather than working through a description in an email or telephone conversation. For smaller projects this may just involve a shared network via VPN or a shared hosted server. While larger projects may necessitate onsite client delivery managers who work face to face with the client and proxy information back to the ODC.
These simple focus points have allowed us to realize benefits of the agile development methodology in a distributed environment. In the table below I have summarized some principles of the agile development process and the benefits realized in our China ODC (principles have been taken from http://en.wikipedia.org/wiki/Agile_software_development).
- Rapid continuous releases of useful software - Allows the customer to understand the progress of a project. This is the simplest way to demonstrate to a partner or client that a project is tracking smoothly when not on-site. A functional component which can be seen and tested is a great way to demonstrate progress to our partner;s end clients as well.
- Working software is delivered frequently - Highlights any issues by providing frequent releases, any misunderstandings or miscommunications can be identified and fixed before they become too far engrained into the system.
- Working software is the principle measure of progress - Allows project progress to be tracked. If the initial project plan has identified milestones, these milestones can be tied to functional software releases. This way progress can be quantified which helps with schedule management as well as billing.
- Close daily cooperation between business people and developers - When we communicate the outstanding dependencies and potential risks on a daily basis, this gives our client the ability to organize their resources to support the software development process and manage any project risk. This also allows our partner to set their customer's expectations and to make proactive decisions.
The Agile software development methodology is not a hard and fast solution for operating a development team in a Chinese ODC, there are of course a lot of other factors to take into consideration. It does however offer some benefits that can be realized once a few minor adjustments are made to fit this type of environment.