1 分钟阅读

你的 Bug 可能正是别人的功能

软件工程的魔幻定律(8)


Part III-I:时间与估算

Hofstadter’s Law:自我指涉的估算悖论

Douglas Hofstadter 在《哥德尔、艾舍尔、巴赫》中写道:

“It always takes longer than you expect, even when you take into account Hofstadter’s Law.”


这条定律的结构本身就是它内容的最好注解——它是递归的,用来描述一个递归的问题:即使你知道自己会低估,你还是会低估。

认知科学上有一个解释:规划谬误(Planning Fallacy)。人类在估算未来任务时,倾向于以最理想的情形为基准,忽略过去类似任务实际花费的时间,也低估了未知风险的可能性。

软件项目的估算天然受这个偏差影响,叠加上 Ninety-Ninety Rule(Tom Cargill 归纳于 Bell Labs:前 90% 的代码用了 90% 的时间,剩下 10% 的代码用了另外 90% 的时间),结果几乎注定是延期。

比较有效的对抗策略不是"更仔细地估算",而是结构性地引入参照类(reference class forecasting):查看过去类似项目的实际完成时间,以此为基准做调整,而非凭空推算。