Decentralised Coordination Mechanisms as Design Patterns for Self-Organising Emergent Applications