软件的复杂性(无论是编程语言,API还是用户界面)通常被认为是一种弊端。然而,即使没有人开始构建复杂的东西,复杂性还是异常普遍。对于对构建易于使用的软件感兴趣的人们,了解复杂性的原因至关重要。幸运的是,我相信这里有一个简单的解释。
任何功能请求的最自然的实现都是累加的,尝试将设计中的所有其他元素保留在原位,并简单地插入一个新组件:UI中的新按钮或函数的新参数。随着该过程的重复,系统的简单性就会丧失,而复杂性就会发生。这种模式在企业软件中通常尤其明显,因为很明显,每个新功能都是为一个特别大的客户编写的,从而增加了所有其他功能的复杂性。
每个功能请求都有一个选区-一些想要实施的组,因为他们从中受益。简单性并非以相同的方式来构成,这就是经济学家所谓的非排他性商品-每个人都从中受益。这意味着支持者总是可以指出针对其特定用例的具体收益,而反对者则声称抽象得多的弊端。结果是,对任何给定功能的反对者都倾向于数量较少且更容易被忽略。导致功能的不断添加和简化的减少。
摆脱这种明显的循环并不容易。可以轻松地说,“因此拒绝所有功能请求”,但是这样做的项目最终将发现自己根本无法满足用户的需求!我们的方法必须更严格地衡量:我们需要花大量的时间来考虑一项新功能将如何给我们所有的用户带来负担,而我们却需要花费大量的时间来思考一项新功能将如何使我们的某些用户受益。我们还应该花时间思考如何设计新功能,以保持Fred Brooks所谓的系统“概念完整性”的方式,而不是仅仅依靠新的东西。