Software Engineering Institute | Carnegie Mellon University
Software Engineering Institute | Carnegie Mellon University

The COTS Challenge

The design, development, and maintenance of COTS-based systems and the migration of legacy systems toward CBS practices are complex. New products and technologies constantly enter the marketplace. The vendors of existing products work to differentiate their product from those of competitors. This leads to a marketplace characterized by a vast array of products and product claims, extreme quality and capability differences between products, and many product incompatibilities, even when they purport to adhere to the same standards.

For organizations designing and implementing a COTS-based system, or upgrading a legacy system with COTS components, the current market state presents a number of challenges. COTS products come with their own architectural concepts that may not match those of your system. COTS products also have built-in assumptions about how they will be used, which may not match your end users' way of doing things. A major difficulty is to discover the actual technical capabilities of a product or set of competing products, since there is no objective forum for product evaluation. Once individual products are selected, it is difficult to identify and resolve mismatches between products, and to avoid becoming captive to the products of a single vendor or set of vendors ("vendor lock"). Equally difficult but necessary is the ability to forecast what technologies and products will be relevant over the life of the system.

Thus, in designing and constructing a COTS-based system, or in modifying a legacy system to take advantage of COTS products, an organization must answer a number of questions, including the following:

  • Which technologies and products are most appropriate?
  • How can product mismatches be rectified in our system?
  • How can we engineer system attributes such as reliability, security, and performance in spite of decreasing control over individual system components?
  • How do we integrate COTS products with the custom code that continues to provide the core of many systems?
  • How do we take advantage of COTS while delivering a system that can evolve over a long lifetime?

Return to COTS Overview