We develop concepts of a stable distributed application and present an engineering approach for the life cycle of such applications. The definition of stability is motivated by the need to address changes in the environment in which a distributed application is embedded--a network of computers, software environment, and user access patterns. Current approaches for distributed applications engineering do not adequately address the stability issues raised in this paper. Although there are approaches for reliability, performance engineering, and scalability, hitherto they have not been brought together under a perspective such as stability engineering. We illustrate the concepts of stability and stability engineering with several example distributed applications.