Most would agree that large-scale open distributed systems are an area of enormous social and economic potential. In fact, regardless of whether they are realised for the purpose of business or leisure, in a private or a public context, people’s transactions and interactions are increasingly mediated by computers. The resulting networks are usually large in scale, involving millions of interactions, and are open for the interacting entities to join or leave at will. We have been experiencing a paradigm shift in the way that such systems are built, enacted, and managed: away from rigid and centralised client–server architectures, towards more flexible and decentralised means of interaction. Nowadays, there is a growing awareness that the notion of agreement and agreement processes will be of key importance for the next generation of such decentralised large-scale open distributed systems (Ossowski et al. 2013). Until recently, the concept of agreement was a domain of study mainly for philosophers and sociologists and it was applied exclusively to human societies. In recent years, the growth of disciplines such as social psychology, socio-biology, social neuroscience, together with the spectacular emergence of the information society technologies, have changed this situation. Presently, agreement and all the processes and mechanisms related with reaching agreements between different kinds of agents are a subject of research and analysis also from technology-oriented perspectives. Casanovas (2013), for instance, tackles this matter from within the context of philosophy and sociology of law. A study from the perspective of cognitive science and technology is introduced by Paglieri (2013). In one or another way, the notion of agreement has always been relevant to the development software systems as well. Traditionally, it has been based on implicit agreements between programmers and language designers. Thanks to the formal semantics of programming languages specified by their designers, programmers are aware of the meaning of the computational concepts used to write and execute a program. For instance, programmers who use some imperative programming languages share the meaning of the concept of variable, value or loop as well as the notion of program state and state transition. As software systems become bigger and more complex, more dynamic and explicit agreements between project leaders and programmers are needed, in order to establish and document the relationships between the different software components. These agreements (e.g. in the form of specifications of interface and behaviour) become then the basis for the subsequent implementation and verification of the resulting software product. They are established dynamically at design-time, as project leaders and programmers need to interact and discuss the component specifications. However, once such agreements are reached for all elements of the software system, they necessarily remain unchanged at execution time. But, when * George Vouros georgev@unipi.gr