2. Software Architecture: The hard Parts