工程判断清单
把团队、架构、质量和决策问题整理成可以反复复盘的卡片。
这是一份中文导读版整理,按团队、计划、架构、质量、设计、规模与决策七个角度归类。 它不是逐字翻译,而是把每条定律整理成包含核心含义、常见场景和行动建议的知识卡片。
把团队、架构、质量和决策问题整理成可以反复复盘的卡片。
定律不是拿来背诵的,更适合在评审、排期、架构讨论和复盘时作为提醒。
用它检查估算、范围、指标和交付节奏,避免乐观叙事压过真实约束。
用它提醒复杂度、抽象泄漏、分布式假设和组织沟通都会进入系统形态。
用它判断哪些债务会滚大,哪些测试能兜底,哪些小破损会慢慢改变团队标准。
用它识别认知偏差、沉没成本、热潮误判和过度自信,让判断更接近真实世界。
每张卡片保留英文原名、中文译名、适用阶段和原站链接,并补充核心含义、常见场景和行动建议。
软件系统常常长得像它背后的沟通结构。
Conway's Law
核心系统架构会映射组织的沟通结构。团队之间如何协作、交接和争夺边界,往往会直接变成服务、模块和接口的形状。
场景微服务拆分、平台团队建设、跨部门需求交付、重构长期耦合系统时尤其明显。
行动先画清楚团队沟通路径和责任边界,再设计模块边界;如果架构目标变了,协作方式也要一起调整。
Brooks's Law
核心已经延期的软件项目,临时加人通常不会立刻提速,反而会增加培训、沟通和集成成本。
场景上线日期逼近、管理层想靠扩员补进度、团队需要快速接手陌生模块时。
行动优先缩小范围、切清依赖、减少并行冲突;只有任务可拆、接口清楚、有人能带时,加人才真正有效。
Dunbar's Number
核心人能稳定维护的关系和上下文是有限的。组织变大后,靠“大家互相知道”维持协作会越来越脆。
场景团队从十几人扩到几十人、项目群增多、会议和群消息开始淹没真正的信息。
行动把团队拆成可独立交付的小单元,用文档、接口、节奏会议和负责人机制替代隐性关系网。
The Ringelmann Effect
核心群体越大,个人贡献越容易被稀释;当责任不可见时,人会自然降低投入。
场景多人共同负责一个模块、大型评审会、没有明确 owner 的公共代码和流程。
行动让每项工作有明确 owner、明确验收结果和反馈周期;把“大家负责”改成“谁负责什么”。
Price's Law
核心少数人往往贡献了大部分关键产出。工程团队中,核心维护者、架构判断者和高质量执行者的影响会被放大。
场景关键模块长期依赖少数人、评审排队、事故处理总找同几个人时。
行动保护高杠杆贡献者的深度工作时间,同时通过文档、轮值、结对和培训降低知识集中风险。
Putt's Law
核心技术组织里,懂技术的人未必掌握管理权,掌握管理权的人也未必理解技术细节。
场景技术路线被非技术目标推动、管理层低估复杂度、工程师只讨论实现而忽视组织约束。
行动重大技术决策要同时呈现业务代价、技术风险和组织影响,让专业判断进入决策链路。
Peter Principle
核心人可能因为胜任当前岗位而被提拔,直到进入一个不再胜任的位置。优秀工程师不必然就是优秀管理者。
场景技术骨干转管理后疲惫、晋升只剩管理通道、团队失去一线技术核心时。
行动建立技术和管理双通道;晋升前验证目标岗位能力,而不只是奖励过去表现。
Bus Factor
核心如果一个关键系统只有少数人懂,团队就把连续性押在了个人身上。这个数字越低,组织越脆弱。
场景发布、运维、数据库脚本、核心算法、历史系统只有一个人能改时。
行动至少让两到三个人能独立接手关键链路;补齐运行手册、架构图、测试和演练。
Dilbert Principle
核心组织有时会把不适合一线执行的人推到管理层,结果让管理岗位承担了错误的人才安置功能。
场景会议变多但决策变差、管理者远离真实问题、团队需要绕开管理层才能推进时。
行动用结果、判断质量和团队健康度评价管理者;不要把管理岗位当成“离开一线”的默认出口。
计划最容易输给范围、时间、指标和人类的乐观偏差。
Premature Optimization
核心没有证据就优化,容易把代码写复杂、把设计锁死,却没有解决真实瓶颈。
场景功能尚未稳定、数据规模未知、还没有 profiling,就开始为极端性能场景重构。
行动先让系统正确、清晰、可测;等真实数据暴露瓶颈,再针对热点做局部优化。
Parkinson's Law
核心工作会膨胀到填满可用时间。时间越松散,范围漂移和低效等待越容易出现。
场景项目没有中间验收、需求没有冻结点、排期只给截止日期不管过程。
行动把大目标拆成短周期交付,明确范围、验收标准和决策截止点,避免时间被自然消耗。
The Ninety-Ninety Rule
核心前 90% 看起来很快,最后 10% 往往吞掉同样多甚至更多时间。真正难的是集成、修边和上线。
场景Demo 很快完成,但权限、异常、兼容、迁移、监控和文档长期收不完。
行动估算时单独列出收尾清单,把集成、测试、发布、灰度和回滚作为一等任务。
Hofstadter's Law
核心复杂任务总会比预期更久,即使你已经考虑到它会更久。人对未知复杂度天然低估。
场景跨系统改造、遗留代码迁移、需求看似简单但牵动很多边界条件。
行动估算时用历史数据校准,设置缓冲,提前做技术 spike,并把不确定项显式列出来。
Goodhart's Law
核心指标一旦变成目标,就会被优化、规避甚至扭曲。指标只能辅助判断,不能替代判断。
场景用代码行数、故事点、提交次数、缺陷数、响应时长作为单一绩效目标。
行动组合使用质量、结果和过程指标;定期检查指标是否诱导了错误行为。
Gilb's Law
核心无法清楚定义和衡量的目标,很难被可靠交付。模糊的“更好”会制造对齐幻觉。
场景需求写着“性能更快”“体验更顺”“稳定性更高”,但没有指标和验收方法。
行动把质量目标量化成可观察结果,例如响应时间、错误率、转化率、恢复时间或人工步骤数。
抽象、分布式系统和第二版野心,都会把复杂度重新带回来。
Hyrum's Law
核心只要使用者足够多,任何可观察行为都可能被依赖,即使它没有写进正式契约。
场景API 改版、日志格式调整、排序规则变化、默认值改变、前端依赖后端“偶然行为”。
行动把兼容性当成真实约束;变更前盘点隐性依赖,提供迁移期、版本化和弃用公告。
Gall's Law
核心能工作的复杂系统通常从能工作的简单系统演化而来,而不是一次性设计出来。
场景新平台、新中台、新架构蓝图试图一步到位覆盖所有未来场景。
行动先做最小可运行系统,验证关键路径,再在真实反馈中扩展复杂度。
Law of Leaky Abstractions
核心抽象可以降低日常使用成本,但不能永久隐藏底层事实;边界情况会把底层细节重新暴露出来。
场景ORM 性能问题、网络库超时、容器资源限制、云服务异常和并发 bug。
行动使用抽象时保留底层心智模型,关键链路要知道它最终如何存储、调用、失败和恢复。
Tesler's Law
核心复杂度不会凭空消失,只会被分配给用户、产品、工程或运维中的某一方。
场景为了让用户少填一步,后端需要推断、同步、校验和处理大量异常。
行动显式决定复杂度由谁承担,并评估这是否符合产品价值、团队能力和长期维护成本。
CAP Theorem
核心在网络分区出现时,分布式系统必须在一致性和可用性之间做取舍。
场景跨机房数据库、分布式缓存、订单库存、协同编辑和多区域部署。
行动按业务代价选择策略:哪些数据必须强一致,哪些可以最终一致,哪些场景宁可暂时不可用。
Second-System Effect
核心第二版系统很容易承载过多愿望,因为团队想把第一版遗憾一次性补完。
场景大重写、平台升级、产品 2.0、架构替换时功能边界迅速膨胀。
行动为重写设定更窄目标和迁移路径,优先解决一两个核心问题,而不是顺手重做一切。
Fallacies of Distributed Computing
核心分布式系统中,网络、延迟、带宽、安全、拓扑和运维成本都不能被假设为理想状态。
场景服务拆分后调用链变长,系统开始遇到超时、重试风暴、部分失败和数据不一致。
行动默认远程调用会失败;为超时、幂等、降级、熔断、观测和数据修复设计明确方案。
Law of Unintended Consequences
核心任何改变都可能触发预料外的副作用,尤其是在复杂系统和复杂组织中。
场景改一个缓存策略影响数据新鲜度,改一个激励指标改变团队行为,改一个接口影响下游。
行动上线前做影响面分析和预演,上线后用监控、灰度、告警和回滚机制快速收敛风险。
Zawinski's Law
核心通用软件常被诱惑不断扩展边界,最后变成“什么都想做”的平台。
场景工具产品不断加入聊天、通知、文档、工作流和数据看板,核心体验反而变重。
行动每次新增能力都问:这是核心价值的一部分,还是边界失控?能否通过集成而不是内置解决?
质量不是最后补上的工序,而是每天积累出来的系统习惯。
The Boy Scout Rule
核心离开代码时,让它比你来时更好一点。持续的小改善能避免质量滑坡。
场景顺手修正命名、删除无用分支、补一个测试、把重复逻辑抽出来。
行动把改进控制在当前任务附近,避免借机大重构;每次提交都留下一个更清楚的局部。
Murphy's Law / Sod's Law
核心可能出错的地方终会出错。工程系统必须假设失败会发生,而不是假设一切顺利。
场景磁盘满、网络断、权限错、配置缺失、用户输入异常、第三方服务超时。
行动为失败路径写测试和处理逻辑;关键流程准备重试、降级、告警、备份和恢复手段。
Postel's Law
核心对外接收可以适度宽容,对自身输出必须严格稳定。宽容输入能提升兼容性,严格输出能减少混乱。
场景API 解析旧客户端字段、导入历史数据、处理第三方回调格式差异。
行动输入层做清洗和兼容,输出层坚持规范、版本和 schema;不要让宽容变成无边界。
Broken Windows Theory
核心明显的问题长期无人处理,会降低团队对质量的默认标准,更多问题会被默许。
场景测试长期红着、lint 被忽略、临时代码一直留着、文档明显过期。
行动快速修复可见坏味道;如果暂时不能修,至少记录 owner、原因和处理时间。
Technical Debt
核心为速度做出的技术折中会产生利息。债务不是罪,但不管理就会吞噬未来交付能力。
场景临时方案变长期依赖、测试缺失导致不敢改、架构捷径让后续功能越来越慢。
行动记录债务本金和利息,用业务语言解释代价,并把还债安排进真实迭代。
Linus's Law
核心足够多人用不同视角审视代码,问题更容易暴露。质量来自可见性和反馈密度。
场景开源项目、代码评审、安全审计、事故复盘和日志观测。
行动让关键代码更容易被审阅、运行和验证;建立评审文化,而不是依赖少数人的直觉。
Kernighan's Law
核心调试通常比写代码更难。如果写代码时已经用尽聪明才智,维护时就会更困难。
场景炫技式一行代码、复杂状态机、过度抽象、没有日志和测试的并发逻辑。
行动宁可写清楚一点,也不要写到只有自己当下能懂;为未来调试留下命名、日志和测试。
Testing Pyramid
核心测试组合应该有大量快速底层测试、适量集成测试和少量端到端测试。
场景只靠端到端测试导致反馈慢、易碎、定位困难;只靠单元测试又覆盖不了集成风险。
行动把业务规则放进快速测试,把接口契约和关键用户路径放进更高层测试。
Pesticide Paradox
核心同一批测试反复运行,能发现的新缺陷会越来越少。测试也会老化。
场景测试全绿但线上仍频繁出问题,说明测试覆盖的风险已经落后于系统变化。
行动根据事故、变更热点和真实用户路径更新测试;加入探索测试、属性测试或混沌测试等新视角。
Lehman's Laws of Software Evolution
核心被真实使用的软件会持续变化,并且在变化中自然变复杂。维护不是例外,而是常态。
场景产品上线后需求不断变、兼容旧数据、支持新平台、修复长期积累的边界问题。
行动把演化能力设计进系统:模块边界、测试、迁移脚本、可观测性和持续重构都要长期存在。
Sturgeon's Law
核心多数产物质量平平并不意外。好质量需要筛选、打磨和反馈,而不是自然出现。
场景代码、需求、文档、方案和会议纪要初稿质量不稳定。
行动建立评审和筛选机制,接受初稿粗糙,但不要让粗糙未经处理就进入生产。
好的设计经常不是多做,而是知道哪些东西先不要做。
YAGNI
核心不要为了想象中的未来需求提前实现功能。提前设计常常带来真实的复杂度,却只服务假设。
场景提前做插件系统、多租户、复杂权限、抽象数据层,但当前产品还没有这些需求。
行动保留可演化空间,但延迟实现;等需求真实出现时,再用更准确的信息设计。
Don't Repeat Yourself
核心同一知识不应散落多处。重复会让修改变慢、行为不一致,并扩大维护成本。
场景相同业务规则在前端、后端、脚本和文档中各写一份。
行动抽出真正相同的知识来源;但不要为了表面相似过早抽象,避免把不同变化节奏绑在一起。
Keep It Simple, Stupid
核心简单不是简陋,而是减少不必要的概念、路径和依赖,让系统更容易理解和修改。
场景为小需求引入复杂框架、过多层级、难以解释的配置和抽象。
行动优先选择可读、可测、可替换的方案;复杂性必须为明确收益付费。
SOLID Principles
核心SOLID 是一组降低面向对象系统变化成本的设计约束,重点是职责、扩展、替换、接口和依赖方向。
场景类职责膨胀、继承层次混乱、接口过大、依赖具体实现导致测试困难。
行动用 SOLID 识别变化点和耦合点,不要机械套原则;目标是降低变更成本,而不是增加仪式感。
Law of Demeter
核心模块应尽量少知道其他模块的内部结构。调用链越深入,耦合越隐蔽。
场景代码里出现类似 a.b.c.doSomething 的穿透式访问,说明调用方知道了太多内部细节。
行动让对象暴露更贴近意图的方法,把内部导航封装在拥有数据和规则的模块内。
Principle of Least Astonishment
核心接口、交互和命名应该符合使用者预期。让人意外的行为会增加学习成本和事故概率。
场景按钮文案与结果不一致、API 默认行为反直觉、函数名看似查询却会修改状态。
行动按用户和调用者的心理模型设计;对危险行为使用清晰命名、确认和显式参数。
当系统变大,性能、并行和连接价值都会出现新的约束。
Amdahl's Law
核心系统加速受限于无法并行的部分。并行资源再多,也绕不开串行瓶颈。
场景多线程、分布式任务、构建系统、数据处理流水线中,某个单点步骤拖住整体。
行动先量化串行比例,再决定是否扩容;优化最慢的不可并行部分通常收益最大。
Gustafson's Law
核心资源增加不只可以缩短时间,也可以让系统处理更大规模的问题。
场景机器学习训练、批量分析、渲染、搜索索引和大规模仿真。
行动评估扩展性时,不只问“能快多少”,也问“能不能在同样时间内处理更大问题”。
Metcalfe's Law
核心网络价值会随连接数量增长而放大。节点越多,潜在连接和协作价值越高。
场景开发者生态、协作平台、插件市场、社交产品、知识库和内部平台。
行动不要只优化单点功能,也要降低连接成本:邀请、集成、发现、权限和协作体验都影响网络价值。
工程判断不仅是技术问题,也会被心理偏差和信息结构影响。
Dunning-Kruger Effect
核心能力不足时,人反而可能高估自己;随着理解加深,才会更准确地意识到问题复杂度。
场景新技术刚学会就全面引入、低估遗留系统、过度自信地承诺排期。
行动用评审、原型、数据和复盘校准判断;让不确定性明确进入方案和排期。
Hanlon's Razor
核心很多问题来自疏忽、误解、信息不完整或系统缺陷,不必第一时间归因于恶意。
场景接口被误用、需求理解偏差、线上事故、跨团队合作中的“对方为什么这样做”。
行动先查事实和流程,再判断动机;把问题转化为可修复的沟通、文档和系统约束。
Occam's Razor
核心解释力相近时,优先选择假设更少的方案。复杂解释需要更多证据。
场景排查 bug 时同时怀疑编译器、框架、网络和缓存,却忽视最近一次简单改动。
行动从最少假设、最容易验证的路径开始排查;逐步增加复杂度,而不是一开始就跳到稀有原因。
Sunk Cost Fallacy
核心已经投入的成本不该决定下一步。继续投入要看未来收益,而不是过去付出。
场景平台重写失败但不愿停止、功能没人用但持续维护、方案错误却因为投入太多继续推进。
行动定期设置止损点,用未来价值、机会成本和替代方案重新评估,而不是用过去投入证明继续合理。
The Map Is Not the Territory
核心模型、图表、文档和指标只是现实的简化,不等于真实系统本身。
场景架构图很清楚但代码已偏离,需求文档完美但用户行为不同,仪表盘正常但体验很差。
行动把文档和指标当作导航工具,同时定期回到真实代码、日志、用户反馈和运行环境中校验。
Confirmation Bias
核心人会更容易注意和相信支持自己观点的信息,忽略反例。工程判断也会被立场牵引。
场景技术选型、性能优化、事故归因、产品假设验证时,只找支持已有结论的数据。
行动主动寻找反证,邀请持不同意见的人评审,并在实验前写清楚什么结果会推翻假设。
The Hype Cycle & Amara's Law
核心新技术短期影响常被高估,长期影响又容易被低估。热潮和低谷都不是最终答案。
场景AI、区块链、低代码、云原生等技术在组织内被快速神化或快速否定。
行动用小规模真实场景验证价值;既不盲追,也不因第一轮失望而忽视长期演化。
The Lindy Effect
核心经受时间考验的非易逝事物,往往更可能继续存在。稳定原则通常比短期潮流更可靠。
场景选择数据库、协议、语言、架构原则、基础工具和团队实践。
行动对基础层优先选择久经验证的技术;对新技术要求更明确的收益和退出方案。
First Principles Thinking
核心把问题拆回最基本事实,而不是沿用类比、惯例或行业模板。
场景面对新业务、新架构、新成本模型时,过去经验只能部分参考。
行动先列出不可变约束、真实目标和基本资源,再从这些事实重新推导方案。
Inversion
核心不仅问怎样成功,也问怎样会失败。反过来看问题,能暴露乐观计划忽略的风险。
场景项目启动、上线准备、安全设计、可靠性设计和事故预案。
行动做 pre-mortem:假设项目失败了,列出最可能原因,然后提前消除或监控这些原因。
Pareto Principle
核心少数原因常带来大部分结果。影响通常不平均分布,工程投入也不该平均分配。
场景少数 bug 造成大部分事故,少数页面贡献大部分流量,少数模块消耗大部分维护时间。
行动用数据找高影响区域,优先处理最能改善结果的 20%,避免把精力平均撒开。
Cunningham's Law
核心提出一个具体但可能不完美的答案,往往比空泛提问更容易获得修正和反馈。
场景技术方案讨论、PR 草稿、接口设计、文档初稿和社区求助。
行动别只问“该怎么做”;先给出草案、假设或最小实现,让别人能围绕具体对象改进。
这份页面适合快速复盘;如果要引用、学习完整案例或查看英文资料,请回到原站。
完整英文内容、案例、来源和更多链接请以原站为准。
本站仅提供中文导读与重新整理的学习笔记,不复制或分发原站正文的完整翻译。