Developing and managing today’s distributed applications is hard. Three important reasons for the increasing complexity are: (1) stakeholders of systems have various, often conflicting quality requirements; (2) the systems are subject to highly dynamic and changing operating conditions; (3) activity in the systems is inherently localized, global control is hard to achieve or even impossible. In this dissertation, we present an approach for developing such complex systems. Key aspects of the approach are architecture-centric software development, self-management, and decentralized control. Architecture-centric software development compels the stakeholders of a system to deal explicitly with quality goals and tradeoffs. Self-management enables a software system to adapt autonomously with changing operating circumstances. Decentralized control exploits collaboration between subsystems, which is essential to cope with the inherent locality of activity. We present a reference architecture for a family of multiagent systems that architects can use when applying the approach, and we demonstrate how we have successfully applied the approach to an industrial AGV transportation system.