8.1 Communications Challenges
Software development is becoming increasingly complicated, requiring the participation of many diverse people with various skill sets. Dealing with the coordination among different groups is an ongoing factor in the military. As such, the military provides a wealth of lessons that are equally applicable to the development of software applications, the most important of which is how multidirectional communication is handled. Since effective communication is required for proper coordination, it can never be considered an optional part of the life of a software professional. Rather, constant verification through proper communication must be a fundamental part of the overall software development process. If it is determined that there is a breakdown, then top priority must be given to reestablishing communications. Facilitation plays a major role in smoothing over various personal conflicts. If necessary, communication may even have to be forced during critical situations. For example, if a person with an essential expertise is unresponsive in a meeting for weighing different design alternatives, extra effort may be needed to draw out his or her thoughts. Finding out his or her perspective on the merits of the alternatives could mean the difference between project success and failure.
There is a substantial industry built around aiding developers in the production of software development artifacts. There are tools for coordinating requirements and use cases, tools for developing software design models, and tools for defining software test plans. Each tool has its own strengths and can reduce the time it takes to produce one or more software artifacts. If the goal of software development was the production of such artifacts, they would be worth their kilobytes in gold. However, what sometimes gets lost in a discussion of the merits of the latest tool is how effectively it facilitates communication. After all, while the external deliverable is the software, the internal deliverable is effective communication among team members to ensure that everyone is working toward a common goal.
In that context, software artifacts are a necessary, but not sufficient, element of achieving effective communication between software developers. Regardless of the documents being produced, they are of no value unless they are discussed with and understood by the development team. The following two methods will help ensure that development artifacts are not ignored on some distant bookshelf. First, all artifacts should be reviewed by a team composed of developers from other teams. This ensures that the other teams are aware of what is being produced throughout the organization and are on the same page in regard to architectural principles, design heuristics, and coding standards. After the final review is complete, the final document is disseminated to all reviewers. Second, all designs produced are submitted to all team leaders who are expected to be familiar with their contents. When issues that are answered in the design documents arise, the architect should bring it to their attention and continually remind team leaders to stay on top of the designs of other groups. While it may be frustrating to know that few of the team leaders are following through and truly staying current with all the designs, over time it will become apparent that better decisions are made on the team level, in part as a result of a greater awareness of the efforts of other teams. Finally, when topics that affect several teams arise, a meeting with representatives from all affected teams should be scheduled. Either have the issues solved collaboratively, or have an agreement to utilize a solution developed by the first group that is affected by the issues. For example, if a new requirement arises that all system logs should be exported in an XML format, the first group that needs to produce a log will present a standard XML DTD that will be used by the other teams for storing and viewing logging information.
 |