猜猜誰後來需要這些欄位來開發一個功能?……
… 有谁一年后需要这些列来构建一个功能?就是我,所以我发现自己不得不重复工作,而且现在产品有了用户,还要额外承担生产数据库迁移的开销。我想说的是,有时候也值得考虑相反的情况:如果移除这个或那个部分,会不会获得什么有价值的东西?在这篇文章中,证据显然表明是的,但在我自己的情况中,情况就没那么明确。
源讨论去除东西从来都不明显,但往往更好原帖 190 条评论 · 导入时统计… 有谁一年后需要这些列来构建一个功能?就是我,所以我发现自己不得不重复工作,而且现在产品有了用户,还要额外承担生产数据库迁移的开销。我想说的是,有时候也值得考虑相反的情况:如果移除这个或那个部分,会不会获得什么有价值的东西?在这篇文章中,证据显然表明是的,但在我自己的情况中,情况就没那么明确。
源讨论去除东西从来都不明显,但往往更好原帖 190 条评论 · 导入时统计把你的经验,加入这段讨论。
感谢你这个平衡(而且我认为是必要的)提醒。 很容易陷入过度防御性/投机性的事情,或者做得太少。 一个人的‘过早优化’可能是另一个人的‘我之前见过类似的情况,我会加上这次我希望能有的东西’——据我所知,没有一种可靠的方法来区分哪种是正确的。
完整原文那些特定列所需的数据库迁移是什么? 我猜这并不是唯一一次需要进行这样的迁移来添加列。是否可能随着新功能的出现,无论如何都需要添加列和迁移,因此一次或多次迁移在整体上影响不大?
完整原文不过在大多数情况下,预测需求会导致构建一些你不需要的东西。而当你确实需要的时候,你通常会发现你需要的是完全不同的形式。我曾经工作过的最糟糕的代码库就是那些为复杂的未来用途而设计的。在你的例子中,代码库一年后才需要这些列。因此,我认为删除所有为未来需求而构建的代码块是正确的做法,即使你最终可能需要它。
完整原文> 但原来的工作可能只花了我一个小时。而保留数据的成本大约是零。他似乎没有考虑到这一点。 我想这非常有启发性——在做之前,你必须预测YAGNI的成本。低成本的YAGNI功能可能会意外地变得有用。 我觉得这和随机的副项目是同样的原理,这些项目不是出于必要,而是出于好奇和/或探索而进行的。
完整原文我认为当你有一种删除无用之物的心态(当时你的列就是无用之物)时,你必须做好有时需要重新添加它们的准备。是的,这很痛苦,但这并不是说明这个过程无效的信号。你应该预期有时需要重新添加一些东西。 我们无法完美预测未来,所以在删除东西时总会有一些误删。要达到零误删率的唯一方法就是永远不要删除任何东西。 真正的问题是,我们能接受多少误删率。如果你只能举出这一种情况,说明你的同事的方法非常有效! (我认为埃隆·马斯克通常建议删除的误删率是10%是合适的,但这会因行业而异。)
完整原文这里的主要区别在于用户看到的东西与开发人员看到的东西,就像你在例子中提到的那样。对于用户来说,我认为答案几乎总是越少越好。对于开发人员也是如此,但有一定的灵活性。
完整原文添加你可能在未来需要的东西的主要问题是,人们会离开,人们会忘记,然后一年后,可能会有一些元数据列,但没有人记得它是否已经被使用过。我们可以使用它吗?我们应该删除它吗?有人记得Knight Capital的惨败,当时旧字段被重新使用导致了灾难。因此,保持现有的字段更安全,结果你最终会得到元数据和metadata_1。明年,没有人记得为什么有两个元数据字段,对应该使用哪一个感到非常困惑。
完整原文在这种情况下你是对的,移除额外的字段后来被证明是一个错误。但通常我看到的情况是相反的,你最终会携带一些不需要的表和字段,这会让情况变得混乱。更糟糕的是“我们添加了这个字段,但我们现在没用它,所以干脆在里面放点别的东西吧”。这可能会很快变得非常糟糕。这篇文章有点不同,因为“是的,他们确实需要计算器,人们应该在一开始就了解你的服务费用”。如果他们想放弃计算器,那么他们应该重新构建他们的定价计划,这样就不再需要计算器了。这不仅仅是一个IT问题。
完整原文尊重不同观点,分享具体经验。
登录后即可发帖、评论、转发和引用。