Distributed Software Development
As we all should know, two heads are better than one. Teamwork is the key to success. When you enter the industry to work as a software engineer, you will be working with groups. However, when working on a project, how do you get access to all the information you need to accomplish your assigned task? This is where I introduce you to the practice of distributed software development. Distributed software development is the sharing of information between others to accomplish a main specific task. In today’s industry, almost all company’s used distributed software development practices. In this article I will be discussing issues relating to why we use distributed software development, what type of tools support distributed software development, and how distributed development may influence the effective construction and use of an application framework. I will also discuss issues such as heterogeneous platforms, project management concerns, communication barriers, cultural and social differences, time zone changes, system integration challenges, and best practices. Then I will discuss the advantages and disadvantages of software collaborative development. This article should give great insight to those who just entered the industry to work in the profession as a software engineer.
Why Distributed Development?
After understanding what distributed software development is, we can value the importance of it. Imagine that one day your group leader had to go out of town for a few weeks but your project is due very soon and you need the files that he has not finished yet. This causes a problem in accomplishing your task since you need his files to finish your. Not so if you used the practice of distributed software development. He can be out of town, yet he can still work on his part of his project and keep you updated with his progress so you can accomplish your task. This is why this practice is so important.
Software collaborative development allows all group members to be in different locations and yet have them all know what each member is doing. Another example is say universities which do research on software. Not all outstanding professors in the field of computers is all going to be in one university, so software collaborative development lets them work together. The main issue is that it allows specialists from all around the world to develop software together. As hardware is getting faster and better, the demand to make the most hardware is due much to software meaning that software is getting larger and larger. This means that it is necessary for more and more people to work on software together in order to complete them in a desired time frame.
Another important aspect is that by using collaborative techniques, this allows other software engineers to help improve existing software. Software such as OpenBSD allows any user to improve it. With all these issues mentioned, you can see how collaborative software development is very important allowing specialist from all over to develop software.
Collaborative software development requires tool support to make this practice efficient. If we don’t have the support then this practice would be useless. As we mentioned earlier, hardware is improving at a drastic rate. On significant and most important tool or concept is networking. Networking includes tools such as WAN’s and LAN’s. A big example of this was just recently announced last month on March 5, 2002. A company called VA Software Corp. announced that the Open SystemC Initiative has selected development software called SourceForge Enterprise Edition 3.0 as the collaborative software development platform for the SystemC language and as the support platform for the SystemC community. The web site which will be used uses SourceForge to enable different companies to collaboratively develop specifications and code in a common environment, and support the large and growing SystemC user base.
Another tool that is very common is CVS. CVS is a very useful tool for software collaborative development. It allows group members to share updated files, recover last saved files, and keeps each member of your group updated on their progress, thus enables developers scattered all over the world to function as a single team. Another tool to mention is called Arachne. Arachne is intended to facilitate collaborative development in domains such as systems based on textual mainframes. Complex problems arise and get addressed by a community of software developing researchers. Arachne does this by providing a comprehensive cross-platform environment for the development, encapsulation, sharing, and reuse of software capabilities. Arachne tries to enable the long-range, evolutionary construction of highly complex software systems, from components developed over time in part through research and in part commercially. This brings up back to the idea how distributive software development helps improve existing software. The list could go on for the tools that help distributive software development. The ones that I listed are just a few examples.
Collaborative software development is a growing concept that will keep growing. All these tools that I mentioned are all based on one important tool, which is the network. Without networking, collaborative software development would not be possible.
Another big issue for software collaborative development is that not all software developers use the same OS or same system. I will explain how distributive software development is affected by heterogeneous platforms. Obviously, this is a problem for software distributive development since OS usually can’t share all information between other OS. However, there are ways around this problem. First of all you need a set standard for some of the files you are using. One example is from a large worldwide High Energy Physics community. They split the software into 2 parts, a specific part for each OS containing binary files and libraries and then a shareable part which is usable on all platforms. The specific part contains all needed references to the shared part to make sure that the repository and the products are self-contained. To avoid unwanted site dependencies, all symbolic links are relative and independent of the root directory of the project. This makes the software easily exportable. Another way around heterogeneous environments is to use the World Wide Web. All information is kept on a server which serves as a medium. This allows anyone from anywhere using any machine to logon to the server and access the files needed. As you can heterogeneous platforms form a problem, but there are several ways around this problem, and I just discussed a few.
Working with a large number of people can get very complex and disorganized. This is why we need to discuss the issues of project management concerns. Each group should have a project leader in charge which duties should include checking to see if each member is doing their fair share of the workload. He should keep up-to-date on the progress of the project. This person should also be responsible for any problems and other members should consult him with problems about a project. When distributive software development is used, we need an overseer of everything. Without this person foreseeing the project, projects would have problems such as not being completed on time. This is why the person who is the project manager should be well experienced and be well trained to handle the duties required to be a project manager. The project manager would also be the person to present the project when it’s finished to the company that hired them.
This is why there are many institutions that offer extensive training for these types of people. The Project Management Institute is an example of a school that provides this service. Also many books are available for a person to learn on his own. A project manager is a necessity in working with collaborative software development. As you will see later on in this article, project management is a very important issue that every collaborative software development team needs.
Collaborative software developers spend a lot of time communicating with each other, wither it’s via email or real-time. Communications is a must for distributive software engineers because it keeps everybody informed and up-to-date on the project. Communication also allows individuals with key knowledge to apply that knowledge where it is needed the most. However when people don’t speak the same language, this causes implications on the working field. Distributive software development may break geographic barriers but it doesn’t break language barriers. For example, when a group member who writes some code and documents the code in Chinese, then the next person working on the project is trying to figure out what the previous person did. These are known as communication barriers. However in today’s society, we have the resources to translate any language to any other language. An example is Lingo Ware. This program can translate any language via the web instantly. There are also plenty of other translation software out there such as Systran and NeuroTran. Another way around this complication is select your group that knows a common language. Sometimes the best solution is prevention. Software distributive development may not break communication barriers but with software mentioned above it can.
Since we talked about different languages being an issue, we can see how cultural and social differences can come into affect on distributive software development. As we know, not everybody is the same. We eat, dress, and play differently. This can also apply to programming. We all program differently, especially in different cultures. Different societies value different things. For example, one programmer who was educated in say China may value speed over reliability, while another programmer who was educated in Germany values reliability over speed. Their society has implications on how resources should be used. If a country is rich, they are willing to spend more money and time to get better results, however if your country is poor, you want to spend less money to get workable results. You can see how this can complicate collaborative developed software. The end results will be some parts will be fast but often cause errors, while another part will result in less errors but a long time to compute. The resulting project will be very inconsistent. This is the reason why we talked about project management concerns. With proper project management skills, this should never happen. So you can see, cultural and social differences can cause a problem, but when properly managed, it’s not a big issue.
Time zones are another issue that we should not overlook. When a project needs to meet a deadline, it doesn’t matter what time zone you live in. That deadline has to be met. This means if the project needs to be proposed 1:00 pm Eastern Time and you live in a place that is around the world and 1:00 pm is your 5:00 am that means your deadline is 5:00 am. Unfortunately, there is no software that can synchronize time so that there is only 1 time zone. There really is no way around this implication. The only way around this is to live by a set time as a group. Standardize your own time zone for your group. This way, when your project is due at a certain time, all members will treat that time the same. This is again why we have a project manager to foresee this problem.
System integration also causes some implications to collaborative software development. System integration tries to incorporate many different systems into one main system. This is not a simple and easy task for it requires a lot of recourses and time. However many companies have developed to help deal with these issues such as T&T and Deltacom. Many of these companies are specialized in integrating systems to allow a flawless environment for collaborative software development.
As you becoming a professional software developer and working in a collaborative software development environment, you will need to know and understand the best practices in this field. On a more technical point of view, having the right environment is also a best practice. As an article written by Frank Hecker, a colonmist at Collabnet, talked about the importance of the software development environment. Make sure the environment you are working in is setup for collaborative software development. This means your environment should support real-time or near real-time communication such as email or tracking. A common code repository with versioning should be supported so developers can share code in a controlled way. As mentioned before, since not all developers will use the same tools, have flexibility in the tools and methodologies in conjunction with the developer’s environment. Having such support is a must for collaborative software development. Another best practice to have is version control, documentation management, and distribution. The reason to have good version control is because projects need strong and flexible support for many concurrent developers working on overlapping sets of files. This also makes recover of files easier to manage and developers know when files get updated. Good documentation is a must because this lets other developers know what you have done. There should be a template for design documents, technical documentation, and end user documentation. Again, with the proper environment setup, all these files should be globally accessible for every developer in your project group. Another good practice is to frequently build and test the project. This is a good way to check for earlier signs of bugs. This will make things more concurrent.
As for the project manager, his best practice is to keep track of the explicit goals, resources, and a detailed schedule of the whole project. This way the project should go smoothly without complications and meet the desired deadline. Sharing your knowledge effectively is also a key for success. Explicitly managing knowledge can help reduce the learning curve for novice developers. This also reduces the barriers to entry for potential contributors while automatically keeping the load on the experts down to a minimum in terms of training others. If you and your other fellow developers follow these best practices you will be more efficient and your project should have no problems. The key is that all your members of the group follow these practices since, it’s collaborative development.
- Open SystemC Initiative Implements VA Software’s SourceForge for Collaborative
Software Development. http://money.cnn.com/services/tickerheadlines/bw/220642133.htm
- Concurrent Version System. http://www.cvshome.org/docs/overview.html
- Heterogeneous Platforms. http://wwwinfo.cern.ch/pdp/ose/asis/LISA-96/node3.html
- Project Management KnowledgeBase. http://www.4pm.com
- Systran Official Site. http://www.systransoft.com/
- CollabNet – The Promise and Challenge of Collaborative Software Development. http://www.collab.net/news/papers/promise_challenge.html
- Best Practices in Software Development. http://www.cvshome.org/project/www/docs/bestpractices.html
- Simple Object Access Protocol (SOAP) 1.1. http://www.w3.org/TR/SOAP/
- Mallard Software Designs, Inc. http://www.mallardsoft.com/
About The Author
Thomas Cheah is the Principal CTO-for-hire of Procto. He helps business owners and executives to innovate their business model thru strategic technology management so that they get 80% of the benefit for 20% of the cost. If you have innovative ideas but do not the technical expertise, he is your partner to validate and build your digital business models. Thomas believes that constant business innovation is increasingly important in today's business environment so that our business is prepare for rapid change of customer behavior, rising cost, and globalization in order to stay ahead (or away) of competition.
Learn more about Thomas Cheah.