开发服务器有什么用 “我骗了CTO,用3个人开发的功能替代了70个人的工作,成功挽救了交付期限!”

作为一名经验丰富的程序员,你可以洞悉哪些职场真相和生存秘诀?

GrumpyOldDev 是这位开发者的自称,也是他网站的所有者。他是一名技术专家,曾在金融服务行业工作,自从他父亲买了一台 Apple II 电脑回家后,他就对技术着迷了。据他说,如果你住在美国,并且进行过信用卡或借记卡交易,那么你很可能与他设计并幕后发布的软件有过互动。

在职场上,正如这位开发者的网名所暗示的那样,他是一位脾气略微暴躁的老开发者。就在最近,他在分享自己的职场故事时发表了一篇题为《我骗过 CTO 的那次》的文章,在 HN 上引起了关注。他所阐述的职场生存法则引起了一些开发者的强烈共鸣,但他的处事方式也引发了争议。

接下来我们来看看他在开发工作中,向上如何与CTO打交道,向外如何与客户打交道,向内如何与外包公司打交道。

原来的:

苏米编译

出品 | CSDN(ID:CSDNnews)

以下为译文:

这是几年前的事了。在我职业生涯的早期,我父亲告诉我,做好工作往往意味着做正确的事情,不管老板反对与否。他的意思是,你要么让你的老板成功和快乐,要么执行老板做出的每一个决定,在这种情况下,没有人会成功或快乐。

当时我在一家财富 500 强公司工作,我们的 CTO 与一位与他有私人关系的重要客户签订了一个大项目。他还决定将项目的一个关键部分外包给一家大型技术服务公司,该公司声称他们有一款产品可以为我们完成大部分繁重的工作。

不可靠的外包

在我的整个职业生涯中,当外包供应商公司说他们有一种产品时,他们真正的意思是,他们有一种模糊的产品,模糊地符合我们的需求,并且通过大量定制,他们可以把它变成我们需要的东西。

当然,通过定制他们的“产品”,我们巧妙地将供应商软件的所有缺点与定制软件的所有缺点结合在一起。我们同时实现了“坏主意”的“圣杯”:一个不灵活的供应商软件包,被迫做它本来不应该做的事情,并且从他们的主要产品代码库中分叉出来——一旦供应商意识到维护它的成本有多高,它最终就会被淘汰。

作为开发人员,我们内部互相抱怨这是一个多么糟糕的想法,特别是考虑到过去外包开发公司经常不能按时交付产品。

但是,因为我们的CTO每年都会更换下属开发服务器有什么用,所以每次下属打电话给他汇报项目进展情况时,总是说“老板,这是一个好主意”,尽管事实上根本没人认为这是一个好主意,甚至认为这是一个平庸的主意或者一个坏主意。

错误的开始

项目的其余部分需要大量的内部开发,因此我们有自己的繁忙工作和挑战需要应对,但即便如此,随着项目在夏季被推迟,外包供应商承诺他们的产品将在10月发布日期之前准备好进行集成,除了首席技术官之外的每个人都越来越清楚地意识到这个项目遇到了麻烦。

最终在八月,外包供应商交付了他们的“产品”,我们开始了与之“整合”的死亡之旅。

9 月份,我们遇到了一个令人窒息的错误:

外包供应商的产品将每个客户交易作为 json 记录存储在一个巨大的 json 文档中。

因此随着测试数据的积累,产品的性能会越来越慢,其原理大致是这样的:添加一个新的事务需要从数据库读取整个JSON文档,然后将新的记录添加到文档末尾。

外包供应商声称他们可以通过索引交易字段来解决这个问题,这似乎有点帮助,直到我们遇到第二个问题。

他们选择的数据库是MongoDB,当时Mongo的记录限制仅为每个文档16MB。

因此,10 月份,当转换团队开始将真实客户数据放入其中时,我们开始遇到 16MB 的限制,事情发生了非常有趣的变化。

隐瞒与真相

我们决定向客户隐瞒这一限制,并将发布时间推迟了一个月,但同时启动了一个 Skunkworks 项目(秘密研发项目),以替换外包供应商开发的功能,而没有告诉供应商。因此,我们欺骗了我们的客户和重要的技术合作伙伴。

当时,GrumpyOldDev 组建了自己的团队来开发替代品。供应商大约有 70 人参与该项目。GrumpyOldDev 指派了 3 个人来开发功能替代品:

客户被告知我们将在一月份发布一个新版本供他们测试,该版本将修复他们在首次上线时接受的最关键的缺陷,但他们不知道我们正在重写整个核心系统。

此时,距离新商定的交货日期只剩不到两个月的时间了。最初项目启动花了一年多的时间。我们只有三个人,而供应商有 70 个人。更重要的是,这三个人只用了他们的休假时间。

