Developing concurrent distributed systems