购买不要建造

2020-12-13 02:20:47

站起来管理服务或构建定制服务是工程师的普遍愿望。通常这是一个重大错误,最终会花费大量时间和金钱。构建所有内容的自定义版本的愿望似乎来自几个地方。希望建造比购买便宜2。他们的公司流程特殊的想法使行业标准的东西行不通3。他们需要完全控制服务的功能4。避免供应商锁定

所有这四件事都不如您想像的那么真实和重要。当某些事物对您的业务至关重要或提供明显的竞争优势时,就值得进行构建。否则,可能值得使用您的云提供商提供的服务或其他服务。运行自己的东西会给您带来巨大的运营负担和巨大的机会成本,如果您只能从中受益,那就顺其自然。每天凌晨两点,人们都在谈论关于建筑的东西,这是关于Rube Goldberg配置的用于处理客户分析的系统的事情。

保持系统正常生产需要时间和精力。建造东西并不是花大钱的地方。取而代之的是运行和维护复杂的系统。大多数企业系统都需要工程团队来保持运行。聘用工程师并不便宜,而且引入了额外的复杂性以保持大量团队的协调。所有这些都会导致决策变慢。

由于需要更多的团队来维护更多的服务,所以决策速度变慢。然后,这些团队需要共同努力和协调。突然进行更改,需要通知一百万支团队,并且必须管理交接。由于现在有更多的团队和更复杂的组织结构,这导致管理者陷入困境,并导致更多的政治。

如果您遵循的是DevOps模型,则构建服务的团队也将最终对其进行维护。团队需要维护的动作越多,他们用于新功能开发的时间就越少。这在产品快速发展的年轻公司中尤其令人痛苦。减慢寻找适合市场的产品以换取自己经营自己的东西所需的时间,这是一个糟糕的交易。

您还必须考虑组织中存在的卓越运营水平。坦白地说,您对亚马逊或您的正常运行时间更信任谁。您绝对依赖生存的服务的答案可能就是您。不过,其他系统可能会花费更少的时间和精力,因为很难证明保持它们正常运行所付出的代价。

此时,您可能正在考虑,但我不想被供应商的特殊系统所困扰。我的反对观点是内部系统也存在锁定问题。最常见的版本是电子表格的保存者。现在,如果您要使用哪种电子表格,那么这是一个公平的问题,但这是一些重要的内部流程所用的,已经转化为该人的工作。大多数大公司至少有一个这样的电子表格。如果您在一家大公司工作,您可能会意识到这是轻描淡写。

电子表格的维护者将捍卫自己的流程,并且不惜一切代价对其进行更改,因为他们担心,如果流程自动化或消失,就会被解雇。您还会在工程团队中看到这一点,他们成为数据库或票务系统的管理者。突然之间,您的系统变得糟透了,没有人希望倡导摆脱它,因为他们的同事坚信一旦发生,他们会丢掉工作。当他们尝试并修复该过程时,这也会给弱者造成政治陷阱。

作为票务系统的管理员,通常也不会那么有趣。这是沉迷于无聊工作的好方法。这也意味着您最终得到的系统对企业来说不是最重要的事情,而不是允许外部公司采用它。该外部公司很可能专门解决该问题,并因此而建立了更深的专业知识。当然,除非您有些邪恶,并且正在寻找可怕的项目来流放人们。

所有这些使锁定在供应商中的问题比大多数人想象的要少。无论您做什么,都可以锁定。您要避免的事情是为任何供应商提供批发定价权。通过确保您的企业的关键差异因素在内部,可以避免这种情况。

聘请软件和系统工程师并不便宜。作为一个整体,我们也倾向于低估我们的时间。想想您经常听到的声音:哦,我可以在一周内完成,否则会很容易。运气好的话,这只是对Reddit或黑客新闻的评论,如果它在起作用的话,通常会变成一个总的口号。