因此,大约在 12 月中旬,参与该项目的每个人都被告知(但不是被要求)在假期期间工作。

请记住,为了赶上原定的发布日期,我们大多数人在过去 6 个月里每周工作 60-80 小时。每个人都筋疲力尽。

此时,如果您是一名开发人员,而不是交付导向的技术人员,您可能会认为这很疯狂,是时候辞职了。

也许你是对的。

但是,很多真正喜欢软件开发的人都觉得自己有点像摇滚明星。你花了几个月甚至几年的时间为这场演出做准备,然后你的发布日期就变成了一场真正的演出,每个人都想在发布日期中大奖。

这在某种程度上就像身处剧院:演出必须继续。但当你所有的辛勤工作第一次接触到真正的用户时,你也希望感觉自己像个摇滚明星,你会有一种“我做到了”的冲动。

当时的用户很喜欢我做的事情。我战胜了不可能。对于内向的人来说,软件发布就像现场表演。

就这样,快到圣诞节了。团队在一个月内基本完成了软件的替换。不过,仍有一些功能需要改进。

但是这些开发人员很聪明,他们一直在正轨上,我知道只要他们不精疲力竭,我们就能按时完成测试。

所以,当 CTO 来找我,说让我取消即将到来的假期,并加班时,我说“好的”……

然后,在我一生中最自豪的时刻之一,我想起了父亲的建议:无论老板说什么,都要完成工作……

我告诉我的三个家伙,“这周你们休息吧,我会处理好这件事的。”

我每天早上都会给CTO打电话汇报项目进展情况,我还撒谎说:

每天,我都会出现在我的老板面前,告诉他我们正在努力完成上个月实际完成的事情。

一周后,我的三个朋友精神焕发地回来了。

我们在一月份如期完成了任务,上线之后取得了很好的效果,一度成为了“摇滚明星”,感觉很好。

那是我对我的 CTO 撒谎的时候。

见解和观点?

面对GrumpyOldDev的遭遇,很多人将原因归咎于“公司不健康的工作氛围”,很多开发人员也有同样的感受。

网友knodi123:

这听起来是不是有点疯狂?其实,我在第二份工作中也遇到过同样的事情。

整个客户和产品数据库都存储在一个面向公众的 .js 平面文件中,应用程序必须先加载该文件才能执行任何操作(这是 2000 年代初期的互联网)。更糟糕的是,该应用程序是一个单一的单片文件,位于名为 index.1.js、index.final.js、index.newest.js、index.45.js 等的目录中。

我拥有足够的最佳实践经验,可以去找我们的首席执行官并解雇我们的首席技术官,然后用 git、mysql 和具有实际架构的服务器端逻辑重写它。然后,它运行的 Windows 服务器被攻破并变成了色情服务器,尽管我从未见过该服务器,甚至没有管理员权限,但不知何故这是我的责任。

伙计,我的前几份工作真是让我受教了!

@karmajunkie:

我曾在一家使用 ElasticSearch 实现此目的的公司(我不点名)工作过一段时间。每个客户基本上都有一个自定义的数据输入表单,表单上的每个字段都成为 ES 中的字段,即使系统中的所有其他表单都具有相同的字段名称和类型。最终,他们不得不与另一家公司签约,在自定义集群上运行自定义 ES 构建,因为他们超出了 ES 中默认的 10k 字段限制。

当我发现他们对解决这个问题毫无兴趣时,我辞职了,并很快找到了一份具有良好建筑原则的新工作。

网友Flarg:

即使是最健康的大公司也会做这种事情,我曾在一些公司工作过,也向几家公司出售过产品。低代码解决方案需要一大批承包商来交付业务功能,延迟的项目放弃了关键集成以按时交付,但在功能上毫无用处,而首席技术官的下一份工作取决于将工作交给外包供应商。最糟糕的是,这些组织坚持购买而不是构建,但其软件团队却比外包供应商更大。

Motbus3:

如果您是“交付驱动”的人,并且您取消假期继续工作开发服务器有什么用,我会根据自己的经验告诉您:不要傻了。

我知道这很难,尤其是当你的努力得到认可时,但你会后悔每一分钟。

如果你所在的公司依赖你的假期和休息时间来销售产品,那么你就是在帮助创造一个充满问题的世界。如果很多人都这样做,那么就需要做更多的事情。如果没有人这样做,而且表现得好像要求这样做很荒谬(事实确实如此),那么就没有人会被迫这样做,公司就会被迫给出真实的估计,即使这会损害你最喜欢的首席执行官的钱包。

你有过这样的经历吗?开发过程中遇到过哪些意想不到的陷阱?欢迎留言分享你的看法。

© 版权声明
THE END
喜欢就支持一下吧
点赞258赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容