我欺骗了CTO,但拯救了公司(附HN热评)

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

这是几年前的事了。我刚开始我的职业生涯,我爸跟我说,要想做好工作,有时候需要不顾老板的意见去做事。他表达的其实是,可以让你的老板因为你而成功和满意,也可以选择把每一个决策都交给老板决定,但结果往往是大家都不开心也不成功。

当时我在一家财富 500 强公司工作,我们的 CTO 接了个他有私交的重要客户的一重大项目。他还决定把项目中的一个关键部分外包给一家大型技术服务公司,这家公司声称他们的一款产品可以帮我们完成大部分繁重工作。

在我职业生涯中常见的一幕再次上演:供应商所说的「产品」,实际上只是勉强能称之为产品的东西,勉强能满足我们的需要,需要大量定制后才勉强能用。显然,通过对他们的「产品」进行定制,我们巧妙地集供应商软件的缺点与定制软件的所有缺点于一身。我们还无意中创造了最糟糕的主意:一个僵硬的供应商软件,被迫做它本不应做的事,同时还从他们的主产品代码库中分叉出来 - 一旦供应商认识到维护成本过高,这个产品迟早会被淘汰。我们为此互相埋怨,认为这是一个极其糟糕的想法,尤其是考虑到供应商一贯不按时交付的记录。

由于 CTO 的直接下属每年都在变动,每次关于这个项目的会议上,即便没人真的认为是个好主意,大家还是会说「好主意,老板」。

或者说,这根本不是个好主意,而是一个糟糕的主意。

除此之外,我们还得在内部为项目的其他部分进行大量开发,已经够多挑战了。项目在夏天的截止日期再三被推迟,供应商却一再保证他们的交付物马上就好,可以集成进产品里,赶上十月的发布。然而,对于除 CTO 外的所有人来说,项目正愈发明显陷入困境中。到了八月,供应商交付了他们的「产品」,我们开始了艰难的整合进程。

九月,我们遇到了一个关键性错误。供应商的产品将每一笔客户交易都存储为一个 json 记录,并归档于一个庞大的 json 文件中。随着测试数据的不断积累,产品的性能逐渐下降。每多一笔交易,都需要读取整个 json 文档并在其末尾增加一条新的记录。供应商声称他们可以通过给交易字段建立索引来解决这个问题,这个办法起初似乎有用,直到我们遇到了第二个问题。

他们选用的数据库是 MongoDB,当时 MongoDB 对每个文档的大小限制是 16MB。因此,到了十月份,当转换团队开始导入真实客户数据时,我们开始触碰到这个 16MB 的上限,问题变得严重起来。有人做了个决定,对客户隐藏这一限制,并推迟一个月上线,同时秘密启动一个项目来替换供应商的集成,于是他们也被蒙在鼓里。这样,我们同时对客户和我们重视的技术合作伙伴不实。

当时的暴躁老研发(小编注:此暴躁老研发即作者本人)其实还是个充满热情的年轻研发,他迅速组建了团队来开发替代方案。供应商的项目团队有 70 人,而暴躁年轻研发只安排了 3 人进行替代开发:一人负责数据库设计,一人负责开发数据库后端接口,还有一人负责开发业务逻辑和网络服务。

客户被告知在一月份会一个新版本可以进行测试,这个版本将解决他们在最初上线时遇到的一些重大问题。但是,我们没有告诉他们,实际上我们正在彻底重写整个核心系统,而且只用了不到两个月完成。考虑到原项目花了一年多的时间才上线,这次只用三个人,在假日期间完成(可以脑补一下接下来的剧情)。

到了十二月中旬,参与项目的每个人都被强制要求(不是请求)在假日期间加班。

需要指出的是,我们大多数人在过去六个月中已经持续工作了 60-80 小时/周,仅仅是为了赶上原定的上线日期。

每个人都已经精疲力尽了。

如果你正在读这段话,而且你不是一个专注于保证工作交付的人的技术人员,你可能会觉得这太可怕了,是时候考虑辞职了。你是对的。但是,我们这些真正热爱软件开发的人,有时会有种摇滚明星的感觉。可能花了几个月甚至几年时间来准备这个项目,而上线的那一天,就像是最后的汇报演出。你想要按时完成上线。这有点像剧院里的演员:演出必须进行!但同时,当你的辛劳成果首次面对真实用户,感受到那种「这是我做的!」的激动时刻,你也想体验一下摇滚明星的感觉。大家喜欢我的作品,我完成了不可能完成的任务。软件的发布,对于内向者来说,就像是一场现场演出。

