什么功能应该始终是第三方?

时间:2008-10-20 21:07:24

标签: estimation

提问我的问题是来自Dare Obasanjo的this post from Jeff Atwoodthis post。在我看来,可能至少有一些领域的第三方功能比自定义代码更好。

例如,日志记录应该始终是第三方吗?加密怎么样?还是搜索?

我期待着大家对此的反馈。

编辑:此问题假定日志记录,加密和/或搜索不是您的核心业务。

15 个答案:

答案 0 :(得分:15)

加密应该是大多数时候的第三方,...除非你从事销售加密系统的业务。

Atwood先生他的观点几乎就是我所理解的,你的核心业务不应该是第三方,因此可能总是成为第三方......

答案 1 :(得分:4)

我的经验法则是使用(或至少考虑)第三方来处理超出业务核心目的的任何事情。

加密一直是这方面的典型例子。但它也扩展到其他领域。

在开发期间编写用于故障排除的日志记录代码与编写用于监视生产系统的日志记录代码完全不同。

所有关于选择哪些开发领域实际上为您的项目增加价值。使用第三方内容可以消除该组件不完整/错误/等的风险。但是它有可能不像你需要的那样灵活。

另一个例子是为网站开发一个完整的网络论坛,当你可以以更便宜的价格购买解决方案时。

答案 2 :(得分:4)

“哪些功能应该始终是第三方?”

无。在讨论基本的工程决策时,总有一个例外或特殊情况可以推翻对“永远”的严重使用。

此外,决定第三方的决定几乎不应该基于给定的“功能”。没有这样一个完美的库,你永远不需要去其他地方寻找那种类型的功能。

进入第三方是一个应该基于

做出的决定
  • 第三方成本与内部成本相比
  • 在截止日期前所需的开发时间(即,内部可能更便宜,但您的开发时间表可能不允许这样做)
  • 易于集成,调试,维护,升级路径 - 可能你可以开发一些能够“完成工作,但几乎没有”内部的东西,而不是更多的钱可以用来照顾你未来几年的事情
  • 测试和证明的缓解/成本 - 安全包非常难以测试很好

然而。有些事情很难相信内部更好。例如,你可以将竞争对手写入OpenGL和DirectX,在某些应用程序(科学计算等)中,有充分的理由考虑这样的路径。但总的来说,你不会梦想它。即使它是“免费的”,它仍然是第三方依赖,并且你可能因为一个仅影响你如何使用这些图形语言的错误而最终出现滑行。

换句话说,存在一些极其复杂或难以证明/测试的东西,这些东西几乎总是会出现在第三方。安全是另一个问题。不要编写自己的哈希算法,除非你是1)认证疯狂且2)至少有3个出色的商业理由。

但“什么功能应该始终是第三方?”没有。总有例外。

- 亚当

答案 3 :(得分:3)

我完全同意只有专家才能进行加密。它也应该是开源的,并经过了大量的同行评审。

答案 4 :(得分:3)

这取决于。是否有适合您需求的第三方库,最重要的是,您使用的语言和/或API。然后去吧。

如果你有理由做自己的版本,请确保它不仅仅是“不是在这里发明的”。此外,如果您还没有深入了解市场上五大领先产品,无论您需要什么,您都没有彻底完成您的工作。很有可能你会找到你想要的东西,即使你不能使用它,你仍然可以从图书馆的描述中学到一些东西。至少您将了解您需要哪些功能以及哪些功能不需要。如果您还获得了其中一个库的源代码,那么这应该是您在竞争库中的首选,它没有源代码,但可能有更多功能。

答案 5 :(得分:2)

我一直使用第三方控件的区域是图表。必须绘制一些数据并且第三方控件成熟且值得信赖是一个相当普遍的问题。

答案 6 :(得分:2)

我想答案取决于用法。如果您正在开发以获取利润,那么如果使用组件的成本与开发它的成本导致更多的利润,您可能会购买组件。当您没有内部专业知识来生产大型组件时,尤其如此。

我使用的几个很好的例子是Infragistics控件和Dundas图表。虽然我们可以在内部创建这些,但与购买一些许可证相比,时间和机会损失的成本将是巨大的。

当然,有时我们会做这种事情,甚至不把它当作零件购买。稍微扩展想象力,您可以包括.NET框架,SQL Server,Windows API等。

答案 7 :(得分:2)

如果您可以购买它比制造它便宜,并且购买的功能符合您的业务要求,那么购买它。

答案 8 :(得分:1)

