您现在的位置:e-works > 智造书屋 > 书籍列表 > 代码之殇 > 2002年5月1日:“我们还开心吗?分诊的乐趣”

第一章 项目管理失当

第三节 2002年5月1日:“我们还开心吗?分诊的乐趣”

    如果你没有把这个概念搞清楚,请告诉我……

    项目经理希望瞬间得到无穷多个功能,测试人员和服务营运人员希望永远也不要增加新的功能,而开发人员只想在不受外界干扰的环境下编码实现很酷的东西。现在,邀请这几个方面的主管,让他们带着相互冲突的理想去同一间房间,关上门,再给他们点可以用来打架的东西。会发生什么呢?分诊!

 作者

    作者注:当产品开发问题涌现(比如未完成的工作条目、Bug或设计变更)出来时,它们都被记录在一个工作条目数据库中。分诊会议就是为了安排这些问题的优先级,并且决定每个问题如何解决而召开的。很多“冲突”(保守的说法)就是源自于这个会议。

    译者注:关于分诊(Triage)。这是一种根据紧迫性和救活的可能性,在战场上决定哪些人优先治疗的方法。战地医学的基本原则之一是,如何将伤者划分为3类:①无论是否接受医疗都会死亡;②无论是否接受治疗都没有生命危险;③只有及时地接受医治才能保全性命。抛开它的病理本质,分类本身极其重要,只要你希望最大限度地保存有生力量。如果你不进行分类,结果将会比你做分类时要糟糕得多。

    很庆幸,鲜血没有从分诊室的门缝中流出来。当然,这正是调解员要做的事情。大部分分诊会议都搞得像大屠杀一样。但必须要这样吗?我在微软见过的几次最激烈的争吵就发生在分诊会议室里。这样很糟糕吗?抑或就该这样子?

    战争是地狱

    参加过残酷的分诊会议的人,他们都会告诉你这样不好。即使你赢得了大部分的争论,你也会被这粗暴的分诊搞得精疲力竭。

    基本上,病态的分诊和病态的团队常常同病相怜。它们在团队成员身上制造坏的“血液”,让他们常常产生报复性的、毫无建设性的行为。

    为什么要这样呢?我们这里鼓励激情。我们想要人们为他们的信念而战,站在我们客户的立场上做出正确的决定。带一点点健康的竞争有问题吗?然而,当这竞争不是一点点也不健康时,那就不好了。

    这不是个人的事情

    不应该认为Bug是个人的事情,但事实却是这样的:

    ·对于发现Bug的那个测试人员来说,Bug代表着他工作的质量:“什么叫这个Bug不够好,无需修复?”

    ·对于定义这个功能的项目经理来说,Bug考验着他当初的设计:“那个Bug完全摧毁了这个功能的特色!”

    ·对于服务营运人员来说,Bug意味着实实在在的、可能永无穷尽的工作:“什么,你不关心这个Bug?反正不要你每天早上3点钟进办公室来重启服务器!”

    作者注:关于早上3点钟重启的趣事。像大部分提供软件服务的公司一样,微软现在正在改变营运模式,不再提供每周7天、每天24小时的不间断电话服务了。取而代之的是,我们把服务设计成具有自愈能力(重试、重新开始、重启、重新镜像、重置机器)的系统。现在的服务营运人员只需在正常的上班时间,根据自动产生的替换清单对组件进行更换就行了。

    对于开发人员来说,Bug代表着一种个人的价值判断:“事情没那么糟糕吧!”

    分诊所做的决定应该基于我们客户的利益和微软的利益,而不能光凭个人的感觉。然而,因为各个方面对于Bug有着各自不同的立场,分诊讨论转眼之间就会脱离轨道。

    分诊的5条黄金法则

    你怎样才能保证分诊正常地进行并且具有建设性呢?采纳我下面的5条黄金法则吧:

    1关上门。分诊是一个协商的过程,而协商最好在私底下进行。当做决定的过程保密时,大家更容易坦诚相见、相互妥协乃至达成一致。这也便于分诊的与会者把他们的决定作为团队的决定向其他人解释。

    2所有的决定都是团队决定。当达成一致意见之后,所做的决定就不再是个人决定,而已经上升到了组织的高度。作为分诊团队中的一员,每个人都要无条件地支持这些决定。分诊的与会者应该具备为每个分诊决定做出辩解的能力,就好像这些决定完全出自于他自己一样。

    3每个专职领域只派一名代表。分诊必须快刀斩乱麻。遗憾的是,参与的人越多,过程就越漫长;个人情绪掺杂得越多,一致的结论也越难达成。一个人做个决定可以很迅速,但你需要整合各个方面的观点来做出一个集思广益的选择。因此,折中的办法是,每个专职方面各派出一名代表参与讨论,从而兼顾效率的同时,使各方观点得以充分体现。

    4指定一个可以做最终决定的人。如果与会者不能达成一致,我们就需要有一个人做出最终决定——理想的话,这种情况不会发生。就我个人而言,我更倾向于让项目经理来做这个最终决定,因为项目经理本来就是做协调工作的,之后也是他的职责要去解释这些决定并让其付诸执行。他应该不会滥用这个特权。然而,真正的威胁还在于,可能会有某个工程方面的代表(绕开项目经理!)把他的决定强加给所有的与会者,这样也能让大家达成一致。

    5所有的决定都应遵从“贵格会”信条。这是最重要的一条法则。通常所说的“一致意见”意味着所有人都同意,但对于像分诊这样艰难、牵涉个人观点的事情,这个要求显然太高了。遵从“贵格会”信条只是意味着没有人反对——所有与会者必须为大家都能接受的解决方案而协同工作,只要不起冲突即可。这样就会产生一种很容易就能实现的、通常也是最理想的结果。(注意:这里说的“贵格会”只是指遵从相同信条的一类人,而不是有宗教信仰的那种。)

    遵照上述5个法则,你的分诊就会充满热情、具有建设性并且富有效率。不过,下面我还要讲一些细节问题,以使得本栏目更加充实。

    魔鬼藏在细节里面

    这里有一些细节上面的处理技巧,可以让你的分诊会议开得更加顺利:

    ·如果你们的争论针对的是人,而不是Bug,你就需要把焦点转移到“做什么最有利于客户和长期股票价格”的话题上去。这种方法避开了讨论个人问题,同时把会议的焦点集中到了它本该集中的地方。

    作者注:在所有的栏目中,我都在谈论要把注意力放在客户和业务上,而不是个人问题上。你可能想知道,为什么你不能只考虑客户,而不去管长期的股票价格。我对这个观点表示理解,但我也知道,如果我们的业务做得不好的话,我们也就没有客户了。因此,拥有一个商业计划来指引我们的工作,这对于为我们的客户提供可持续性的利益是很必要的。

    ·如果你对某个Bug或某个修复需要得到额外的信息,有时候你需要通过电话或亲自从分诊团队之外邀请一个人进来。请记住,当你完成提问之后,继续争论你们的决定之前,一定要送走这个访客。否则,分诊的机密性就会被破坏,所做的决定也就不再是分诊决定了。

    ·如果你想让你的团队中的某个人了解分诊过程,则可以邀请他加入一个分诊会议,但叮嘱他,务必在你们讨论期间要像趴在墙上的苍蝇那样保持安静,并且向他强调协商过程的机密性。

    很难进行下去,不是吗

    如果一个或几个分诊团队成员不能就某个问题达成一致,会议无法进行下去,就给他们一些“银弹”吧!游戏规则是,你任何时候都可以用银弹来获取特权,让大家遵从你的意见,但是子弹用掉一颗就少一颗,用完为止。当有人在某个问题上不肯屈服的时候,可以问他:“你想用一颗银弹吗?”如果用,其他人都要支持他的决定。通常这个人会说:“不,不,这事没那么重要。”然后,会议可以继续进行下去。

    作者注:几年来,这个关于分诊的栏目引来了大量的争论,特别是上面关于“银弹”的这段。有些人抱怨不应该使用“子弹”这个字眼,而要用“令牌”。更多的抱怨是:一个关键的团队决定可能由某个人通过使用他的“银弹”做出,这个很危险!但实际上,这种事情永远也不会发生。“银弹”是一种稀有资源,它用来帮助它的主人提升问题的重要性。大家不会轻易使用它。因此,如果有人在一个关键问题上滥用一颗“银弹”的话,总会有其他人使用剩下的“银弹”去对抗他。尽管如此,我还从来没听说有这种事情发生呢!

    最后,该到数据库中去解决分诊会议讨论过的Bug了:

    ·记得使用“分诊”标签去表示这是一个分诊会议决定。

    ·记得解释清楚分诊团队所做决定背后的考量。

    不要去“解决”Bug(尤其是外部Bug),除非你再也不想看到它了。通常情况下,团队把有碍产品发布的Bug标为“外部”或“待办”,意思是说,“我们现在不想处理这个Bug,以后会另行安排。”但如果那个Bug被“解决”了,它就落在了“雷达”能够扫描到的有效区域之外,相应的问题也就被隐藏了起来。

    作者注:你可以在第2章“我烦扰你了吗?Bug报告”中看到关于Bug、优先级、分辨率的话题。

    谨小慎微

    分诊被证明是你需要对团队履行的最重要的职责之一。良性的分诊会议几乎总是跟良性的项目和项目组直接相关。这种关系的真正美妙之处在于,积极、富有成效且愉悦的分诊会议将给你的工作、你的团队带来同样的效果。但跟解决团队和项目的全部问题比起来,解决分诊中遇到的问题要容易得多,牵扯的人也要少得多。

    再好不过的是,你们使分诊会议得以改善,并步入正轨,这可能会成为你一整天最快乐的事。当分诊的焦点是Bug而不是人,大家意见统一而不是相互攻讦时,那么会议的紧张气氛就会消散,纷争与挫败就会以诙谐的氛围而代之。健康良性的团队在一起工作,他们开的分诊会议常常充斥着俏皮话、玩笑、矫情讽刺和令人发笑的误述。对你的分诊技巧做一些适当的调整吧——你们的笑声可能会传到走廊上,久久回荡!最好总是关着门。