通常以总拥有成本(TCO)表示拥有或维护服务的成本。由于很难跟踪TCO中的许多内容,因此通常很难计算出来。您会遇到的主要问题是,这不仅是工程师的成本。我们关心的指标是工程师可能生产的其他产品的机会成本。

构建自定义内容的另一个原因是独特的公司流程。通常,您会想到无法自定义软件以使其正常运行,或者它的成本不只是构建软件。尽管这些可能是建立它的正当理由,但确实比您想象的要少。许多流程在众多企业之间共享。而且,随着时间的流逝,流程会变得肿。与业务流程相匹配所需的大量自定义工作是无法完成的工作。举一个荒唐的例子,那件事发生在我与之合作的一家公司1。我们的文章推荐过程很复杂,需要大量的模糊数据连接2。我们可以建立自己的数据库系统来专门处理此问题。3。经过几个月的紧张发展4。事实证明,操作该产品非常困难,为什么有些查询会使系统崩溃,为什么我们的客户抱怨建议。

您真的不希望那样做。为甚至无法正常工作的产品构建和维护产品会令人沮丧。当事情变得如此复杂以至于现有的工具都无法使用时,您应该问所有的复杂性是否对领域至关重要,或者您使用的模型是否存在缺陷。

运行自己的服务版本会带来一个重要问题,那就是工程师必须注意的另一件事。重要的事物有一个限制。您正在运行的所有非核心服务所发生的情况通常是某种形式的忽视,使它们保持在勉强足够好的状态。

这样做的问题是,从事这些服务的每个人通常都试图摆脱这些服务。毕竟,没有人愿意去做老板不关心的事情。因此,由于人们试图更换会增加阻力的团队,您最终需要进行大量的操作。

使这个问题更加复杂的是,经常不会忽略不产生收入的事物。是的,您的CI / CD系统绝对至关重要,但高管们很容易想到。这将导致故障模式,在这种模式下您将失去大量内部工具。而如果您付钱给某人做同一件事,那是他们的事,所以他们会继续努力。

在许多方面,构建服务的最大问题是机会成本。原因不是薪水,而是可以做的其他事情。与公司在建立一次性功能以完成销售时看到的基本上相同的问题。最大的不同是工程是自己做的,因此故意对所造成的损害视而不见。

工程师喜欢建造东西,对于许多人来说,他们喜欢控制所有的按钮和旋钮。很多时候,这是一件好事。毕竟,这是超级酷的东西的真正构建方式。当这种冲动存在而对决策的商业影响没有敏锐的认识时,就会出现问题。

您应该问的问题是,除了调整自己的资料或构建新的内部系统之外,还有什么可以做的。答案通常是花更多的时间来提出正确的架构,而不是扑朔迷离或开发实际的面向客户的功能。

具有较大的运营占用空间通常会导致速度降低,每个工程师发生的更改更少。考虑一下大公司和初创公司之间的速度差异。这不是因为初创公司会聘请更聪明的人,而是与大公司的任何变更相关的大量工作。

这是工程学不能仅仅考虑正在构建的软件的领域。相反,您必须考虑整个产品的健康状况。这是关于构建对客户有用的东西,并放开无关紧要的东西。通过密切关注核心项目,可以更快地构建事物。与产品一起进行的拆卸和维护工作也更少。

这些原因均不适用于您的情况。有很多很好的理由来建立。但是,如果您还没有考虑过是否可以购买一些东西来解决问题,而不是自己解决问题,那么应该这样做。

考虑一下是否值得在凌晨2点进行分页。如果您愿意翻页,请考虑是否有人可以比您更好地维护它。您比我更了解您的业务状况和产品详细信息。但是,这是您应该提出的一个问题,而不仅仅是挥霍无度。

除非建筑物能为企业提供真正的可持续优势,否则应优先购买建筑物。减少长期的操作负担是保持开发人员的速度和幸福感的最简单方法之一。