Adaptation (computer science). Adaptation in computer science is a process where an interactive system (adaptive system) adapts its behaviour to individual users based on information acquired about its user(s) and its environment. Adaptation is one of the three pillars of empiricism in Scrum.

The need for adaptation
A software system passes through a potentially long software engineering cycle and before delivery, requirement engineers, designers and software developers realize the components of the system. However, it is impossible to anticipate the requirements of all users, and a single best or optimal system configuration is impossible. The active involvement of users and clear understanding of user and task requirements is a challenge in the development of computer-based interactive systems for two reasons:

 The potential user groups may not be known at the start of the project, and would need to be identified according to future scenarios of how the software system will be used. These groups need to be revised as the system design evolves because there may be various groups of potentially affected users.
 The design of the project may include substantial changes compared to the users’ current experience of a system; therefore, users may not be confident and precise about their needs concerning this future system.

With their norm for "Human-centred design processes for interactive systems" the International Organization for Standardization gives guidance on user-centered design activities throughout the life cycle of computer-based interactive systems. One of the core tasks of user-centred design is to negotiate and facilitate the communication across the well-known user-developer gap while acknowledging the different forms of expression and different requirements on each side. However, despite the implementation of a human-centred design process, some types of modern applications require instant adaptation due to their exposure to increasing situational dynamics.

Adaptivity and adaptability
Even if the user-centred design process implemented in a project guarantees a certain degree of user acceptance and yields a richer understanding of the context of use, the completed product's ability to adapt to changing conditions still plays a central role for a broad acceptance. The operational environment will change, the tasks will be distinct, the end-users will be heterogeneous, and their competences and expectations will evolve. Here again it is impossible for developers to anticipate all possible requirements modifications. Thus, the dynamics of changing conditions shifts the customisation process of the system's characteristics from the development phase to its usage and operation phase because the time needed for a professional development is too short or the new features are too costly.

For this reason, developers implement techniques of adaptation into the system in order to react to changing conditions as fast as possible. The example application scenario clearly shows an important distinction concerning such adaptation techniques: the differentiation between manually and automatically performed adaptation processes. Accordingly, the term adaptation decomposes into the two terms adaptivity and adaptability. Adaptivity indicates a system that adapts automatically to its users according to changing conditions, i.e. an adaptive system. Adaptability refers to users that can substantially customise the system through tailoring activities by themselves, i.e. an adaptable system. Adaptive and adaptable systems are complementary to each other. Both methods increase the match between user needs and system behaviour once the development of the system has been finished. Thus, the system is kept flexible during usage.

Catalysts for adaptation
Changing conditions trigger the execution of an adaptation. Many characteristics might be taken into account as catalysts for such an adaptation process. They can be clustered into three main categories: inter-individual, intra-individual and environmental differences.

Inter-individual differences
Inter-Individual Differences address varieties among several users along manifold dimensions. Physiological characteristics like disabilities are of major concern for application designers if they want to have their system accepted by a large community. The consideration of user preferences like language, colour schemes, modality of interaction, menu options or security properties, and numberless other personal preferences are popular sources of adaptation and can be reused in different applications. Other sources are the user's interests and disinterests, psychological personality characteristics like emotions, self-confidence, motivation, or beliefs, which are difficult to assess automatically.

Intra-individual differences
Intra-individual differences consider the evolution and further development of a single user, as well as the task over time. A static system falls short of changing user requirements as the user's activities and goals evolve. In an extreme case users are over-strained by the system in the beginning and perceive the same system as cumbersome and restricted as the user's expertise increases. In the same manner, the need for a higher flexibility of computer systems is pushed by the changing of the tasks to be accomplished with such a system.

Environmental differences
Environmental Differences basically result from the mobility of computing devices, applications and people, which leads to highly dynamic computing environments. Unlike desktop applications, which rely on a carefully configured and largely static set of resources, ubiquitous computing applications are subject to changes in available resources such as network connectivity and input/output devices. Moreover, they are frequently required to cooperate spontaneously and opportunistically with previously unknown software services in order to accomplish tasks on behalf of users. Thus, the environment surrounding an application and its user is a major source to justify adaptation operations.

See also

References

Human–computer interaction
Agile software development