如何决定:从零开始构建或逆向工程现成的解决方案

时间:2009-12-09 16:39:13

标签: estimation

让我们说有人让我建立一个带有大量自定义功能的youtube克隆,以支持他们想要做的一大堆古怪事情。

我如何决定从头开始构建以及构建白标或开源产品是否更好?

由于我过去的工作经验,我偏向于从头开始构建,因为那时我会知道我正在构建的内容的私密细节。这有助于提供更好的发布后支持和可扩展性。对于我的团队中没有人具有以前工作经验的现成解决方案,我从未感到舒服。我不太清楚我得到了什么。我不知道它是否能完成我想要做的所有事情,它有多少记录,以及我是否会在6个月后自己开枪。

我从未使用过这么多现成的解决方案,在决定从头开始构建是否一个好主意之前,我该如何评估它们呢?

如果我为预算紧张的人建立这个,但是他们也希望得到我的大量支持怎么办? (即购买解决方案符合预算,但我担心之后支持它)

10 个答案:

答案 0 :(得分:2)

来自发布的问题:

  

“由于我过去的工作经验,我偏向于从头开始构建,因为那时我会知道我正在构建的内容的私密细节。”

没有违法行为,但听起来你有Not Invented Here Syndrome。这通常被认为是“坏事”(tm)。 另一方面,乔尔·斯波尔斯基(Joel Spolsky)有一个很好的defense提出了一条建议:

  

“如果它是核心业务功能 - 无论如何都要自己动手。” - Joel Spolsky

那么,制作古怪的youtube克隆是你的核心业务吗?

答案 1 :(得分:1)

问题1:维护本网站的长期计划是什么?

回顾几十年的构建/购买决策,这是在开始时应该提出的最重要的问题。

答案 2 :(得分:1)

如果你能找到一个你熟悉的许可条款的开源项目(例如,除非你计划根据GPL发布你的工作,不是GPL),你至少应该看看他们的代码以获得一般性的想法一些类似的项目是如何运作的。然后,您应该确定开源项目是否与您想要构建的项目相似。如果是这样,建立它。如果不是,那就给予它所给出的想法,也许可以从中随意借用一个片段,并从头开始编写自己的(大部分)。

如果您构建的作品是封闭源代码或开源代码,但是如此复杂以至于您无法理解或修改它,那么您应该自己动手。对我来说,问题是,如果出现问题或者没有完全符合您的要求,您是否能够修复现成的解决方案。

答案 3 :(得分:1)

在构建克隆时,我会更自然地从头开始,因为你有一个很好的,经过验证的例子。 (最终规范!)如果您尝试评估/实施其他系统以匹配现有产品,那么当基本代码无法实现最终目标时,您将更有可能遇到严重的问题。我也同意你的所有维护考虑因素。

此外,评估系统既费时又不万无一失。我曾经花了一个月的时间来决定第三方网格,最后它基本上就是掷骰子。我评估了十几种产品一个月。我可以触摸多少功能? 5%也许。

答案 4 :(得分:1)

您没有现成产品的经验并不意味着没有人有过这方面的经验。环顾网络,在这里询问,如果其他人对特定产品有过良好的体验,您可能也会这样做。

在维护方面,维持一年下线的人可能还没有参与原始开发,如果代码是在内部制造的话,对他们没有任何影响,只要它很好写入。

答案 5 :(得分:0)

确定一系列重要因素,并以不同的详细程度浏览每个产品:D

答案 6 :(得分:0)

如果无法估算,请收集更多信息(调查)。

对两种解决方案的成本和收益进行估算,然后您就会做出决定,即使它可能根本没有完成该项目。

实际上,估算/调查包括找到你可以利用的所有东西。

这是一个项目的开始。祝你好运!

答案 7 :(得分:0)

您可以更多地量化您的选择,以帮助您做出决定。

如果你对你需要构建的内容做一些初步评估,并对每个部分的复杂性进行评级,你可以粗略估计你需要多长时间来构建。 (这需要事先考虑一下设计。)接下来,如果你按小时工作,计算你的劳动力量,增加1/3以解决无法预料的问题,并加入您计划整合的任何工具或包的成本。

现成的零件是否完全符合您的要求,还是需要定制?多少定制?多久才能做到?你的劳动成本是多少?

将此成本与购买现成组件的成本进行比较。储蓄是否实质性?

答案 8 :(得分:0)

如果您可以确定一个大约占用户需求的90%的软件包,那么请使用该软件包,但只有在用户愿意放弃该软件包不支持的10%的情况下才能使用该软件包。大多数用户实际上都是明智的,并且会跳到这个选项,特别是因为它比定制开发便宜得多。但是,如果用户坚持100%符合他们的需求,那么请进行自定义开发,并相应地计划和收费。

答案 9 :(得分:0)

这一切都归结为功能,约束,可扩展性和成本

如果现成的产品全部都是三件而且成本低于您编写产品所需的成本,那么就购买它。