一次次猝死事件新闻报导背后,是程序员已成为高危职业的讨论。

一个在数字化转型领域制造了巨大价值的行业,为什么同时也是一个社会问题的制造者?为了找到这个问题的答案,程序员朱家瓦进行了多年的卧底观察,通过频繁跳槽辗转数个进行数字化转型的企业,全身心投入到包括初创公司、家族企业、科技巨头、国内大厂、知名外企等等的技术团队的日常工作中,答案渐渐浮现。

是的,文章明显模仿了《外卖骑手,困在系统里》,这真是一个讽刺,因为我曾经说过:《我,不想做外卖员》,因为做外卖员很危险。而讽刺在于,程序员本就是一个高危职业。

文章不长,我试图通过对程序员朱家瓦同学所经历的不同团队实施的同一个敏捷流程进行简要解读,让更多程序员一起思考一个问题:数字化转型时代,敏捷究竟应该是一个怎样的存在?

变化

又有需求发生变更了,又有两小时的时间搭进了拉通会里。

程序员朱家瓦清晰地记得,十几年前,敏捷开发还不太流行,但也会存在加班的情况,一般是在项目上线前一周。而据统计,到了 2018 年,90% 的软件开发都采用了敏捷,他所呆过的不同技术团队,也无一例外全部采用了敏捷开发,崇尚拥抱变化,持续发布(也就是项目持续上线),于是加班变得频繁了。从前,项目发布的间隔期以月计甚至以年为单位,但从采用敏捷流程开始,就变成以周、甚至天为单位。

由于敏捷崇尚拥抱变化,因此开发团队不能再对需求变更持抵制态度。而且敏捷强调承诺精神,迭代开始承诺要做完的故事卡,就一定要做完。由于迭代期间产生的变化因素,以及敏捷所鼓励的频繁沟通,导致程序员往往一直在开会、讨论,只有在下班后才有时间写代码。

一个迭代中,一个程序员并不只一次地临时要被拉进变更拉通会里。

敏捷流程有能力有动力接连不断地吞掉写代码的时间,对于某些人来说,这是值得称颂的进步,是响应市场变化的体现 —— 鼓励在开发的任何阶段产生变化,敏捷流程减少了成本、降低了风险。Kent Beck 等人在敏捷宣言里表示:响应变化高于遵循计划。他们说,这是更好的软件开发方法。

而对于实践软件开发方法论进步的程序员而言,这却可能是疯狂且要命的。

在敏捷流程里,故事点是最重要的指标,而延期是不被允许的,一旦发生,便意味着回顾、业务部门的不尊重,甚至被淘汰。有程序员抱怨自己和外卖员很像,虽然知道交通规则,但是不得不被逼着去违反。自己在写代码时,做得最多的就是放弃最佳实践,不断妥协。

程序员们很难去对抗最终被分配的故事点,估点时如果出了比较大的数字,就需要解释。一旦解释,就会有人来“帮”你,最终大家就妥协了一个较小的数字。一位程序员告诉朱家瓦,他呆过好几个团队,不同的团队有不同的估点方法,点数也有不同的含义。但是最多的都是一点代表一天。虽然一个故事点的需求卡不算很复杂,但是完成的定义(Definition of Done)内涵特别丰富。因此要在一天完成的前提是没有打扰,屁股不能从工位上挪开一次。

不写测试、重复代码、完全没有文档(项目的 README 都没有)、代码复审流于形式……在优秀程序员朱家瓦同学看来,这些举动无异于反模式,但却是程序员们长期在敏捷流程的控制与规训之下做出的不得已的代码实践,而这种反模式的直接后果就是 —— 程序员陷入软件焦油坑的概率急剧上升,从而造成更多加班的恶性循环。

DevOps

image.png
软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。敏捷开发的拥抱变化使得强调稳定的运维人员不得不走出舒适区。DevOps 理念很棒,但是现实很骨感。脆弱难用的工具链,让程序员不得不深入了解运维细节,使得程序员的日子雪上加霜。

测试左移

测试左移,号称给程序员赋能,就是说测试同学给程序员赋与一种似乎他们本来不会的能力,让他们有能力去完成测试。比如降低测试门槛、使用测试工具(自动化)、培养测试意识。然而现实就是一种去掉专门的测试人员的实践。朱家瓦同学呆过的团队中,测试人员总是不足,甚至有的团队完全没有测试人员,全部由程序员自己保证质量,美名其曰:敏捷测试之道。

有限游戏

作为现实中的敏捷体验者,朱家瓦同学很想对所有的业务方提出一个建议:可以让所有的业务方和 Scrum Master 们都去当一个月程序员,这样,他们才会知道敏捷流程对程序员的压迫有多么严重。
image.png
敏捷中的程序员们,其实和外卖骑手一样,都急着把东西在 Deadline 前成功 Deliver 出去,猛踩油门,闯红灯,抄近道,但是干扰项很多,天气、拥挤的人流……

敏捷中的程序员们就像疯狂的司机,一直在危险驾驶、疲劳驾驶。这显然不可持续,只是一个有限游戏,出事儿是必然的,下场是悲惨的。

造成这种结果的原因,朱家瓦同学很困惑,要么是敏捷方法本身不对,要么大家对敏捷的理解不到位。

但是,朱家瓦同学只想告诫各位程序员:就算周围的司机们开车多么野,作为看到此文并且读到最后的你,希望你安全驾驶,做个专业的程序员,敢于说不,谨慎承诺。就算你在伪敏捷团队中生存不下去,但是你能避免猝死。只要你能避免猝死,活得长久,就有可能将程序员的职业从青春饭变成无限游戏。