Service engineering is the process of service development from domain analysis and requirements capture, through specification, design and implementation, to deployment and adaptation on service delivery platforms. Ideally one would like to specify and analyse services on a high level of abstraction, using modelling concepts close to the user and problem domain rather than at the platform and implementation domain, and then be able to derive design components and implementations from service models with a high degree of automation. It is argued in this paper that this conception is approaching reality and so is worth while pursuing to face the challenges of service engineering in a NGN context. The basis for this is new approaches to model services precisely, to analyse goals and tradeoffs concerning variability and context, and to transform service models into platform independent models from which implementations are automatically generated. Interestingly, the service models can provide information and mechanisms that help dynamic composition and adaptation at runtime. The approach is illustrated using a multimedia call service with access control requirements.