软件空降灭火员的技巧

翻译 2007年09月30日 21:48:00

  软件空降灭火员的技巧

 
陈能技
2007-9-29
 
原文:Skills For Software Smokejumpers – Don Gray
 
你知道空降灭火员吗?他们是勇敢的、自信的救火队员,空降到很远的地方,背着80磅的装备准备消灭森林大火。如果空降比较顺利的话,他们会安全着陆。灭完火后,他们可能需要步行10英里的路程走出去。这不是一个胆小的、反应迟缓的、缺乏自信的人可以完成的工作。
 
你是否想过你可能会成为一名空降灭火员呢?想想:你们中间的很多人在软件项目的中间阶段加入,因为很多时候,项目需要额外的帮助 – 有时候是需要你出谋划策,有时候是需要你做“体力活”。有时候需要一些关于如何改进项目表现的指导。有时候项目管理需要一个外人的关于项目状态的观点。
 
不管你是出于什么原因在项目开始后才加入,你会碰到一些挑战。为了成功你必须:
l         确定你的角色
l         建立信任
l         熟悉地盘
l         收集信息
l         做你的工作
l         宣告胜利
 
确定你的角色
"If you don't know where you are going, you'll probably end up somewhere else."
—Laurence J. Peter
空降灭火员能很好地工作在定义良好的团队。每个人都有自己的工作并且知道怎么做好它。在空降到一个一个项目之前,你应该判断自己的角色。问:
l         我的领导明确地让我做什么?
l         我如何向我的领导证明我成功了?
l         我与其他人的关系会是什么?
 
要搞清楚我的领导让我专注于什么。如果领导解释不清问题,那么你会碰到很多麻烦。他知道项目延误了并且他希望得到更好的质量,但是他不能清晰地说出为什么项目延误了,或者什么造成了质量标准不满足。通常来说,越是痛苦(延误、质量差),领导越是说不清楚问题。当这个出现时,我喜欢使用Johanna Rothman在"Release Criteria: Is This Software Done?" (STQE magazine, March/April, 2002)中描述的术语SMART。SMART提醒我把问题定义清楚:详细的、可度量的、可获得的、相关的、可跟踪的。
 
接下来,我需要知道“完成”是意味着什么。知道我该怎样向领导展示“完成”,知道我应该跟踪什么信息以便我可以提供给领导证明我把火扑灭了。问自己“当问题得到解决的时候你会看到、听到、感觉到什么?”
 
我通常使用简单格式的报告,从我开始报到开始记录。我会描述我们自从上次讨论后做了什么,我们目前正在做的事情,我们将要碰到什么障碍。
 
最后,我需要知道我将会与什么人一起工作,他们有什么样的能力。基于我将要做的东西(体力活、脑力活、指导或项目评审),我会以不同的方式参与项目。我可能是个同事、教练,或是个调查者。知道我会是哪种角色可以指引我的工作,以便最终证明我的工作完成了。
 
目前,我正在跟一个客户一起工作,他的员工已经在解决一个问题上尝试了一个月。在我们的启动会议上,我们已经定好我的工作是完成这个项目,而他们不关心是怎样完成的。在这个项目,“完成”意味着所有应用程序已经被切换到新的服务器并经过测试,让旧服务器退役。我的主要作用是脑力活动兼体力活动,作为同事帮助解决问题。然而,同时我会问“为什么项目组不能解决问题?”这样的话有把我自己放到了一个调查者或报告者的角色。
 
建立信任
"The first thing to build is trust."
—Brad Appleton
空降灭火员工作在一个完整的队伍中,在它们蔓延之前帮助扑灭小火,或者提供额外的人力帮助扑灭大的火焰。作为一个项目的空降灭火员,就像加入到一个已经存在的团队。因此,当你着陆并放下你的降落伞之后,你需要投奔你的团队。你在这个团队的工作能否成功取决于你对他们的了解以及他们对你的信任。
 
建立信任是一个相对直接了当的行为。如果你说你要做点什么就去做。如果你说你不要做什么就别做。这个团队-还有它的管理层-会找出你的行动和言语之间的差异。建立信任是一个基于行动的行为。当我从一个我不很了解的人那里听到“相信我!”这句话的时候,那是个危险信号让我进入“要么行动要么闭嘴”的模式。因此,定下承诺并兑现它们。
 
