An aspect that distinguishes applications on the Web from PC applications is that the behavior of many users can be observed in one single location. Maes and Shardanand demonstrated in  how centrally acquired data about user interests can be utilized to provide users with information adapted to their preferences. Rather than dynamically generating single html pages with information such as product recommendations we go another step further and adapt complete Web applications to the needs of individual users.
The automatic adaptation of whole applications on the level of code primitives is not feasible with current technology. We need to find proper abstractions and components as application building blocks to reduce the complexity of the application adaptation process. Therefore, we divide the construction of software into a supply oriented micro level for providing functional components and a demand oriented macro level where components are federated into applications according to user demand.
The only kind of code abstraction ubiquitous on the Web are document resources. Unfortunately, these do not satisfy our requirements both in terms of supported granularity and expressive power of inter-document relations. To overcome these limitations we based our approach on the WebComposition programming model .
On top of this general programming model we use the notion of services as higher level building blocks  encapsulating functionality required to perform a certain task such as placement of an order or providing customer feedback. In contrast to lower level system components, the function of services can be perceived and described without specific technical knowledge . Service components form the basis for macro level application adaptation and evolution.
The macro level adaptation of Web applications is done through a special application service. This service controls how other services are presented to the customer based on an automated analysis of user requirements (figure 1).
Determining the needs of an individual user is the basis for providing an adaptation mechanism for any kind of Web application. In our approach we tested three different methods that are all based on user behavior analysis and use services as functional building blocks:
The first one, which we call Conservative Service Selection (CSS), is solely based on past behavior of the user the requirements are being determined for. It is based on the assumption that users have favorite tasks they perform more or less regularily. Thus if a user accessed a service of an application in the past, it is considered likely that she will want to access that service again in the future. Similar methods are commonly used for adaptive applications in single user environments such as . Unfortunately CSS completely fails in predicting any user requirements not linked to repetitive behavior.
The second method we call Social Service Selection (SSS). It is based on the implicit exploitation of recurrent patterns in user behavior. Behavioral patterns state that people who exhibited a certain past behavior are likely to exert a certain behavior in the future with recent and expected future behavior forming a complete behavioral pattern . A simple such pattern might be that a person who once used a service to order a telephone installation will very likely (with probability p) use another service to buy accessories for that telephone. SSS is based on the implicit exploitation of behavioral patterns. Instead of directly associating observed actions via rules with services, we do so indirectly by deriving associations between users. This is similar to methods used to dynamically select web content such as .
The third method is a combination of CSS and SSS which we call CSS/SSS. It receives half of its service selection via each of the two methods mentioned before.
Our approach has been applied to the e-commerce system Eurovictor II that we jointly developed with Hewlett-Packard. Eurovictor was developed based on the WebComposition programming model and its functionality is available as service components that can be federated into different applications. We tested all three methods for automatic service selection. For evaluation we used a set of history data about past activities of 1000 users and compared our predictions to activities performed by the same users afterwards. In this scenario we achieved the best results with the CSS/SSS combination which delivered 10% more accurately predicted services than the SSS method and 38% more than the CSS method.
In this contribution we have briefly described a concept for building self-adaptive web-applications. It is based on a component oriented programming model for web-applications and user behavior analysis. We tested and applied our approach in a commercial web-application system.