- hierarchy is the way to limit complexity of the system, to restrain it
- every complex system has hierarchy (which is recursive)
- with every “level” of the hierarchy, we have:
- black-box view
- interactions between the system and it’s environment
- white-box view
- interactions between the components of the system
- this way, we can study only parts of the system (white-box view of that respective part) and other parts have as black-boxes
Hierarchical architectures
- these are a good design, but they don’t solve everything
- there are different approaches
- top-down, bottom-up and meet-in-the-middle
- engineering is basically doing low coupling and high cohesion in modular design in practice
Low coupling
High cohesion
Integration is tricky
- if we want to integrate more and more utilities and functions often create side-effects
- more complexity, changes, redesign from scratch etc.
- sometimes, we have:
- incomplete or unambiguous specification of the problem
- knowledge from multiple domains has to be incorporated
- no deterministic path to solution
- these problems create design problems with side-effects (engineering is about mitigating them)
Evolvability and scalability are also very tricky
- just adding new engine to a rocket is not enough (a lot of related things have to be changed)
- I cannot just add a new module to a CPU (it infuences a lot of things, the instruction set etc.)
- Airbus 380 is not just resizing Airbus 340 etc.
What we need to engineer something that is sustainable?
- so it could be evolved, maintained and upgraded easily?
- modular design, strong focus on hierarchical methodologies (low coupling, high cohesion) and their combination (see EDSM - NST (all lectures))
- related domain knowledge, knowledge of physics and business background