设计软件的过程是软件架构角色的一部分,这一点应该在意料之中。这涉及要理解如何解决架构驱动力带来的问题,创建软件系统的整体结构,并为交付设定一个愿景。不管你想做到多敏捷,你可能都需要花一些 时间去明确思考架构要如何解决利益相关者提出的问题,因为你的软件系统自己搞不定它们。
软件设计的一个关键部分是技术选择,这通常是一个有趣的练习,但也有一定的挑战。例如,有些组织有一份允许使用的技术清单,你只能从中选择,有些组织则规定不允许使用特定许可的开源技术。接下来是其他所有因素,比如成本、许可、供应商关系、技术战略、兼容性、互操作性、支持、不熟、升级策略、最终用户环境,等等。这些因素掺杂在一起,常常会把选择一个富客户端技术之类的简单决策彻底搞成一场噩梦。需要有人负责这个技术选择的过程,这完全属于软件架构角色的职责范围。