第1节
布局时期15很多探讨软件开发的书籍都假设自己存在于理想的状 态下:团队本来就应该非常专心且克尽职责地完成 工作,并完全掌握任务的本质;他们收集得到完整的需求 情报,建立设计规格,并导引软件原型(p r o t o t y p e)一次 又一次的蜕变;他们请求使用者参与,使用者便会全力配合,而且非常认真地与开发团队共同完成深入的需求分析。 所有的事情都是那么完美顺利。很不幸地,理想状态是不 存在于现实世界的,在真正的软件开发项目中,您可能看 不到一丝一毫属于完美顺利的景象,而且看到的恐怕只有 一堆的问题。不只是问题,还有可怕的挑战。优秀的开发团队在布 局时期必须做的事情多如牛毛、广如大海,我们大略分为 五个范畴:组织、竞争、顾客、设计、开发。布局时期的 工作是多维的,而且必须在每一个细节中都能综合、兼顾 所有预期的结果。
组织开发团队 组织开发团队 组织开发团队组织开发团队17我所谓的组织,是指集结适当的人选分别担任下列角 色并参与设计:项目管理(Program Management)─负责制定开 发日程、与外界沟通、寻求技术方面的后勤支持。 软件品保(Quality Assurance)─测试与评估软 件的品质。 程序开发(Development)─写程序、抓错虫。 产品管理与行销(Product Management/Marketing)─负责整个产品的形象定位,传递正确的产品信息 给顾客,以及产品的上市发表、与传播界的沟通。 系统文件与使用者教育( D o c u m e n t a t i o n / U s e rE d u c a t i o n)─负责以文字表达正确的产品使用方法。(这里所谈到的设计,是指软件产品的设计,不是指 写程序或程序设计。读者耳熟能详的“程序设计师”, 译自P r o g r a m m e r一词,虽然这种工作有相当的设计成 分,但这种设计比较不是艺术性的,而是工程性的。
原 作 者 甚 至 鲜 少 使 用 Programmer 一 词 , 而 以 D e v e l o p e r表达。概略地说,软件产品设计是厘定目 标,事先定义出软件要做到的功能,本产品预定要满 足什么需求,目标顾客是什么样的,主要的硬件或操18作系统环境等等。—译者注)您不一定要将自己的团队成员划分成这五种角色(虽 然我认为这是最有效率的做法),但务必要确定这些工作 都有适当的负责人选。请注意每一种角色都有参与设计, 如此每一位成员对项目都有整体性且清楚的认知,使每一 位成员的目标是一致的。如果您的开发团队无法合作无间,对于目标老是有不 同的意见。那么,首先要做的是找出不团结的真正原因。
品保人员(QA)是少数民族? 如果品保人员认为他的工作是测试程序,而开发人员 认为他的工作是写程序给品保人员测试,那就得小心了,这是一个警讯。这种情况会造成开发人员和品保人员之间 的疏离,开发人员的优越感会使品保人员感觉自己是被歧 视的少数民族,当然会影响到软件的品质。品保人员的最 主要功能,是不断鉴定和评估产品的现状,是否在品质上 和功能上确实遵行产品目标,而让其他的人员专心投入他 的职务。品保人员的评估工作是一项整体性、持续性软件开发 活动中的一环,而不是偶尔来点缀一下。好的评估报告在组织开发团队19本质上应有客观的分析和衡量标准,如此才能导引软件产 品符合现实的需要。这种导引的重要性是不容轻忽的。因 为在开发过程中,开发人员可能因为一些偶发的小事或某 种无关的灵感而不知不觉地偏离了现实的需要,暂时忘记 了什么才是产品最该有的功能。品保人员的职责就是为软 件的品质把关,以现实、客观而市场导向的眼光,不断地 检视软件产品。
谁来设计产品?如果项目经理、产品经理、开发人员不断争论谁有权 设计产品或是各执一词,这是一个愚蠢的开发团队,只会 关心自己的权威;然而,真正的权威是来自于对现实状况 的精确掌握。产品设计的目的是将最好的想法列为产品的 基础,每一位工作人员都应该为此努力。至于什么是最好 的想法,应该在项目真正开始之前就通过实地检验。市场 调查是很好的方法,不需要太多的时间或成本,就可迅速 平息大家对于产品设计的争论。我们在下文中会讨论如何 增进彼此之间了解,这也是解决方法之一,精确缜密的思 考通常能使问题柳暗花明。
20权力争夺战会迫使人们心胸狭窄,互相竞争而不合作。
产品设计的争论是权力的争夺战,会使人们心胸狭窄, 互相竞争而不合作。可能有人主张产品在这项功能上有所 不足,结果焦点变成了功能而不是产品本身。一位有智能 的领导人应该将争论视为组织出现问题的症状,而去发掘 问题的根源,这比仲裁这项争论要有用得多。在这方面我 的经验与传统所谓的智能刚好相反,我认为用职权裁定谁 有产品设计权是毫无用处的,虽然改变正式的产品设计权 或许有点帮助。老实说,谈这个谁来掌权、谁来负责的主题并不有趣, 而且解决这个问题非常浪费时间。组织健全的团队是适才 适任,各司其职的;此外,每个人的除了各自专司的角色 之外,还担任一般的角色( generic role),这一点也受到 管理者的肯定,因此角色与能力之间的关系能够取得和谐。 一般角色会使团队更能融为一体,互相支持。团队是一种 平衡的生态,人与人之间的职权界线像是和睦邻人的关系,组织开发团队21于是,对每一位单独个体都有足够的尊重,整体的效能也 达到最佳化。这种平衡的组织生态是自然生成的,强制性 的外力干预只会造成负面的影响。如果团队成员彼此的关 系无法做到亦邻亦友的和谐,领导人必须分析原因。
通常 如果利益分配不公平,或有多人争夺同一项利益,或是提 供的报酬不够齐全,不平衡就会发生;有时候管理方面欠 缺弹性也会造成资源必须用人为的方式重新分配,效果不 一定会好。在任何项目开始之前,项目经理必须弄清楚团队中有 哪些地方需要特别的注意,尤其是团队的变动性( t e a m d y n a m i c s)。就像团队中的每一份子必须清楚要做什么工 作、有什么资源、目标在哪里,项目经理也必须设计自己 所要带领的团队该有什么样子,自己该如何“激活”这个 团队。因此,我们导出了法则1。
法则 1
Establish a shared vision建立一个共同的目标法则1建建立一个共同的目标23乍看之下,这何需赘述,但这却是相当困难的事。团 队中每一位成员都必须非常清楚我们要做什么、成品会是 什么模样、基本的产品策略是什么、什么时候必须完成。 凡是与共同目标相冲突的看法都必须转化成一致,而不是 把它消音。和谐的共识是绝对必要的,否则软件不可能做 得好,很多事会复杂化而难以收拾。建立共同目标的方法从独裁式的极端到放羊式的极 端,中间有无数不同的方法,但在我们讨论这些方法之前, 得先说明何谓目标,毕竟目标的建立已是现今衡量领导能 力的指针之一。简单地说,目标是共同的希望,对未来的 事情所描绘出来的景象。目标一词常被政治家或经济学家使用。任何一位好的 领导者,都有责任为其追随者创造目标。以我的看法,领 导者对其组员心理状态的掌握与认知,是目标的开始,然 后领导者对于组员之间复杂的心理状态认知、修正、建立 共同点,融入领导者的个人特质,使得领导者与组员、组 员彼此之间的防卫界线逐渐消失。有共同的目标才能建立 团队的认同感和归属感,大家会觉得我们是一个整体,这 是团队气氛的心理基础。
24团队的认同感和归属感,能消除个体的自利行为。
通常,共同的经验可以作为领导者的感情移入,领导 者用各种不同的形式告诉追随者:我们过去是那样,我们 现在是这样,而我们将来会是什么样。不论是否有共同的历史,“成功的领导者”能在团队 中营造共鸣,而“群众煽动者”则不能。当组员对领导者 意见相左时,最常见的反应不是直接反对,而是:“是啊, 我们也是这么认为,但我们该怎么办呢?”这时必要的努 力、鼓励和妥协都可能发生。领导者应该自问:“如果换 他们来领导,他们会怎么做?我该如何将他们复杂的情绪 转化成行动力?”这些问题的答案能帮助领导人解决大部 分的问题。有远见的领导者会构思一个美好的前景,需要大家共 同努力创造;而群众煽动者则是对现状不满,意欲去之而 后快。有远见的领导者会带领不同心态的人朝共同的目标 努力,有时为了长远之计而放弃近利;而群众煽动者则是下载逞一时之快、急功近利的人。
微软团队·成 功 秘 诀法则1建建立一个共同的目标25领导能力与目标是来自领导者与组员之间的心理共鸣, 若非如此,目标会流于虚幻,也无法带动团队迈向成功。
共同的目标26微软程序语言部门的故事1 9 9 2年的微软程序语言部门,情况实在不乐观。 那年的四月,微软发表了 C 7。C 7花了超过两年的时 间开发,经历无数次的进度落后和品质恶化,似乎是 一场永无休止的死亡进行曲。而微软的竞争对手已经 抓住这个机会,在Wi n d o w s版的C和C + +上面获得很好 的评价。C 7在很多地方都不足以与之竞争,虽然它有 精美的包装、动人的价格、优异的类函数库( c l a s sl i b r a r y)M F C 1 . 0,和微软素以见长的最佳化执行码编 译器(c o m p i l e r)。这些优点只能使微软勉强维持不被淘 汰出局,但很显然下一版非得大幅扭转劣势不可。微软的C / C + +开发团队经历了好几年的流年不 利,光是项目经理就换了三次。丹尼斯·吉伯特(Denis Gilbert)是新任的资深开发部经理,而我是新 任的行销兼使用者教育部经理;虽然我们都从未领导 过这么庞大的团队(超过两百人),但我俩都充满斗 志,企图有一番作为。
杰夫·赫伯(Jeff Harbers)管 理A F X小组,这个小组集结了微软的精英工程师,负 责为C/C++的产品提供“所见即所得”(What You See法则1建建立一个共同的目标27Is What You Get, WYSIWYG)的类函数库工具。他 们的经验极为宝贵,虽然两组人马的文化差异刚开始 难免造成点小摩擦。程序语言部门是微软中最古老的部门,第一个 产品就是比尔·盖茨与保罗·爱伦( Paul Allen)合 写的 Basic直译器。当微软进入操作系统与应用软件 领域之后,程序语言的重要性相对降低许多。微软的 重心转移之后,尽管微软的程序语言产品有占先的优 势,但开发者的辅助工具方面则跟不上竞争者了。在1 9 9 2年,大部分的微软高层主管都希望重新 振作这个部门,也许是被忽略得太久了吧,我无意批 评他们,但我猜多少也是微软扩张得太快太广所致, 无论如何,这使得我和丹尼斯肩负着更重大的责任, 更强烈地希望把事情做好。对我们的压力与期望不只来自微软高层,还有 来自专业杂志的负面评价和使用者的责难,甚至微软 内部同仁也轻视这个部门。
大家都说我们缺乏目标, 是一群笨蛋,要不然就笑我们 C 7品质不良,完成日 期老是拖延。就连比尔·盖茨的电子邮件也会带上一 句─程序语言部门是全微软最笨的一群人。这一切28不只是没面子而已,我们实在该做点什么。回想过去这段时日的发展和本部门堆积如山的 工作,我们(主要是丹尼斯)发现本部门一直被以下 的几个错误所蒙蔽:我们无法完成任务,因为我们没有足够的能力。 即使我们每件事都如期完成,也一样会失去市场。 我们没办法叫媒体不批评,或叫使用者不要抱怨。
我们的人力素质和数量可以做一个项目,最多两个。
跨出重要的第一步丹尼斯征询过所有的经理人的意见,要求他们 将各项项目作个评比,发现每个人都认为Caviar 是最 重要的项目。Caviar 就是Visual C++ for Windows 3.1 的计划代号。我们的结论是只要将C a v i a r做得好,又 能在适当时机推出,就是打赢了一场重要战役,甚至 会带来最后的胜利。第二重要的项目是B a r r a u d a,基 本上就是Caviar 的Windows NT 版。我们必须立刻加强这两个项目,幸运的话两个 都能完成,但若做不到,至少要集中火力在 C a v i a r。 我们把所有的资源都集中在 C a v i a r ,期望它赢得 Windows 3.1的市场胜利。
法则1建建立一个共同的目标29于是我们把手上大大小小的项目逐一列出,要 大家票选自己认为最重要的项目,以期形成初步的共 识。但丹尼斯并未加强这个共识,他甚至并未再邀请 组员发表意见,因为他已做了决定。我们明白C a v i a r 一定要赢,虽然希望渺茫,大家都愿意尽可能贡献自 己的力量。丹尼斯召来了全体组员,向大家说明我们要如 何打败竞争对手。我们必须将不重要的项目放弃,并 且重新整编改组。这是一个好的开始,但只不过是开始而已,其 他重要的条件诸如团体共识、决断能力、清楚的目标、 组员心理上的满足感等都还差得远。丹尼斯注意到整 个团队都为无法打败竞争对手而感到愤怒而沮丧。他 自己也有一股驱动力,想把这一切好好整顿。他感受 到只要有人把胜利的希望带进团队,全体组员都会发 誓:“我们要赢!”Caviar 会成为 Windows 3.1 的 Visual C++。 丹尼斯的决心点燃了整个团队,Caviar非赢不可,虽然大家对于部分项目必须牺牲放弃不免情绪反弹。 显然丹尼斯已经创造出成功的必要条件,但他还缺少30充分条件。
问题接踵而至这群人从来不曾形成团队。我们也没有跨部门 的协调组织,而且当初所期望的充分授权管理方式(consensus-style management)还处于很幼稚可笑的阶 段。我们没有跨版本的产品计划,也没有详尽的技 术规划,过去也从来没有成功的经验作为开发程序 的参考。几乎每个人都高估了我们如期完成的能力, 即使对于我们刚刚设立的新目标也是如此。但无论 如何,弃车保帅的策略和改组行动确实为部门注入 了新的动力,但结果还未见分晓,我们可不知道是 否能一举奏效。几个月过去了,事实告诉我C a v i a r实在不太可能 如期完成,事实也告诉我非得如期完成不可。我们已 决定在 1 9 9 3年的Software Development’93 We s t展览 上发布 Visual C++ 1.0,同时铺货在各种通路上,要 让竞争者来不及反应。这是我们成功的关键,也是我 们士气和信心的关键,最后的期限是1 9 9 3年 2月2 2日。 然而,这时的开发工作只能说是一团糟。
我们仍不断添加零星的功能;好的一面是我们还在不断提法则1建建立一个共同的目标31升系统效能,坏的一面是几乎无法将模块建构成完整 的产品,甚至无法每天产生一次完整的执行档。开发 人员把软件品保当成是黑箱作业,每天丢一份雏型给 品保就继续埋头苦干了,根本不管品保人员为时数周 的测试。大约在推出前的四个月,我受到了赫伯的严重 警告,他很坦诚地告诉我,如果我真要做好这个产品, 必须改变一些做法。他使我了解到除了我自己,没有 人能阻碍我做该做的事。我明知道该做些什么,却往 往因为某些因素(大多是个人的因素)而退缩不前。 我现在是行销经理,虽然过去在微软的 R & D部门曾 经领导过1 5个项目,但从未加入过 C++的团队,如 果我再不好好表现,我大概就是第三个卷铺盖走人的 经理了。赫伯的忠告使我明白我太消沉了。我可以清楚 看到事情是如何一塌糊涂,我有责任改变它,而不是 逃避它。赫伯向来以毫不遮掩、实话实说闻名,而且 总是能够一语中的。我终于被他的话点醒了。于是我和丹尼斯讨论了眼前的困境。我们其实 无法确定该怎么做才对,但都明白非得有一番彻底的32改变不可。
当天下午我们便召开了一次小组会议,这 件事本身就极不寻常,抓这么多人过来只为宣布一件 小事?是的,我们要在组员的心理上制造一个转折 点。我们为了求胜已经尽可能减轻不必要的负担, 而我们仍然在市场上失利,在同类产品评比中输给对 手,我们已经受够了失败的滋味─总是在进度严重 落后的情况之下做出平庸的产品─而我们明明知道 自己可以做得更好。只要我们同心协力,我们一定可 以在期限内做出最优良的产品;没有人能阻挡我们, 只除了我们自己(当然也有些不可知的因素)。我愈 思考眼前的处境,以及它对微软公司、对我们的意义, 就愈觉得斗志高昂。我们有士气、充满活力,一切成功团队所需的 条件我们都有了,只除了共同的目标。我个人有个想 法:我们不但要追上日程,也要做出最伟大的产品 Visual C++ 1.0,要令所有的人都刮目相看,尤其是 那些一向对我们避之惟恐不及的营销人员。我们要扭 转战局,让对手俯首称臣。
我的求胜心很强,但矛盾的是,我却不敢告诉法则1建建立一个共同的目标33我的同事。没有人阻止我说出心中的想法,倒也没有 人要求我说,这种时候个人的感觉似乎已经不重要。 我害怕自己被嘲笑:“他是谁啊?新来的嘛,这搞行 销的家伙想教我们写软件?”然而我再也无法沉默,再不做点事情我在微软 就混不下去了。那天下午我终于告诉全体组员我的感 受,也问问他们的感受:“我受够了挫败,你们也是 吧?作为全微软最差劲的项目经理,我恨透了,外界 的批评令我觉得丢脸,你们也是吧?Visual C++是最 伟大、最值得骄傲的产品,你们难道不这么认为吗? 我知道我们可以如期完成它,而且用它来给对手一个 迎头痛击,不只我一个人这么想吧?我们将创造微软 的明日世界,我们会大有作为的,不是吗?”结果,几乎每个人都有类似的感受,纷纷发言 为我补充。我终于整合了共同的目标:我们要准时完 成 Visual C++ 1.0,没有什么事情比它更重要。所有 的资源都投注在这个清楚明白的目标;不必要的枝节 可以牺牲,其他的项目(即使是N T版的Visual C++) 都可以暂缓,全部的人、钱、机器,都押这一注,而 且得立即行动!
34会后我们紧接着要求每一个工作小组至少提出 五项具体务实的建议,只要对 2月2 2日完成 Vi s u a l C++ 有帮助的想法,请大家务必提出来。我获得了 许多宝贵的建议,本书的第三篇“推出日期”中,就 有许多很棒的观念是来自这次的建议。而此时此刻, 大家的心理上和情绪上都有完成目标的强烈的决心, 因此会主动告诉管理者该做什么,然后确实去做。而 我和丹尼斯则负责提供工作环境,凡是对目标有帮助 的,我们都全力支持,甚至包括一些背离传统却实际 可行的构想,这就是员工领导的管理风格( m a n a g e - ment-led style)吧。
我个人觉得,在任何项目的执行过程中总有些“关键时刻”,使大家在心理上和情绪上因此凝聚成对 目标的共识,对共同的目标产生共鸣,对事情的优先 级形成清楚的认知。我无意夸口Visual C++的团队有 多伟大或领导多卓越,我的目的是指出在大家一片士 气低落时促成大家态度转变的关键因素。首先,有人察觉到了团队发生问题,并勇敢地 指出来。赫伯以他多年丰富的经验,独特的真知灼见, 看出了我们在胡乱挣扎;虽然我们的做法基本上是正法则1建建立一个共同的目标35确的,但却不够。赫伯没有任何义务帮助我们,但他 仍然不吝直言。赫伯在这件事情上,完全克服了人性的弱点。 一般人很少会主动帮助并未求助的人,尤其是软件开 发这种智能财产的工作。赫伯首先必须对自己的看法 有足够的信心,并且在心理上要冒着很大的风险;然 后,赫伯确信自己的行动对事情有所助益;最后,他 必须不介意是否失去我的友谊。为了帮助整个团队, 他必须冒着得罪我