保持行动、信息和决策的可见性能帮助建立信任。不可能马上成功。让事情公开可以帮助减少担心,增强沟通,促进好的决策。在我的某次空降中,一个项目组成员知道我用一个表格记录成本、当前状态、需要做的改变等。他要求我给他拷贝一份,后来他给回我,并把我在每次计划中需要协调的一些关键人员的名字和电话号码附上。通过分享我拥有的信息,我得到了更多的信息。
 
问一些问题让大家公开地分享他们所知道的关于“火”的事情。倾听并理解他们的回答能建立和谐、信任。这也会帮助你学习这个地盘的东西并收集信息。
 
熟悉地盘
"You gotta know the territory."
—Meredith Willson in "Rock Island" from The Music Man
 
"I know the territory."
—Meat Loaf in "I’d Do Anything For Love" from Bat Out of Hell II
空降灭火员工作在一个不断改变的环境,是否熟悉这个地域会有很大的不同:可能是把火扑灭了或者是不能活着出来。他们的地盘包括可燃物类型、风向、工作的地形。这些的任何改变都可能导致结果的快速变化。
 
项目空降灭火员也同样工作在一个动态的环境中。个性的不同可能会加大项目的火焰。有些项目组成员可能不相上下。谁是真正的负责人?即使他不能帮助我,他会使我成功的能力受到伤害吗?任何这些的改变都可能导致结果的快速变化。
 
在我多年的空降中,我从来没有碰到过缺乏激情的情况。大部分情况是按照我几年前的模式一样进行。不知何故,一个稳定的、经过验证的过程突然产生了25%的缺陷率。大老板从家里的办公室飞过来亲自处理这个情况。周六,我被告知要空降。当我在星期一的早上到达时,我调查情况,听管理层的尖叫和员工的道歉,最后决定是时候冷静下来了。我深吸一口气开始问问题。
 
在Naomi Karten的书《Communication Gaps and How to Close Them》中,她列出了我的3个最喜欢的问题:
1、 你怎么到这里的?
2、 你期待在这里会发生什么事情?
3、 在这里你希望实现什么东西?
 
她还说,“注意第一个问题得到关于事件的过去的信息;第二个是目前的信息;而第三个是将来。这三个问题提供一个起点帮助你了解什么是对于这个你要尝试沟通的人或组织来说是重要的”。这些问题可作为学习地盘的起点。
 
对问题的回答表明这个人的安全感。简短的、简单的回答可能暗示这个人感到不安全。可能这是个谴责过失的团队文化,被谴责的人可能会被炒掉。团队中可能存在个人冲突。未能解决的冲突管理议程可能导致一个“CYA”环境。如果这个环境不能让员工感到安全,它同样不能让空降灭火员安全。
 
空降灭火员的成功和幸存的关键取决于他搜索出关于个人感到不安全的信息的能力。如果我不能建立互相信任的关系,则不能获取我需要了解的地盘信息。我尽量跟大家交谈,让我可以画出一副准确的地图帮助我在这个地域里行走。
 
回答的内容和传递的形式是否适合其他人?我记得曾经有个项目经理对我大叫说他在上一个项目中做的怎样的好,而这个项目也一定不会失败。我奇怪他为什么会选择在这个项目用不同的方式,但是我决定把我的嘴闭上。他部分地对了。项目没有失败,但是他和他的公司(管理层队伍)在六个星期后终止了。我们花了另外一整年的开发时间来完成一个计划12个月的项目。
 
收集信息
"As a general rule, the most successful man in life is the man who has the best information."
—Benjamin Disraeli
空降灭火员在登上飞机之前就收到了关于火的信息。火势怎样?天气情况怎样?火向如何?需要跨越什么障碍?安全区域在什么地方?一旦他们着陆,第一个行动就是确认这些信息并判断是否有变化。项目空降灭火员在第一次与客户交谈时就开始收集信息。问题的本质是什么?情况持续了多长时间?尝试过什么样的解决问题的办法?你需要收集关于你要扑灭的技术上的大火的信息。
 
我曾经要求空降解决“三个系统停止工作”的问题。听完问题描述后,我综合考虑了症状和几个可能的原因,还有几个成功空降的经验。我继续问一些问题,并逐一地排除了一些可能性。当我空降到项目的时候,我所知道的是一个确实存在的问题。(奇怪的是,软件停止工作的原因是有人创建了分开的IP子网,计算机不能互相沟通因为那个便宜的路由器不能连接子网。)
 
