I have a theory that software drives people insane
467 points • 4 days agoArticle Link

软件结合了速度、金钱、复杂性和高度抽象的独特特性,能深刻地影响人的心理。尽管大多数软件产品本质上不过是被美化的电子表格,但构建它们的过程常常会扭曲原本理性的人们的视角。想法与实现之间缺乏天然的摩擦,造成一种危险的氛围,使每一次潜在改动都显得迫在眉睫、具有战略意义且刻不容缓。与实体建筑不同,改动平面图会产生明显可见的成本,而改变软件的代价往往是隐形的,通过动力丧失、上下文切换和架构侵蚀逐渐累积。

这种易改性催生出一种文化:每一个"可以"很快就变成"应该"。软件开发中很少有明确的"完成"定义,团队因此常陷入无休止的迭代。每一个按钮、查询或基础设施组件在理论上都可以改进、优化或扩展。行业巨大的金钱潜力进一步放大了这种倾向,使人们对平凡任务赋予过度的情感重要性:一次按钮重设计不再只是界面调整,而被寄予未来财富或公司成功的希望。

复杂性也被当作一种心理拐杖,为那些构建、辩论和重写繁复系统的人提供了重要感与地位感。在许多情况下,这些系统自我强化,其存在更多是为了支撑构建它们的组织,而不是为了解决实际问题。由此形成一个反馈循环:经理、创始人和工程师们觉得必须不断拉动各种杠杆,把公司本身看作一段永远可变、未完成、需要下一次重构的软件。

对速度的痴迷从根本上排斥耐心。实际上,客户、工程师和企业都需要时间来成熟并找到稳定性。当组织把耐心解读为不作为时,就会用一阵阵发布、转向和重塑去取代它,而这往往掩盖了最初更简单的问题。讽刺的是,经过多年堆叠复杂性和反复转向后,团队常常又建议重建最初那个简单的产品,并确信自己发现了什么深刻洞见。

应对这种系统性疯狂的办法不是为了停滞而放慢脚步,而是要重拾一种比例感。这需要纪律性:认识到并非每一次减速都是危机,并非每一个想法都该上路线图,也并非每一个工具都必须成长为庞大平台。承认多数软件的最终目标不过是成为一个好用的工具,团队就能避免对已在正常运行的事物进行自我毁灭式的反复修补。真正的成功在于,当事情运转良好时学会按兵不动,把实用性置于那无尽而神经质的创新循环之上。

197 comments • Comments Link

- 当团队与终端用户隔离,依赖项目经理等中间人传递需求时,软件开发就会脱节且低效。直接与用户接触可以提供关键的一手信息,帮助团队把精力放在那些能解决真实问题并降低摩擦的小改进上。

- 在企业环境中,问"我们到底要解决什么问题?"是一项重要却常被忽视的诊断工具。把问题明确记录下来并培养协作思维,可以减少不必要的摩擦,把注意力集中到核心目标上。

- 单靠原始分析数据来驱动产品决策,通常不如可用性研究有效。数据容易被断章取义以支撑既有偏见,而观察用户在界面上的真实困扰则能提供客观、直接且无法忽视的证据。

- 开发者有时害怕直接面对用户带来的阻力,但这种摩擦恰恰是确保产品有价值的必要反馈。缺乏互动往往意味着工作偏离了用户真实需求,或者开发者被错误的激励驱动。

- 与过去相比,当代软件行业面临更多技术动荡和复杂性。许多臃肿的团队架构关注的是管理依赖关系和频繁变化的技术栈,而不是解决底层领域问题。

- 存在一种常见的产品开发反模式:利益相关者对他们实际上不会亲自使用的假想功能给出低质量的正面反馈。真正的验证需要批判性思维和对实际使用场景的观察,而不是寻求表面的认可。

- 保持克制、抵制构建大而不当的平台或不必要功能的冲动,是一项被低估的工程能力。许多公司因过早追求扩展而受损,失去了对那些提供实际价值、但看起来"枯燥"的核心问题的关注。

- 在 B2B 环境中,臃肿复杂的软件往往比简单实用的替代品更占优势,因为买家更看重持续的服务、功能集或与供应商的关系,而非纯粹的软件效率。

- 行业中看似"疯狂"的现象往往只是典型企业动力的折射:无论领域或产品如何,官僚操控、争功和目标频繁变动都是常态。

- 归根结底,软件是为实现用户目标而存在的工具。当开发者忽视这一点,沉迷于内部复杂性、抽象指标或为了简历而开发时,就偏离了软件应有的实用价值。

讨论凸显了软件作为抽象、可扩展工程与解决真实用户问题之间的根本张力。大家达成的共识是:与终端用户的隔绝——不论由开发者自我造成,还是由管理层强制执行——是低效和挫败感的主要根源。参与者认为,虽然分析数据和项目管理有其用处,但它们常常只是薄弱的决策外壳,忽视用户体验,导致产品过度设计且使用率低下。最成功的做法,是对简洁性保持纪律性的承诺,并愿意直面用户行为的现实,即便这些反馈与内部假设或公司议程相冲突。