It is unlikely that we can expect to apply traditional centralised management approaches to large-scale pervasive computing scenarios. Approaches that require manual intervention for system management will similarly not be sustainable in the context of future deployments considering their scale and their dynamic (or mobile) nature. This situation motivates the need to apply ‘autonomic’ techniques to system management, where the behaviour of whole systems results from the inherent properties that have been engineered in, i.e. such systems need to be adaptive, reliable and self-managing at the ‘whole system’ level.
In this paper we outline a number of design principles that can be applied to create systems that are autonomic in their operation. We focus particularly on generating (and analysing) global system behaviour that arises from the carefully designed interactions of the system components, rather than on the individual behaviour of the components themselves. The design heuristics that we derive (which are often nature-inspired) are illustrated in the context of a number of examples that show how the use of the appropriate principles can lead to the inherent global behaviours that we desire. The result is self-managing, self-repairing systems that can be easily deployed, thus reducing total cost of ownership and increasing overall system reliability.