项目空降灭火员根据以往的经验来比较信息。什么与这种情况类似?是个新问题还是异常问题?这提供了项目空降灭火员一个初始的问题评估。这既是好事也是坏事。
 
初始评估会导致我们忽略一些新的数据。因为我们想问题是我们所认为的问题,我们可能会相信我们已经有答案了。Lee Copeland在"Believing Is Seeing" (Better Software magazine, December 2006)中指出的,Bruner-Postman试验告诉我们经验会让我们看不到现实。保持虚心并勇于改变与我们自己不一致的结论,但是在空降到一个情况复杂的项目中时,两者都是重要的。
 
当你尝试解决问题的时候尝试寻找正面的支持和负面的指示。在我作为紧急技术医生的生涯中,我被教导使用下面的checklist来评估诗句和修正我的理解:
l         我期待看到一些东西,我确实看到了
l         我期待看不到一些东西,而我确实没看到
l         我期待看到一些东西,但是没能看到
l         我期待看不到一些东西,但是我看到了。
 
我们可以使用这些新的数据来修正我们的问题评估。它强迫我们重新思考并可能重新构建我们的问题评估。它花时间但是能得到更好的评估和解决方案。另外一个选择是忽略信息或修正对问题的评估,它也不需要重新思考和重新构建我们的评估。但是它也同时导致了对学习的影响,我们忽略的信息会回来把我们烧着。
 
最终的技术问题可能仅仅是找到计算机不能在子网之间通信那么简单。可能帮助项目组开始翻“流程问题”的旧账。可能项目组的软件工程实践需要修改以达到项目目标。不管技术问题可能是什么,要做好问题难以解决的准备。如果问题很简单,项目组很可能早就已经解决了。
 
做你的工作
"For every complex problem, there is an answer that is clear, simple, and wrong."
—Attributed to H.L. Mencken
空降灭火员使用不同的战术策略来灭火。如果火很小,他们可能直接对付它。对于其它火,他们可能使用间接的方式,例如控制队形并纵迎火来扑灭主要火源。当火势比较大的时候,他们可能会在继续灭火之前等待变化 – 燃料的类型、天气、地形。
 
对于项目空降灭火员来说,你解决问题的方法受你在项目中的角色影响,你建立信任的能力,你了解地盘的程度,问题复杂性的相关信息的收集,等等。
 
脑力活或体力活类型的角色和一个直接的问题通常需要直接的行动。这是我处理“软件停止工作”问题的方法。我坐下来在计算机面前,开始检查设置、属性、配置。当我发现两个网卡时,我开始调查更多的内容,好了!这里有两个不可匹配的子网。
 
指导类型的角色或复杂的问题通常需要间接的方法。我曾经花了3个月的时间帮助一个硬件团队移动路由器进入beta产品阶段。因为管理层抱怨不清楚团队的状态,我在工程开发现场挂了一张图表,这样每个人都能看到什么还没做好,我们计划什么时候要完成。半周一次的状态会议问一些基本的Scrum问题:从上次会议到现在你做了什么?你将怎样继续工作?你现在碰到什么问题?我确保我有需要的工具,以便问题出现时,我能跟他们一起工作并解决。我们比预定的时间提前了几天。
 
每一种做事的类型都会带来相应的后果。如果我决定控制并直接工作,我会错过让别人从经验学习的机会。如果我让别人通过经验来学习,那灭火效果如何?我会使用下面的问题来帮助我理解我做出的决定:
l         如果我这样做会发生什么事情?
l         如果我不这样做会发生什么事情?
l         如果我这样做,什么事情不会发生?
l         如果我不这样做,什么事情不会发生?
 
通过做你的工作理解你的角色的过程持续整个灭火的时间。它是个不断精细化的过程,随着项目空降灭火员学习更多的关于技术问题、项目组、他们之间的交互不断细化。它不是一个线性的顺序。以确定你的角色为起点,接下来的活动会随机发生、同时发生、持续发生。
 
宣告胜利
"The Lone Ranger Fantasy: When the clients don't show their appreciation, pretend that they're stunned by your performance—but never forget that it's your fantasy, not theirs."
—Gerald M. Weinberg
在他们确认火已经扑灭之后,空降灭火员会赶回基地,冲洗干净,重新打点装备,准备下一次空降。
 
在退出之前,项目空降灭火员需要领导认可“火”已经灭了。这个任务需要在空降之间定义好明确的目标并保持进展情况的可见性。如果你不知道你的目标是什么,那么你很可能会错过它。命中目标会带给你赞扬和需要你的付出。
 
