当年通宵开发让产品上线——你的英雄主义在最佳实践面前只能是呵呵了

2017年我在新加坡做开发的时候,至少有两个月的时间我们都工作到凌晨12点,公司给我们租的公寓距离工作的地方只有300米,所以每天除了满足吃饭睡觉等基本需求剩下的基本就是工作了。

当时的项目是给一个大客户做一个医疗的项目,前期通过激烈的竞标从几个大公司手中抢到了这个项目,而付出的代价就是,承诺的太多。承诺的太多让自己获得了机会,也为后期的交付带来了很大的困难,每次交付都好像难产一样。

我们当时名义上用的是敏捷开发,可是执行起来就变成了“客户驱动开发”,因为前期承诺的太多,而合同截止日期也写的明明白白,所以和客户谈具体的交付计划时,只能拼命往每个sprint里塞开发任务,到了该交付的时候,大家拼命熬夜赶工,很多时候都是在最后时刻在完成开发上线,根本没时间做足够的测试,因为第二天上午客户就来现场做这一阶段的验收测试了。我还清晰地记得当时开发到凌晨4点我困得手拄着下巴睡着的情形。

而客户来测试的过程也是心惊肉跳,因为没有经过测试的app是经不住验证的,不知道在哪里就crash了,最佳实践中提到的“现场客户”,如果是和客户讨论需求还好,而如果客户来向你抱怨,你肯定不会非常好受。

当时每天想的最多的事情就是如何在快速开发的前提下交付一个可靠的软件,甚至直到现在我也在一直思考我们当时哪里可以做的更好。有些事情我们是无法改变的,比如合同中承诺的功能和交付日期,有些事情是我们可以改变的,比如如何将行业中的最佳实践引入团队,而这也是我要重点阐述的部分。

其实我们当时也已经引入了一些行业的最佳实践,比如使用敏捷开发,持续集成,可引入不代表就做的好,现在想想如果当时我们做的更好,一定会让工作和生活轻松许多。

DoD

DoD是Definition of Done的缩写,意思是验收标准,只有客户,产品经理和开发对于验收标准有一致的认识,才能保证交付的软件是大家期望的。

我们当时的产品需求是由一个表格来管理的,每次都由产品经理从密密麻麻的数百个产品需求中把写一个sprint要开发的需求摘出来,然后加上简单的描述和设计图就交给程序员开发了。

当时没有DoD,程序员承担了一部分产品经理的角色,缺失的部分是程序员来脑补的,因为当时人手不足,从美国团队过来旅游的一个同事被我们“扣留”在了新加坡,兼产品经理和项目经理的角色,又要和客户沟通,又要管理产品和项目进度,难度可想而知。

如果有DoD的话,程序员开发完成就可以照着验收标准测试一遍,相信crash的几率会大大降低。

Code Review

Code Review是指团队成员间互相审核提交的代码,这个过程既可以找到潜在的问题,又是一个互相学习的过程。

我在开发的过程中就遇到过好几次等我提交我的代码后,过了一段时间我发现这个类似的功能组件已经有人实现过了,如果我们经常做Code Review的话,估计就不会出现这样的问题了。

还有时候我接手别人的代码的时候,发现有些代码的逻辑和写法明显有问题,当时如果做Code Review也不会出现这样低级的错误了。

单元测试

单元测试对于当时的我们来说是一件重要而不紧急的事情,至于说多重要,大家也不清楚,因为没有一个量化的指标来说明单元测试到底会对项目有多大的帮助。甚至我认为我们对单元测试的认识有一个误区,认为它是功能之外的“额外”的工作。如果有这样的认识,那基本大家都会把精力和时间放到开发功能上,毕竟现有的需求还开发不完,那有时间做“额外”的事情呢。

结果这个重要不紧急的事情最终变成了重要并且紧急的事情,客户一测试app就crash,你说这事儿紧不紧急,重不重要?

如果我们当时做了单元测试这个重要而不紧急的事情,虽然可能导致项目延期,可至少可以保证产品的稳定性,后来也不会一天十几个小时为了重要而紧急的事情疲于奔命了。

正确的重构

仓促时间写出来的代码质量不会高到哪里去,后来因为bug太多或者需求要求,不得不对代码进行重构,有的重构涉及到几十上百个文件,几千行代码的修改,有时候我们会欣欣欢喜又搞定了一个恼人的大问题,有时候会因为重构又带来了新的问题而让人苦恼,导致下次犹豫要不要重构那坨烂代码。

重构还是需要做的,代码的重构是要一直进行的,只不过要先做好两个事情,一个是单元测试,另外一个是将任务拆的尽量小。

单元测试在这里的重要性再次体现了出来,在进行大规模重构的时候,是不可能保证不犯错的,如果有单元测试就可以保证有错误及时发现,这样就可以放心的进行重构了。

另外一点,如果将重构任务拆的足够小,就可以避免两个困境,一是重构一旦开始就无法停止,二是重构无法开始——因为重构的任务太大而让人望而却步,宁可有潜在的问题也不想犯大错误。

总结

软件工程是一个复杂的工程,对于这个世界来讲软件开发也是很新的一个东西,经过这么多年的积累已经有了很多的最佳实践,很多是反直觉的,如果依靠自己的聪明可能可以摸索出一些道道来,可最后你会发现你得出的结论往往行业中早就有了成形的解决方案和最佳实践。

我们要追求稳定的软件和产出,放弃那些虚伪的英雄主义吧,抬起头,看看代码以外的世界,最佳实践早已在前方等待久已。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339