Towards a Design Methodology for Self-optimizing Systems -- Design Knowledge and