【问题标题】:How to decide: build from scratch or reverse engineer off the shelf solution如何决定:从头开始构建或对现成的解决方案进行逆向工程
【发布时间】:2009-12-09 16:39:13
【问题描述】:

假设有人让我为他们构建一个 youtube 克隆,其中包含许多自定义项,以支持他们想做的一大堆古怪的事情。

我如何决定从头开始构建还是使用白标或开源产品更适合我?

由于我过去的工作经验,我倾向于从头开始构建,因为这样我就会知道我正在构建的细节。这有助于更好的发布后支持和可扩展性。对于我团队中没有人使用过的现成解决方案,我从来没有感到自在。我不太确定我得到了什么。我不知道它是否能完成我想做的所有事情,它的文档记录如何,以及我是否会在 6 个月后开枪打死自己。

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

如果我正在为预算紧张的人构建这个,但他们也期望我在路上得到很多支持怎么办? (即购买解决方案符合预算,但我担心之后支持它)

【问题讨论】:

  • 如果他们想要一个文字处理器,你会从头开始写一个吗?
  • 我会说考虑一下有多古怪......请求越陌生,它就越有可能永远不会通过。相应地花费你的时间......
  • @Neil:但我们在这里讨论的是一大堆自定义,而不仅仅是简单的旧用法。
  • 如果他们想要一个具有 gps 功能、Skype 集成、电子商务功能、发射核导弹的红色按钮的文字处理器,那么是的,也许从头开始构建有意义?整合所有这些现成的解决方案将是一场噩梦
  • @Neil:比较文字处理软件和在线视频网站就像比较苹果和橘子一样……需要考虑非常不同的因素。

标签: estimation


【解决方案1】:

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

此外,评估系统非常耗时,而且并非万无一失。我曾经花了一个月的时间在第 3 方网格之间做出决定,最后它基本上是掷骰子。我评估了十几个产品一个月。我可以触摸多少功能?可能是 5%。

【讨论】:

    【解决方案2】:

    来自发布的问题:

    “由于我过去的工作经验,我倾向于从头开始构建,因为这样我就会知道我正在构建的细节。”

    无意冒犯,但听起来你有Not Invented Here Syndrome。这通常被认为是“坏事”(tm)。 另一方面,Joel Spolsky 有一个很好的 defense 和一条建议:

    “如果它是核心业务功能 - 无论如何都要自己动手。” ——乔尔·斯波尔斯基

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

    【讨论】:

    • 这是真的,我认为我确实有这里没有发明的综合症......我记得曾经试图让 wordpress、phpbb、magento 以客户想要的方式作为一个系统一起工作...... ..我认为那是我的 NIH 综合症开始的时候
    【解决方案3】:

    问题 #1:维护此站点的长期计划是什么?

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

    【讨论】:

      【解决方案4】:

      如果您能找到一个带有您熟悉的许可条款的开源项目(例如,不是 GPL,除非您计划在 GPL 下发布您的作品),您至少应该查看他们的代码以大致了解一些类似的项目是如何运作的。然后,您应该决定开源项目是否与您想要做的事情足够相似,您可以在它的基础上进行构建。如果是这样,建立它。如果没有,请对它提供的想法表示赞赏,也许可以到处借用一个 sn-p,然后(大部分)从头开始编写自己的。

      如果您要构建的工作是封闭源代码或开源的,但过于复杂以至于您永远无法理解或修改它,那么您应该自己动手。对我来说,归根结底是,如果出现问题或者它没有完全按照您的意愿行事,您是否能够修复现成的解决方案。

      【讨论】:

        【解决方案5】:

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

        在维护方面,一年后进行维护的人可能无论如何都没有参与原始开发,只要代码是内部编写的,对他们没有任何影响,只要它是好的写的。

        【讨论】:

          【解决方案6】:

          确定重要因素的列表,并详细了解每个产品:D

          【讨论】:

            【解决方案7】:

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

            估计这两种解决方案的成本和收益,然后你就会做出决定,即使它可能根本不做这个项目。

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

            这就是项目的开始方式。祝你好运!

            【讨论】:

              【解决方案8】:

              您可以进一步量化您的选择以帮助您做出决定。

              如果您对构建所需的内容进行初步估计并评估每个部件的复杂性,您可以粗略地猜测构建需要多长时间。 (这需要提前对设计进行一些思考。)接下来,如果您按小时工作,请计算您的劳动量,增加 1/3 以解决不可预见的问题,并添加您计划集成的任何工具或软件包的成本。

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

              将该成本与购买现成组件的成本进行比较。节省的钱是否可观?

              【讨论】:

              • 增加1/3!翻倍再翻倍!
              【解决方案9】:

              如果您可以确定一个包可以满足您的用户所需的大约 90%,那么请使用该包,但前提是用户愿意放弃该包不支持的 10%。大多数用户实际上是明智的,并且会选择这个选项,特别是因为它比定制开发便宜得多。但如果用户坚持100%满足自己的需求,那就去定制开发,做相应的计划和收费。

              【讨论】:

                【解决方案10】:

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

                如果现成的产品同时具备这三个功能并且成本低于您编写它所需的成本,那么就购买它。

                【讨论】:

                  猜你喜欢
                  • 2011-06-07
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-04-11
                  • 1970-01-01
                  • 2011-12-24
                  • 1970-01-01
                  相关资源
                  最近更新 更多