Developing correct, distributed, adaptive software