Adaptability is the degree to which a product or system can effectively and efficiently be adapted for different or evolving hardware, software or other operational or usage environments. In other words, it is the extent to which software systems adapts to changes in its environment such as operating system, databases, runtime environments, etc. An adaptable software system tolerates environmental changes without the need for external intervention. For example, a dual-mode cell phone can find out by itself if any one of the two wireless standards it supports is available at its current location and, if so, starts using that standard.1).
Nary Subramanian & Lawrence Chung1 describe software architectures as composed of two elements: components and connectors. Adaptability in software can occur when either the components of the software change or the connectors between the software change.
Software Adaptability is when a software component with a well-defined, stable Application Programming Interface (API) can be exchanged using another component with minimal effort, as long as that component adheres to the API. For example, SQL describes an API for a database component. As long as the software adheres to the standard SQL API, the DataBase Management System (DBMS) can be exchanged between, for example, Oracle and PostgreSQL, with no to minimal impact.
Architecture Adaptability is when the connectors between software components change without having to change the components. This again comes down to having well-defined, stable APIs for the connectors. For example, the Unix File System (UnixFS) is a connector between software components and the physical filesystem. The associated UnixFS library can be exchanged for the InterPlanetary File System (IPFS) UnixFS connector and the software component should have no to minimal impact.
Nary Subramanian & Lawrence Chung1 further define the following adaptability indices.
1
represents complete adaptability and 0
represents no adaptability