  This is part I of the follow-up lecture notes of the lectures given by the
authors at the Three \CO" (Composability, Comprehensibility, Correctness)
Winter School held in Ko\v{s}ice, Slovakia, in January 2018, and Summer School
held in Budapest, Hungary, in June 2019. In this part we explain the role of
functional programming paradigm in the management of complex software systems,
and how the functional programming concepts play important role in the
designing such systems. Key prerequisite for implementing functional
programming concepts is properly designed system structure following well
defined design principles and rules. That is the main goal of this lecture to
introduce students with proper system modeling. Furthermore, we also explain
how new emerging technologies are designed in such a way that they enforce the
development of systems that comply to the design rules inspired by the
functional programming. This is extremely important in view of the current
network evolution and virtualization concepts, which will require many
functional programming concepts in the network services and functions, as will
be discussed in part II of these lecture notes. These notes provide an
introduction to the subject, with the goal of explaining the problems and the
principles, methods and techniques used for their solution. The worked examples
and exercises serve students as the teaching material, from which they can
learn how to use design principles to model effective system structures. Here
we focus on students understanding of importance of effective system structures
for coordination of development and management processes that are driven by
business goals and further evolution.
