为什么软件最终会变得复杂 - Alex Gaynor


通常将软件的复杂性(无论是编程语言,API还是用户界面)视为坏事情。然而,实际上没有人会在一开始就构建复杂的东西,那么复杂性为什么会异常普遍存在呢?这对于希望构建易于使用的软件感兴趣的人,了解导致复杂性Complex的原因至关重要。幸运的是,我相信这里有一个简单的解释。
任何功能需求的最自然的实现都是累加的,一般先试图将设计中的所有其他元素保留在原位,然后新增一个新组件:UI中的新按钮或函数的新参数。随着此过程的不断重复,系统的简单性就会丧失,而复杂性会取代它。在企业软件中,这种模式通常尤其明显,因为很明显,每个新功能都是为一个特别大的客户编写的,这给所有其他客户增加了复杂性。
每个功能需求都有一个选区–一些希望实施的组,因为他们从中受益。简单性却并非以这种相同的方式来支持,这就是经济学家所谓的非排他性商品,不是每个人都从中受益。这意味着支持者总是可以为他们的特定用例指出具体的好处,而反对者则声称更为抽象的缺点。结果是,对任何给定特征附加条件的反对者往往数量较少,更容易被忽略。导致不断增加功能,并简化了功能。
摆脱这种明显的不断新增功能的循环并不容易。我们可以轻松地说“拒绝所有功能需求”即可,但是这样做的项目最终将发现自己根本无法满足用户的需求!我们的方法必须更严格地衡量:我们需要花大量的时间来考虑一项新功能将如何给我们的所有用户带来负担,但是现实中我们却需要花费大量的时间来思考一项新功能将如何使我们的某些用户受益。
我们还应该花时间思考如何设计新功能,以维持Fred Brooks所谓的系统“概念完整性”的方式(banq注:领域概念的逻辑完整性),而不是仅仅添加一些新内容。
 
banq注:经常看到一句话:除非你的系统异常复杂,否则不要用XXX(XXX代表DDD或微服务等),这种观点是静止观点,复杂性是随着时间增加不断累积的,功能需求不断增加,那么复杂性就不断增加,提前预见到这种复杂性Complex,使用complcated复杂思维去解决,否则技术债务累积,每前进一步非常累,最后项目失败。