file

这时候,圣诞节就要到了。团队在一个月的工作中构建出了替代软件。虽然还有一些功能需要完善,但这些开发者都很聪明,他们一直在完成他们的任务,我相信只要他们不过劳,我们能按时完成测试。

因此,当 CTO 告诉我假期被取消时,我只好答应了。

接下来是我一生中最自豪的时刻之一,我想到了父亲的话 - 关于无视老板。我对我的三名员工说「你们休息一周,这里的事情交给我」。每天早上我都会参加与 CTO 的强制项目进度会议,并对他撒谎。

  • 「团队正在努力工作。今天我们完成了第 73 个 milestone」
  • 「团队昨天取得了不错的进展,我们又完成了一个网络服务」

每一天我都会报告我们正在忙碌,而这些其实都是我们一个月前就已经完成的任务。

一周后,我的团队成员精神饱满地返工了。

一月,我们按期完成了所有任务,顺利上线,短暂地成为了摇滚明星。或许我们更像是 Herman’s Hermits (小编注:赫尔曼的隐士们,英国摇滚乐队) 而不是 The Beatles (小编注:披头士,英国摇滚乐队),仍旧,让人感觉很棒。

file

这就是我欺骗了 CTO,但拯救了公司的故事。

Hacker News 评论精选

翻译本文不是希望推崇公司强制员工加班,剥夺宝贵假期,特意摘录了几条 Hacker News 上此文的评论。

motbus3

file

如果你是那种取消假期以保证工作交付的人,我想根据自己的经验劝你一句:不要这么做。

我懂,尤其是当你因为辛勤工作获得表扬时,停下来似乎很难,但你最终会为此感到后悔。

如果你的工作是在一个依靠你牺牲假期和休假来推销产品的公司,你实际上是在助长我们今天所面对的问题世界。如果很多人都这么做,那么将有更多人需要这么做。如果没有人这样做,并认为这种要求是荒谬的(确实是这样),那么就没有人会被迫这样做,公司就不得不进行真正的成本估算,即使这可能会损害你最喜欢的 CEO 的利益。

roenxi

file

这个故事中的每个部分都显得混乱不堪,包括主人公的行为方式。一个团队领导给员工随意放假并对此撒谎是绝对不允许的,这种行为已经触及了公司可能将其解雇的边缘。事实上,如果这种行为导致他被解雇,我也不会感到意外。虽然上层管理显得非常混乱,他可能侥幸免于被解雇并意外获得表彰;这似乎正是他所处环境的一种体现。

给新任团队领导的一个忠告:这里没有任何值得自豪的地方,更明智的做法是强烈反对团队加班,并坚持要求供应商符合合理的标准,或者重新考虑项目范围,以适应正常的工作周时间表。试图应对这种状况只会无谓地耗尽团队的精力,甚至可能导致团队成员在没有任何好处的情况下失去工作。

除非我真的迫于生计不得不工作,否则作为一个团队领导,有责任保护团队成员的合理工作时间,抵御那些不合理的要求。这是一个值得你坚持到底,即使可能因此被解雇,也绝不撒谎的原则。

joshstrange

file

拯救了谁?

那个交付低劣产品的不良供应商?

那个被一群唯唯诺诺的人围绕、对公司内发生的事毫无所知的 CTO?

那些被压榨到极限的开发者们,虽然给了他们一周假期,又如何呢?

还是那个为了满足一个毫不在乎他们的公司设定的任意截止日期而对所有人撒谎的主角?

这个故事的每一个情节都让我感到不爽。我工作勤奋,偶尔也会为了确保客户发布顺利而加班,但这个故事完全是疯狂的体现。我之所以愿意偶尔加班,是因为我与老板的关系以及我知道我可以随时向他们坦诚。事实上,这是建立无责备文化的核心:只有当每个人都坦诚相对时,我们才能拥有这样的文化。

为了达到一个无知的 CTO 设的截止日期而疯狂撒谎,这简直不可理喻。如果你发现自己处于这样的境地,那么最好赶紧离开,找一个更好的工作环境。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

