@
whileFalse “当你系统做到 80%的时候,你发现产品的一个新需求无法实现,因为系统完成度 20%时写的底层架构不支持该操作”,其实这个问题我敢说是基本上就是“预先设计”本身引起的。
或者这么说,如果你的代码一直是完成且仅完成当前的业务需求,那么结果就是你的代码完全贴合业务需求,那么这个时候如果新的需求无法实现,只能说明这个需求本身是错的,你自己会很容易发现这一点。这时候你把问题抛回给提需求的人,他都能够很明白这其中的逻辑冲突。
软件开发中的复杂性我是分为两个部分来看的,一部分是业务逻辑的复杂性,另一部分是代码结构的复杂性,如果完全消除了代码结构的复杂性,那么软件整体的复杂性就跟业务逻辑本身的复杂性趋向于一致。这种情况下,如果新需求无法实现,就只会有一个原因:新业务与旧业务冲突,而不是技术上的问题。反过来,如果业务逻辑确实没有冲突,那么只能说明代码本身对未来的预测与当前业务不符,就是“预先设计”引起的问题。所以我还是拒绝任何程度的预先设计。
另一方面,当“你发现产品的一个新需求无法实现,因为系统完成度 20%时写的底层架构不支持该操作”的时候,如果因为进度或者其它客观原因,暂时没办法花时间和精力去修复,这时候“绕过这个底层问题”也是讲方法的,而不能因为底层已经烂了,上层就随便应付了事。