Co-design of distributed systems using skeleton and autonomic management abstractions