Kasbah Ait Benhaddou, Atlas Mountains, UNESCO world cultural heritage © Lutz Buschmann
This chapter presents the root and entry point to our pattern language for distributed computing. Its featured patterns help to transform the mud of requirements and constraints we usually start with into a coarse-grained software structure with clearly separated, tangible parts that make up the system being developed, and address several key concerns of sustainable software architectures: operational aspects such as performance and availability, as well as developmental qualities like extensibility and maintainability.
Large distributed systems tend to be complex. In the beginning, all we have is a set of requirements and constraints that must be transformed into a working software system. A naive approach to development is likely to result in a 'big ball of mud' [FoYo99], a software clump whose design and code is so messy that it is hard to see any coherent architecture in it. Such software is hard to understand, maintain, and evolve, and over time it also tends to suffer from poor stability, performance, scalability, and other essential operational architecture qualities [Bus03].
One of the keys to successful software development is structure. We need structure that can be understood by developers, structure that is resilient to the forces to which the system and ...