Software Architecture: Organizational Principles and Patterns