What is hard about software architecture
Here’s my initial list of things that are hard about software architecture. Many are open research questions.
- Non-static component configurations. That is, dynamic architectures.
- Bridging objects to components. Each has a different vocabulary and communication idioms.
- Cost-benefit analysis. How much benefit do you get from doing some architecture modeling, and when should you stop?
- Modeling of connectors and ports. When to use an N-way connector?
- When to attach two connectors to the same port?
- Refinement. Code-architecture unity / correspondence / assurance.
- Frameworks.
- Multiple languages (especially scripting languages) in one system.
- Evaluating alternative architectures.
- Choosing which qualities to promote to the architectural level.
- Using architecture models to discover problems in advance, not just document designs after the fact.
- Shoehorning your abstractions into {component, connector, port, role}
- Behavior. More specifically, how to abstractly model architectural behavior without continuing on into detailed behavior descriptions.
- Designs or patterns that span components.