宣告胜利是对你的贡献的评审的一个开始。项目空降灭火员通常对项目做出技术贡献。这些通常是很明显的,而大部分人会赞同。通常更重要的是那些不是很明显的个人贡献。除了空降灭火员可能永远也没人会知道那许许多多的磕磕碰碰,还有空降期间提供的指导。
 
一周前,我完成的一个空降项目的领导说“今天的报告又没有发出来,我想我们的工作白费了。”我提醒他问题在两个不同的系统出现,我们只是纠正了一个,当我们处理第二个系统后,问题会变好的。今天,我听到他关于第二个系统上线的消息的高兴的声音。
 
空降灭火员的生活
"You live and learn. Or you don't live long."
—Robert Heinlein
空降灭火员的生活由下面活动组成:
1、 取得空降灭火员的资格
2、 训练
3、 到灭火现场
4、 灭火
5、 回到2
 
在多年的空降灭火生活中,训练会随着空降灭火员变得更加熟练使用当前的技术而改变,学习新的技巧。空降灭火员使用他们的所有技巧、所有时间。在需要的时候能用上他们学到的技巧,这会意味着导致扑灭大火和不愉快的结果的区别。
 
项目空降灭火员遵循相同的模式。然而,有时候,你是先开始解决问题,然后别人才请求你空降来帮助他们。
 
项目空降灭火员也需要不断地训练。你的技术能力能让你开始,但是你的人际技巧才能帮助你解决问题并持续地解决问题。除了阅读杂志和书籍,我建议参加一些经验交流会议或培训课程,在那里你可以学习到新的技巧并在支援场合实践。
 
空降不适合所有人。这些年来,我错过了生日和周年纪念日。我曾经在1个假期中的第二天被要求空降。幸运的是,我的家人爱我。有时候会变得紧张,我的一些幽默感会很有作用。作为一个肾上腺素成瘾者也会有帮助。而这一切都是值得付出的,当一个客户说:
 
“你知道吗,Don,几年前我见你参与一个项目并帮助他们很好地工作在一起,当你定出的宪章使得一些产品得以发布时,你却不在那里。但是,你还是帮助了那个团队和其他团队更好地工作在一起。”
 
这句话仍然激励着我。

相关文章推荐

灭火

东晋越西人张亚子,幼年时非常聪颖好学,妈妈经常用一些理性的教育方法,直观地启发他明白一些道理,而他每次都能一点就通,并且牢记在心上。   有一天中午,小亚子从外面跑回家,抱着妈妈的腿就哭起来。  ...
  • hjx2738
  • hjx2738
  • 2012年10月22日 20:41
  • 125

自己做灭火机器人(一)——硬件准备与车体搭建

自己做灭火机器人(一)——硬件准备与车体搭建 已经在CSDN上逛了很久了,很多时候一遇到难题,就会先到这里来看看有没有前人处理过并且发过博客,发现大神真的很多。如今也想把自己做一些东西的过程分享出来,...

“灵异类”灭火机器人

一个由国外海军资助研发的灭火机器人—Octavia,在本月早些时候已经呈现在大家面前,并进行了灭火演示。各种类型的机器人我们见多了,而Octavia极具“特色”,你一定有所感受。 Octavia能够...

基于AVR单片机的灭火机器人

  • 2010年06月05日 08:28
  • 178KB
  • 下载

《软件调试的艺术》学习笔记——GDB使用技巧摘要——程序崩溃处理

《软件调试的艺术》学习笔记——GDB使用技巧摘要——程序崩溃处理     1        程序为什么会崩溃 2        内存中的程序布局 当某个错误导致程序突然和异常地停止执行时,程序崩溃。迄...

自动灭火论文第一部分

  • 2013年05月15日 17:47
  • 200KB
  • 下载

《软件调试的艺术》学习笔记——GDB使用技巧摘要(3)——程序崩溃处理

程序为什么会崩溃 内存中的程序布局 当某个错误导致程序突然和异常地停止执行时,程序崩溃。迄今为止最为常见的导致程序崩溃的原因是试图在未经允许的情况下访问一个内存位置。硬件会感知这件事,并执行对操...

基于51单片机的智能灭火小车

  • 2009年11月16日 17:05
  • 942KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件空降灭火员的技巧
举报原因:
原因补充:

(最多只允许输入30个字)