Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

11.5. 敏捷开发为什么会以失败告终?

盘点一下职业生涯几次做软件质量失败的经历,供大家参考,吸取经验和教训。

11.5.1. 首先,思考为什么最近15年软件质量体系没有新概念出来?

瀑布模型 2000年之前就存在,西方从 70年带开始摸索软件开发模型,80/90年代逐渐成熟,当时有一本书叫《软件工程》。2003年国内出现XP极限编程,2005年敏捷横行。印度阿三在 2000年就搞出了 CMMI 我们是在2005年通过CMMI5,如今我已经全部忘记。

最近15年为什么没有出现新的概念?

西方为什么不再主导制定软件质量管理体系?

11.5.2. 然后,我们再来盘点一下最近几年西方软件领域主导者都在做什么?

你会发现他们的关注点从 SQA 转向了 OKR,最近几年最火的概念是 OKR,几乎硅谷企业齐刷刷的上 OKR。Google 今年5月又从 OKR 转向更先进的 GRAD,谷歌启用新系统GRAD(Googler Reviews and Development)这件事情,又在硅谷掀起风浪,一大波硅谷企业会参考谷歌的 GRAD 制定出适合自身企业的各种 RAD。

为什么会这样?抓软件质量不如抓绩效出产的价值高。下面我会分析出现这种现象的原因。

11.5.3. 失败原因

从很多同事那里得到数据,很多企业或团队实施敏捷都有失败的经历,为什么会失败?失败原因总结如下:

水土不服

多年职业生涯,ISO,GB国标,XP,敏捷,CMMI5 我全部参与或主导过,不能说全失败,不经过裁剪的实施几乎都会面临水土不服。最终流于形式,填表格走流程。

很多流程的设计采用的加法思维,认为只要考虑到每个节点,并作出响应,就能解决所有问题,这使得流程变长,没有提升效率,反而增加了管理内耗。

年轻的团队

很多时候,只要让团队整体工作经验增加1年,软件质量会带来质的改变。

工作中发现大量BUG是因为开发人员对业务不熟,对语言不熟,对SDK不熟,对第三方应用不熟。

  1. 经验丰富的产品经理需求变更的频率要比年轻的产品经理少很多。
  2. 经验丰富的开发工程师产生的BUG更少。
  3. 经验丰富的测试工程师有更多的手段发现BUG。
  4. 经验丰富的运维意味着更少的犯错,更少的线上事故。
  5. 无论是产品经理还是工程师的成长都需要在不断试错的环境中提高的,过于年轻的团队,企业就要承受试错成本。
流程设计的误区

企业诉求:找到一种可重复执行,减少犯错,提高效率的方式和方法。但是,往往会走偏,不断画蛇添足,增加内耗。

员工诉求:别妨碍我做事,我想尽早完成工作,下班走人。结果,员工会想出各种对策来规避流程和规范。

几乎所有的技术企业都会重视技术规范,为此制定各种规范,并要求员工严格执行。同时员工会想出各种对策,就这样形成了潜规则。

流程设计走入误区是管理层擅长制定乌托邦式的流程与规范,认为控制了流程的每个节点,就能产生一个好的结果。随便拿出一条流程都堪称完美,无懈可击,但没有考虑到执行结果,流程规范在执行过程中每个环节都会出现问题,都不可能100%执行,只有机器人才能100%执行流程,任何由人执行的流程规范都不可能做到100%执行,即使是命令化管理的军队,都不能做到100%执行每条命令,严格训练过的士兵也常常犯错,甚至很多命令传达到一线会走样。

流程设计的任何一个环节出现问题就如同多米诺骨牌,造成连锁反应,最终无法控制。

人们的思维习惯是,在流程的执行过程中,发现问题,就增加一个检查点,甚至为此新增一个流程。而不是去优化流程减掉某个节点。

流程与规范的制定需要需要满足几个条件:简单,易掌握,易执行,可重复执行

员工考虑的是尽快完成工作,规范不应成为完成工作的负担。

很多管理者将其归咎为 “执行力” 弱,我并不这么认为。有些犯错并不是执行力问题,也不是敬业度问题,可能需要从心理学角度解释,这是人性的问题。

我们不应该通过管理手段约束员工,而是应该从技术手段避免很多没有意义规范,让开发自动化,让测试自动化,让运维自动化,机器是不会犯错的,这是趋势也是我的努力的目标。

先写到这里,后面有时间继续补充