No hay una respuesta definitiva a esto porque la "arquitectura de software" y el "diseño de software" tienen bastantes definiciones y tampoco hay una definición canónica.
Una buena forma de pensarlo es la declaración de Len Bass, Paul Clements y Rick Kazman de que "toda arquitectura es diseño pero no todo diseño es arquitectura" [Arquitectura de software en la práctica]. No estoy seguro de estar de acuerdo con eso (porque la arquitectura puede incluir otras actividades), pero captura la esencia de que la arquitectura es una actividad de diseño que se ocupa del subconjunto crítico del diseño.
Mi definición ligeramente flipante (que se encuentra en la página de definiciones de SEI ) es que es el conjunto de decisiones que, si se toman incorrectamente, hacen que su proyecto se cancele.
Un intento útil para separar la arquitectura, el diseño y la implementación como conceptos fue realizado por Amnon Eden y Rick Kazman hace algunos años en un trabajo de investigación titulado "Arquitectura, diseño, implementación" que se puede encontrar aquí: http: //www.sei.cmu .edu / library / assets / ICSE03-1.pdf . Su lenguaje es bastante abstracto, pero de manera simplista dicen que la arquitectura es un diseño que se puede usar en muchos contextos y está destinado a aplicarse en todo el sistema, el diseño es (err) diseño que se puede usar en muchos contextos pero se aplica en una parte específica del sistema e implementación es un diseño específico para un contexto y se aplica en ese contexto.
Por lo tanto, una decisión arquitectónica podría ser una decisión de integrar el sistema a través de mensajes en lugar de RPC (por lo que es un principio general que podría aplicarse en muchos lugares y está destinado a aplicarse a todo el sistema), una decisión de diseño podría ser utilizar un maestro / estructura de subproceso esclavo en el módulo de manejo de solicitud de entrada del sistema (un principio general que podría usarse en cualquier lugar, pero en este caso solo se usa en un módulo) y, por último, una decisión de implementación podría ser mover las responsabilidades de seguridad desde el Enrutador de solicitud al controlador de solicitudes en el módulo Administrador de solicitudes (una decisión relevante solo para ese contexto, utilizada en ese contexto).
¡Espero que esto ayude!