The complexity of modern middleware, and software solutions, is growing at an exponential rate. Only self-managing, or autonomic computing technology can reasonably stem the confusion this complexity brings to bear on human administrators. While much has been published on "architecture" and "function" for producing such systems, little has been written about the engineering of self-managing systems as a distinct paradigm. In this paper we suggest a straw-man for engineering of autonomic systems that is based on two essential tracks: a set of engineering principles that should guide the planning of autonomic systems and their interfaces and secondly a set of mathematical foundations upon which such systems can best be constructed. These foundational attributes are intended to guide the thinking of R&D organizations pursuing the development of autonomic computing capability. The role of architecture and standards is also discussed, highlighting their role in inter-component management.