Autosar开发实战:DaVinci Configurator Pro新建工程保姆级教程(附目录结构解析) 本文详细介绍了使用DaVinci Configurator Pro创建Autosar工程的完整流程,包括环境准备、工程配置、目录结构解析及常见问题排查。通过实战演示和深度解读,帮助开发者快速掌握工具使用技巧,优化工程管理,提升开发效率。特别适合需要理解Autosar开发中DaVinci Config工具链的工程师。 阅读详情

相关推荐

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 470

“我对CTO撒了个谎,用3人开发的功能取代外包70人的成果,成功拯救了交付的Deadline!”...

身为一名资历深厚的程序员,究竟会洞察到哪些职场真谛与生存要诀呢?GrumpyOldDev,是一位开发者给自己和网站取的网名,他是一位在金融服务领域深耕的技术人,早期从他父亲将 Apple II 电脑带回家时起,他就对科技深深着迷。据他所言,若是居住在美国进行信用卡或借记卡交易的人,极有可能与他在幕后所设计和推出的软件产生过交互。在职场中,恰如这位开发者给自己取的网名含义一样,他是个脾气略显暴躁的老...

优快云资讯 1万+

告别抖动与滞后:深入博能传动伺服DSC功能,用105报文提升多轴同步性能

本文深入解析博能传动伺服DSC功能如何通过105报文实现多轴同步性能提升,有效解决工业自动化中的抖动与滞后问题。详细介绍了DSC技术原理、105报文实现机制及多轴同步工程实践,帮助工程师优化伺服系统性能,实现绝对齿轮同步。

weixin_30394981的博客 185

我对CTO撒了个谎,用3人开发的功能取代外包70人的成果,成功拯救了交付的Deadline!

就在近日,他在分享自己职业生涯故事时发布了一篇名为《The One Where I Lie To The CTO》(我对 CTO 撒谎的情况)的文章,在 HN 上引起关注,其中他所阐述的职场生存法则引发了部分开发者的强烈共鸣,不过其做事方式也存在一定争议。即使是最健康的大公司也会做这种事情,我曾在一些公司工作过,我也向几家公司销售过。在我的职业生涯中,当外包供应商公司说他们有一个产品时,他们真正的意思是他们有一个隐约类似于产品的东西,隐约符合我们的需求,通过大量的定制,他们可以把它变成我们需要的东西。

wangchen900705的博客 739

手把手教你用QEMU虚拟化华为路由器固件(附完整网络配置指南)

本文提供了一份详尽的QEMU虚拟化华为路由器固件的实战指南。从固件解包、网络桥接配置到QEMU虚拟机启动,手把手教你搭建完整的嵌入式设备沙箱环境,特别适合安全研究、逆向分析和学习嵌入式系统工作原理。

tgb3456789的博客 943

音频分割:长语音音频 分割为 短语音音频 - python 实现

音频分割:长语音音频 分割为 短语音音频 - python 实现

DATABALL 的博客 1207

“我对CTO撒了个谎,用3人开发的功能取代外包70人的成果,成功拯救了交付的Deadline!”

要知道,在我职业生涯的早期,父亲曾告诉我,做好工作往往意味着不顾老板的反对,做该做的事。然而,因为我们的 CTO 每年都会更换他的直接下属,所以每次他的下属向他汇报有关项目的状态电话都是“老板,这是个好主意”,尽管实际上根本没有人认为这是一个好主意,甚至从心里认为这是一个平庸的想法亦或是个坏主意。而最初的项目启动却花费了一年多的时间。在我的职业生涯中,当外包供应商公司说他们有一个产品时,他们真正的意思是他们有一个隐约类似于产品的东西,隐约符合我们的需求,通过大量的定制,他们可以把它变成我们需要的东西。

IT界那些事儿 112

FFmpeg实战:5分钟搞定m3u8视频下载与ts文件合并(附完整命令)

本文详细介绍了如何使用FFmpeg快速下载m3u8视频并合并ts文件为mp4格式。通过简洁的命令行操作,读者可以轻松完成视频处理任务,包括环境准备、链接获取、下载合并及性能优化等实用技巧,特别适合需要高效处理流媒体内容的用户。

weixin_30836759的博客 221

互联网摸鱼日报(2024-05-21)

