A software architecture is designed including static and dynamic aspects. The software architecture is analyzed against defined criteria. Consistency and bidirectional traceability are established between software architecture and software requirements. The software architecture is agreed and communicated to all affected parties.