A key challenge for agent-oriented software engineering is to develop and implement open systems composed of interacting autonomous agents. On the one hand, there is a need for permitting autonomy in order to support desirable system properties such as decentralised control. On the other hand, there is a need for restricting autonomy in order to reduce undesirable system properties such as unpredictability. This paper introduces a novel analysis and design method for open agent-oriented software systems that aims at coming up to both of these two contrary aspects. The characteristics of this method, called EXPAND, are as follows: (i) it allows agents a maximum degree of autonomy and restricts autonomous behaviour only if necessary (ii) it uses systempectations as a key modelling abstraction and as the primary level of analysis and design; and (iii) it is sociologically grounded in Luhmann’s systems theory. The application of EXPAND is illustrated in a “car-trading platform” case...