Embedded real-time systems are becoming increasingly complex due to ever increasing size and functionality so that complexity management is of growing importance, especially in dependable hard real-time systems development where errors caused by complexity can have fatal consequences. This paper systematically characterizes different kinds of complexity: System-level complexity, component interface complexity, and component implementation complexity. The effects of the different kinds of complexity are described and it is explained why minimizing system-level complexity should be a principal goal of any distributed embedded real-time systems architecture. The concept of system-level components is introduced as a solution to the problem of system-level complexity during the integration process.