长期以来,软件行业一直有一种根深蒂固的观念:软件架构应当在第一行代码写下之前就已经设计完成。这种观念在很大程度上受到了建筑行业的影响。人们曾认为,成功的软件架构在开发过程中不应发生变化,因为一旦架构需要重构,往往意味着高昂的废弃成本和返工成本。
敏捷软件开发方法的兴起,对这种架构观念提出了挑战。预先规划架构的方式,建立在一个前提之上:需求必须在编码开始之前就被确定下来。由此形成了一种分阶段的开发模式,也就是通常所说的瀑布式开发:先确定需求,再进行架构设计,最后进入构建阶段,也就是编程阶段。

然而,敏捷开发挑战的正是“需求可以提前固定下来”这一假设。它指出,在现代商业环境中,需求的持续变化并非例外,而是一种必然。与此同时,敏捷开发也提供了相应的项目规划方法,使团队能够在可控范围内应对变化。
在这个由敏捷驱动的新世界里,许多人开始质疑架构的作用。显然,那种预先制定、随后便一成不变的软件架构愿景,已经难以适应现代软件开发的动态环境。但这并不意味着架构不再重要。事实上,还存在另一种架构方式:它以敏捷的方式拥抱变化。
在这种观点下,架构不是一次性的前期设计,而是一个持续演进的过程。它与编程活动紧密协作,既能够响应不断变化的需求,也能够从编程实践中获得反馈,并据此不断调整自身。我们将这种方式称为“演进式架构”,意在强调:即使变化难以预测,软件架构依然可以在持续反馈中朝着正确的方向发展。
在海外某些技术咨询公司中,演进式架构这一理念已经被长期实践。一些技术负责人曾在本世纪初领导过多个重要项目,并在技术管理岗位上培养了大批技术领导者;另一些人则持续观察这些实践,提炼并传播其中的经验教训;还有一些人将一线项目工作与技术领导力培养结合起来,推动这一理念在更多团队中落地。
这些实践始终强调一点:架构至关重要,绝不能听任其自然发展。实践者们当然也犯过错误,但正是这些错误促使他们不断学习,并逐步加深了对软件架构的理解:如何构建一个能够优雅应对用途变化的代码库,如何让架构在变化中保持韧性,如何让系统在长期演进中仍然维持清晰、稳定和可控。
演进式架构的核心,在于持续进行小步调整,并建立有效的反馈回路,使每个人都能从系统的演进过程中学习。持续交付的兴起,是演进式架构得以真正落地的关键推动因素。借助持续交付,团队能够更频繁、更可靠地获得反馈,也能够更及时地发现软件架构层面的偏离与风险。在实际研发管理中,像 PingCode 这样的智能化研发管理工具,也能帮助团队打通从目标、需求、开发、测试到发布上线的全过程,让研发数据顺畅流转,从而为架构演进提供更清晰、可追踪的反馈依据。
本书的作者引入了“适应度函数”这一概念,用来持续监控架构的状态。通过适应度函数,团队可以将某些关键的架构目标显性化、可度量化,并在系统演进过程中持续验证这些目标是否仍然得到满足。作者还探讨了架构演进的不同方式,并特别关注了与长期数据相关的问题——这往往是软件架构讨论中容易被忽视,却又极其关键的话题。
康威定律贯穿了本书的大部分讨论,这并不令人意外。软件架构从来不只是技术结构的结果,它也深受组织结构、沟通方式和团队协作模式的影响。理解组织与架构之间的相互作用,是理解演进式架构的重要前提。
虽然我们对于如何以演进式的方式构建软件架构仍有许多需要学习之处,但本书已经为理解当前的实践水平和认知边界提供了一份重要的路线图。随着越来越多的人意识到,软件系统在 21 世纪的人类社会中正扮演着核心角色,如何在拥抱变化的同时保持灵活、稳定和可持续,将成为每一位软件技术领导者必须掌握的能力。
文章包含AI辅助创作,作者:liu,如若转载,请注明出处:https://docs.pingcode.com/baike/5243776