Development of distributed software systems is complex due to the distribution of resources, which complicates validation of system-wide functionality. Such systems include various facets like functionality and distribution, each of which must be validated and integrated in the final software solution. Model-based techniques advocate various abstraction approaches to cope with such challenges. To enhance model-based development, this paper proposes (1) guidelines for development of distributed systems, where the different facets are introduced gradually through systematic modeling extensions, (2) code generation capabilities supporting technology specific realizations, and (3) demonstration of the applicability of our approach using an industrial case study involving the development of a harvest planning system, where the communication infrastructure paradigm changed late in the project. When developing this system, we spent most time validating system-wide functionality. The model extensions allowed an easier change of the underlying communication paradigm and code generation supported realization of the different system representations.