What is hard about software architecture

Here's my initial list of things that are hard about software architecture. Many are open research questions.

  1. Non-static component configurations. That is, dynamic architectures.
  2. Bridging objects to components. Each has a different vocabulary and communication idioms.
  3. Cost-benefit analysis. How much benefit do you get from doing some architecture modeling, and when should you stop?
  4. Modeling of connectors and ports. When to use an N-way connector? When to attach two connectors to the same port?
  5. Refinement. Code-architecture unity / correspondence / assurance.
  6. Frameworks.
  7. Multiple languages (especially scripting languages) in one system.
  8. Evaluating alternative architectures.
  9. Choosing which qualities to promote to the architectural level.
  10. Using architecture models to discover problems in advance, not just document designs after the fact.
  11. Shoehorning your abstractions into {component, connector, port, role}
  12. Behavior. More specifically, how to abstractly model architectural behavior without continuing on into detailed behavior descriptions.
  13. Designs or patterns that span components.