Skip to content

第 21 章:决定什么重要

系列:软件设计的哲学 · 第 21/22 章
全书导读:00-overview.md


一句话总结

设计原则不是 checklist——在时间、人力与风险约束下,你必须判断哪些模块值得战略式投入、哪些可以战术式通过,上下文决定优先级


核心观点浓缩

  • 第 2 版新增章:全书原则的应用层——知道深模块好,还要知何处必须深
  • 投资梯度:核心域、高变更、高扇出接口 → 多设计时间;稳定边缘 → 可简化
  • 完美设计不存在;足够降低复杂度即胜利,避免分析瘫痪
  • 与产品/业务对齐:可靠性、扩展性、交付日期——显式 trade-off 表
  • 技术债可接受,若** knowingly** 借且计划还;无意识债才是杀手
  • 再访机制:每个战术式决策设日历提醒或 milestone,到期必须升级或删除

关键概念 / 金句

高优先级设计可战术式
插件 API、持久化格式一次性迁移脚本
多团队共用的 Session 核心内部调试工具
安全与数据完整性路径原型 UI

「战略式编程是默认姿态,但不是每个函数都值得设计两次。」


本章在全书中的位置

第 21 章为全书取舍枢纽,衔接第 19 章潮流批判与第 22 章结论。它回答实践者最常问的问题:「原则我都懂,明天 deadline 怎么办?」——用优先级框架代替放弃设计。第 2 版单独增章,说明「原则正确」与「资源有限」之间的张力无法靠更多规则消除,只能靠显式决策


个人思考与启发

面扫导出格式六种,若每种都设计两次会延期。划定「OBJ/STL 用户-facing、必须稳定」与「内部中间格式可迭代」,资源投在前者深模块 + 测试,后者允许战术式,整体复杂度仍可控。与产品对齐时,用变更频率 × 扇出矩阵排优先级,比凭感觉「这个模块很重要」更可辩护。季度复盘时可重排矩阵,防止临时战术式永久化。


与《程序员修炼之道》对照

  • 明白需求范围 creep 警惕——先定什么重要再写代码
  • 「品质三角」:范围、时间、资源;本书补充设计深度为可调维度
  • 知识组合:把设计决策记录在 ADR,便于日后重评优先级
  • 曳光弹可用于验证战术式路径,但上线前须对核心模块补战略式抽象
  • 曳光弹可用于验证战术式路径,但上线前须对核心模块补战略式抽象

重点与注意

重点:开工前与干系人确认非目标(明确不做什么)与质量栏。
重点:战术式决策要可见(TODO/issue),避免伪装成战略式完成品。
注意:「决定什么重要」不是给浅设计找借口——核心路径不能省。
注意:团队需共同优先级语言,否则各人战术式标准不一,整体熵增。
注意:向管理层解释延期时,用变更放大案例(改一处动十处)比抽象谈「质量」更有说服力。


导航第 20 章 为性能而设计 · 下一篇:第 22 章 结论

基于 VitePress 强力驱动 | 记录技术与生活