Dimension: Technological Diversity
In many cases there is a difference between a challenge inherent to the subject matter of a project, and a challenge that is part of the project solution. Consider a telephone calling card business. Two obvious parts of the solution would be a database for storing account records (time available for each calling card) and a telephony interface for interacting with customers (“Press 1 to hear your available minutes,” etc.). The need for database technology and telephony technology to be combined is an inherent part of the problem. Java, for example, provides both database and telephony interfaces. Implementing such a system is trivial when the “development technology” supports all the required elements.
But what if the project is forced to adopt different development technologies? Either because of a legacy investment, or because of the unavailability or unsuitability of a single development technology, a project may be spread across more than one development technology. When this happens, there will be multiple “experts” involved, each focused on a particular part of the problem. In our calling-card example, a legacy database may exist built on a mainframe system. In this case, the database hardware and the telephony hardware will be different types, possibly in different locations. Suddenly the simple Java demo application has transformed into a client-server system with mainframe, Oracle, and Java components. What about fault tolerance? Can we use the corporation’s existing fiber leases to reduce our gateway costs? Should we build a Cisco SIP infrastructure and provide a web interface? What about connecting to other VOIP customers?
SCM can help by supporting project approaches that simplify or encapsulate the multiple technology system. Just as with Technical Complexity, using multiple development technologies is easier if the actual network of interactions among the technologies is small. Construction techniques can help by partitioning the system in alignment with technological boundaries. See Component-based Development, Service-oriented Architecture, and Software Assembly. A multi-technology system is almost certain to involve more than a single development team. As a result, communications and knowledge-sharing become increasingly important. Ceremonious techniques like Formal Interfaces & Standards and Requirements Management can help with boundary conflicts. Organizational techniques like Change Control Board and System Architect can help avoid hand-off problems. Finally, because systems built on multiple technologies tend to be large, work flow techniques like Longacre Deployment Management and Streams-based Development can help with marshaling and deploying changes.
