传统的开发团队通常按角色就行分工, 开发人员只管开发, 测试人员只管测试, 在自己的职责之外的事, 要么是看不见, 要么是觉得不是我的活,我不用去管,做好做坏和我没有关系。
而敏捷软件开发恰恰相反, 更加强调“Whole Team”, 即整个团队对外做出承诺, 团队中的所有人对所有的开发,测试,文档等任务附有责任。
如果不能按时交付高质量的软件, 就是整个团队的责任, 某一个Developer/Tester做的再好也不行。
这就要求团队中的人能互相帮助, 正像华为公司说的“败则拼死相救, 胜则举杯相庆”。 所以团队中的人员最好具备多种技能,Developer能帮助测试,Tester能帮助写点代码, 写点文档...
这样大量的任务就不会挤压在某一个人身上,导致项目失败。
这样问题就来了: 团队中每一个人都必须成为通才吗? 能成为通才吗。
最近看了Mike Cohn的一个ppt,其中的一个例子回答了这个问题, 觉得很精彩, 拿出来和大家分享:
Mike Cohn 用不同类型餐馆的例子来表明了他的看法:
Meconi’s 是一家熟食店, 它有一个订餐员(Order Taker)和很多三明治厨师(Sandwich-maker), 你要去吃午饭的话你觉得体验如何? 我们会看到门外排了很长的队伍 -- 因为只有一个负责订餐的, 她非常繁忙的记录下所有这些订单。 但是一旦下了订单,老兄你估计很快就能吃到了,因为会有9个人冲过来做三明治。 但是我可不想在门外排这么长的队伍, 等这么久, 我们还是去 Bruno 家去看看吧
Bruno 恰恰想法, 它雇佣了9个订餐员,而只有一个三明治厨师, 你的订单很快会被处理, 很明显你不得不等巨长的时间才能吃到。
Ferentino 家似乎有些独特,四个订餐员,四个厨师, 还有五个机动人员(Floater) ---- 即会订餐,也会做三明治。当三明治订单太多的时候, 他们会到后厨去帮忙---也许他们做的不能和厨师一样快, 一样好。 当顾客太多的时候,他们也会冲到前台去帮忙处理订单 -- 他们也许不能做的很完美, 但足够好就行了。
很多餐厅都会明白了这一点: 保留机动人员是个好主意, 但是不是每个人都必须成为Floater.
回到软件行业, 为什么我们的敏捷团队不这样做呢: 让一些专才具备多种技能, 不一定具备团队所要求的所有技能, 只要这些人能平衡好Workload 就够了。