您无需说明,但“意外复杂性”定义为与“基本”复杂性相比,不是问题固有的复杂性。“驯服”所需的技术取决于您从何处开始。以下内容主要是指已经获得不必要的复杂性的系统。
我在许多大型的多年项目中都有经验,“偶然的”部分远远超过了“基本”方面,甚至超过了那些没有的方面。
实际上,费曼算法在一定程度上适用,但这并不意味着“认真思考”仅意味着无法被编码的魔法。
我发现有两种方法需要采用。两者兼而有之-它们不是替代品。一种是零散解决,另一种是进行大量返工。因此,可以肯定地“写下问题”。这可以采取对系统进行审核的形式–代码模块,它们的状态(气味,自动化测试的水平,声称有多少员工了解它),总体体系结构(即使有“问题”,也只有一个)。 ),需求状态等。
“偶然的”复杂性的本质是,没有一个问题需要解决。因此,您需要进行分类。就维护系统和发展系统的能力而言,它在哪里受到伤害?也许某些代码确实很臭,但不是最高优先级,可以进行修复以等待。另一方面,可能会有一些代码可以快速返回重构所花费的时间。
为更好的体系结构定义一个计划,并尝试确保新工作符合该计划–这是一种增量方法。
此外,请阐明问题的成本,并以此来构建业务案例以证明重构的合理性。这里的关键是,架构良好的系统可能更健壮和可测试,从而可以缩短实施变更的时间(成本和进度)–这是真正的价值。
重大的返工确实属于“认真思考”类别–您需要正确进行。在这里,拥有一个“费曼”(Feynman)(很好,只有一小部分就可以了)确实可以带来巨大的回报。不会导致更好的体系结构的重大返工可能是一场灾难。完整的系统重写为此而臭名昭著。
任何方法的隐含含义都是知道如何区分“偶然的”和“必要的” –也就是说,您需要有一个真正了解系统及其目的的优秀架构师(或架构师团队)。
说了这么多,对我来说关键的是自动化测试。如果拥有足够的资源,则系统处于受控状态。如果你不这样做。。。