Scrum is the new waterfall(Scrum就是新时代的瀑布模型)

这是我看到的第一篇将Scrum作为反面教材的文章,有些道理。查看原文

========

在软件开发领域,Scrum在理论上很棒,但是实践起来却是有缺陷的流程。Scrum就是瀑布模式的迭代,是流程的地狱。这样说,会让我回避或者被Agile组织踢出门。但我真的相信软件行业的祸根就是这个叫“Scrum”的流程。

Scrum就是Agile

不,绝对不是Agile。Scrum是反敏捷。它自称为敏捷方法或理论,但如果你阅读过敏捷声明,Scrum在声明的定义里不是敏捷模式。敏捷的流程就通过流程或工具,安排好人和活动的优先级。

Scrum总是披着“敏捷”的外衣,它就像去祖父的老教堂,那里所有人总是重复着“Scrum教练”所说,听着各种致力于“Sprint计划”,“需求讨论会会”,“每日站会”等的想法。这些太枯燥,太陈旧了。这导致那些不写代码、不懂也不关心写代码背后技术流程的人来组织毫无意义的会议。

坚持Sprint的交付承诺,甚至为此加班。你承诺了,所以你必须交付。因为人不可能精确地估算。我们不能在建造摩天大楼时精确估算,那么做一套价值500万美金的软件又怎么能做到。

如何敏捷

要接受敏捷是围绕人为先,人为重的原则。怎样才能使你快速达到目标?干实事。不要把时间浪费在毫无意义的会议,就像计划或者需求讨论,只要不是使得我们快速前进的事情。

开站会就是为了设立站会的初衷,不是为了向leader汇报状况。站会是为了快速解决团队遇到的障碍,并快速前进。停止每天早晨9点开会,停止每天开多次会议。如果遇到问题或者阻碍,找个会议召集相关的人,站着,解决进展中的阻碍。

敏捷是快速前进,每日构建,按变更需求发布。Scrum在Sprint过程中没有流程就无法改变,这会阻止你改变并快速前进。如果昨天的需求是X,而今天的需求是X和Y,怎么办?你是今天能全部发布,还是下个Sprint发布?今天就做掉比下个Sprint再做要好很多。

快速前进

你需要编写测试代码。程序界面是否可以显示?程序在所有可能的路径都是正确地执行?如果产生脏数据怎么办?测试程序的接口,确认接口使用正确的契约,返回正确的数据格式,并且返回正确的数据。测试性能和安全。

你是不是能立刻发布Master分支的代码?如果不是,那你还有很多事情要做。Master分支必须随时可以发布到正常环境。如果不是,那就不算敏捷。

如果你重构或者重新设计系统,需要保证系统不会崩溃,那么写测试代码可以降低风险。

放弃单元测试,测试契约

单元测试可以很有用,但它把逻辑代码和测试测试紧密耦合在一起,使得程序非常脆弱并且反敏捷。

这就是契约测试出现的时机。测试类与类之间的契约,哪些是public interface?确保它们甚至对脏数据也可以处理。测试API契约!确保API返回有效的数据,有效的JSON格式或者XML WISDAL,亦或可以拿到的任何格式的返回数据。

测试UI契约。什么是成功的主流程?什么是常规路径?测试功能,而不是设计或者代码。

如有必要,使用看板

我认为大多数流程都是浪费时间,除了看板。只需简单几列:

  • 未定义 - 需要有人增加一些细节。
  • 已定义 - 我们觉得已经完善足够的细节,可以开工了。
  • 正在做 - 开发人员正在开发。
  • 已完成 - 完成并准备接受创建者确认。
  • 已确认 - 这不是一个列而是一种状态,事情做完了,可以从看板上移除。

发现卡片上没有足够多的细节!将它改成“未定义”状态或者从椅子上起来去找人完善细节。

没有任务小时数:人类不擅长估算。如果有必要统计,就记录实际工作时间。