这个问题没有明确的答案,因为就像软件开发中的任何其他东西一样,它取决于具体情况。我会说,如果以下3项是真的,你不应该考虑自己做这件事......

  1. 如果它不是您的业务或专业知识的核心。
  2. 如果其他人为您编写了该文件,并且它正在广泛使用的社区中使用。
  3. 如果它符合您的需求或要求,或者可以相当容易地扩展以满足您的要求。

答案 9 :(得分:1)

这个问题与问题相反:你应该创建什么软件?

这显然是愚蠢的。

对于这两者都没有答案,这取决于您的业务需求。您是否需要为整个互联网构建更好的搜索引擎?几乎肯定不是。但如果你是90年代后期的谷歌,那么你就是。第三方与第一方只是你工作的办公室,每个第三方都是自己的第一方。

  • 如果您需要的只是足够好:使用现成的东西。

你要么创造一些质量较低的东西,要么浪费金钱和精力去做那些无关紧要的事情,或两者兼而有之。

  • 如果它是您业务的基础:自己构建。

如果你能够更好地建立一些东西,并且你可以用更好的东西建立一个企业,那就去做吧!

答案 10 :(得分:0)

不要忘记,时间是用手写所有东西的一个大问题,并不是你不能这样做,而是问题来自你的客户或公司他们总是希望找到最快的方式来建立他们的系统。但是如果你有一个非盈利项目,你可以尝试自己建造东西。例如,如果您正在编写Web应用程序并且想要设置一些ajax功能,那么可以使用JQuery或Dojo作为ajax工具包,需要时间来构建这些东西:)

但是在使用第三方库时也必须小心,你必须信任它们,因为它们可能包含恶意代码,或者它们写得非常糟糕并且会让你头疼。

答案 11 :(得分:0)

您自己的加密功能?甚至不考虑它,但我认为你可能意味着现有功能的某种包装。

第三方组件优势: 很多功能
经过全面测试(希望!)
没有时间开发,所以可以更便宜(但..)

缺点
是否真的足够灵活,以满足下一个客户的要求 分配可能很昂贵 让你进入第三方公司,当他们发布新的版本修复bug时可能会很痛苦 你不学会自己做这个任务

您是否使用第三方组件将取决于您的应用程序和要求。像图表这样的东西需要花费很长时间才能正确使用,因此这将是一个很好的第三方组件。

答案 12 :(得分:0)

任何超出核心业务的东西都是第三方解决方案的理想选择。您希望花费您的开发时间来创建独特(ish)的核心功能,并且无法以经济高效的方式购买和使用。

例如,让我们看一下web gridview控件。您可以自己开发和扩展gridview吗?当然你可以,但是开发,编码和测试你的网格视图将花费大量的时间和资源,你可以将其转化为美元。现在,您需要考虑支持,维护和错误修复的重复成本。

现在让我们使用我记得的任意数量来阅读美国普通开发商每小时40美元,包括他们的好处。整个网络控制套件可用于每个开发人员许可证大约800美元。如果您的开发人员在这一个控件上花费的时间超过25小时,那么您可以购买整个套件并花费5个小时进行集成和测试。

现在希望我没有太混乱,但一般的要点是,如果你可以从自己购买它可能会节省时间和金钱,而是专注于你无法摆脱自我的东西通常是你的赚钱者。

答案 13 :(得分:0)

我会说写锅炉板代码,或者冗余代码几乎每次都应该通过库来复制和粘贴。对我来说,验证码几乎总是让我犯了愚蠢的错误,因为它很无聊。 Spring.NET对此非常了不起。我很高兴老板鼓励我去尝试。

答案 14 :(得分:0)

似乎你有你需要的所有答案,但我想在这里和其他人一起发表意见。客户付钱给你制作专门为他们工作的应用程序,这通常是他们找你的原因;他们需要的东西在市场上的任何其他产品中都找不到。因此,您的重点应该是开发他们需要的特定部分。

毫无疑问,您的应用程序也需要做其他事情。也许它需要连接到数据库,或加密某些行。这是第三方图书馆发挥作用的地方。你不想浪费时间为数据库编写新的驱动程序,或者新的加密方案可能有漏洞,你没有时间进行测试。你想使用那些已经存在的,并且已经过广泛测试和优化。

记住,你完成得越快,他们就越少付钱。这让他们很开心,想回到你身边。这也意味着你赚得更多,因为即使他们支付的费用更少,你也可以开展更多的项目,这意味着更多的钱。

总之,您应该依赖各种模块中的第三方库。