天才创始人对谈AI教父Hinton:多模态是AI的未来,医疗将发挥AI最大的潜力小镇青年的春天在哪里?OpenAI宫斗第二季来了,超级对齐团队出局比亚迪卖车险,醉翁之意不在“保费”激光雷达,解决不了低空飞行器的安全隐忧泡面3元买不起?涨价其实有道理氪星晚报 | 谷歌拟投资10亿欧元扩建芬兰数据中心园区;商汤科技与上海电信达成战略合作;康龙化成与阿斯利康中国达成战略合作被拖累的理想Q1,都赖MEGA真卖不动了?iPhone 15系列全面降价,有人欢喜有人愁雷军打call,李斌“掀桌”江苏前首富,又杀回来了智能

weixin_43849685的博客 794

SAP PO开发-端到端配置

1.登录PO系统,选择system landscape,将外围系统的系统信息(Software Component以下简称SC)注册到PO系统中。2.点击products注册外围系统信息。3.选择New 新建 按钮:创建一个新的系统和版本。4.输入产品名称、供应商、版本号等信息。然后点击:Next。5.设置instance 名称,然后点击Next。6.最后设置软件组件的名称,然后点击Finish。

P9QCer的博客 1582

YOLOv8【第十章:多任务扩展深度篇·第16节】车道线检测——基于 YOLOv8-Seg 的车道线分割与拟合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1万+

177.Agent-LangGraph-MCP的构成说明

MCP架构通过MCP主机、客户端与服务器的协同,实现工具、资源与提示词的统一管理。MCP服务器提供Tools、Resources、Prompts能力,MCP客户端则负责发现、调用与读取,使Agent可按需获取上下文。其核心在于将工具从Agent中抽离,封装为可复用的服务,提升灵活性与可维护性,推动AI应用高效协作。

计算机王的博客 297

基于深度学习的水果新鲜程度检测系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

本文详细介绍了如何使用YOLO系列模型(YOLOv5、YOLOv6、YOLOv7、YOLOv8)构建水果新鲜度检测系统。通过数据集准备、模型训练、推理过程以及UI界面的实现,我们能够构建一个实时检测水果新鲜度的系统。通过本博客,您可以全面了解如何应用深度学习技术解决实际问题,尤其是在智能监控和食品质量检测领域。

YOLO 816

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 477

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 437

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 255

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 321

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 180

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

Docker部署linkding:HTTPS与数据备份

部署私人书签库,除了让页面能够打开,还需要考虑几个实际问题:重建容器后数据是否保留、登录和保存是否正常、升级前怎样备份,以及出现 502 或 CSRF 错误时从哪里检查。本文使用 Docker Compose 部署 linkding,采用默认 SQLite 数据库,通过 Caddy 提供 HTTPS,并完成账户创建、数据持久化验证和备份。如果重建后账户或书签消失,应先检查是否换了项目目录、改了挂载路径,或者启动了另一套实例,不要急着重新初始化。遇到权限问题,应根据日志确认具体目录和运行用户,再调整权限。

tedcloud123的博客 180

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 214

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 308

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295

Axum 初步入门学习笔记

)自定义错误实现后,可以直接作为Result的ErrAxum 是一个构建在 Tokio、Tower、Hyper 之上的 Rust Web 框架,核心能力是:Router 路由、Extractor 提取器、Tower 中间件、IntoResponse 响应机制、State 共享状态。那张分层架构图是“地图”不是“说明书”:它帮你建立全局观,但 Service、Repository、数据库、Redis、MQ 都是你自己在 Handler 内部调用的业务/基础设施层,不是 Axum 自带的。

weixin_43219667的博客 198

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 337

SQL Server 数据库双备份:简化配置,兼顾本地留存与异机归档

本文针对中小企业SQLServer数据库备份难题,提出简化配置与本地+异机双副本方案。传统原生备份依赖手动脚本,存在配置复杂、传输易中断、日志分散、静默失败等问题。推荐使用图形化工具实现备份、本地留存与异机同步一体化管理,支持断点续传、加密传输、自动清理与版本控制,降低运维负担。双副本策略提升数据安全性,本地快速恢复,异地防硬件故障。建议定期验证恢复流程,确保备份可用性。

2501_93776716的博客 311
上一篇: Bytebase 2.17.0 - 支持为工单设置标签
下一篇: SB-OSC,最新的 MySQL Schema 在线变更方案
Bytebase
博客等级 码龄5年 1350粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值