Developing applications comprising service composition is a complex task. Therefore, to lower the skill barrier for developers, it is important to describe the problem at hand on an abstract level and not to focus on implementation details. This can be done using declarative programming which allows to describe only the result of the problem (which is what the developer wants) rather than the description of the implementation. We therefore use purely declarative model-to-model transformations written in a universal model transformation language which is capable of handling even non functional properties using optimization and mathematical programming. This makes it easier to understand and describe service composition and non-functional properties for the developer.