开发经理的职能2014-03-15 infoq Robert McCabe 译:王丽娟开发经理是个工作压力比较大的职位。作为“中间人”,你需要在管理层、客户、销售 、开发人员等多种角色之间周旋。没人会注意你的工作做得有多好:一切都运转顺利,工作进展得波澜 不惊,所有人都各得所需。但如果事情失败了,不论什么原因,可都是你的错。要成为一名成功的开发经理,秘诀就是管理好期望,第一步就是确保所有人都理解你的职能。你和 你工作相关的人,都要对开发经理的期许达成一致。我看过很多开发经理的招聘信息,但我都不太赞同上面的描述。有一个要求深入了解大量编程语言 和环境,还有一个要求66%的时间进行编程(为什么不直接写三分之二?),还有一些要求有PMO认证, 类似的要求不一而足。我承认开发经理的职能是有点儿模糊不清,但像这样的招聘信息让我觉得发布这 些职位的公司并没有真正思考过开发经理的职能。这种情况对公司和受雇的人来说都后患无穷。作为开发经理,你要承担很多责任,但重要的是发布产品。你的目标是采取所有必要的措施,确保 能把产品交付给客户或市场。要做到这一点,你需要确保开发团队能尽可能高效地工作,而且要确保他 们有明确的目标(无论是短期的还是长期的),扫除阻碍他们工作的一切障碍。从最初的项目范围,到 在客户网站上部署产品,每一步都是你的职责。你可以(而且应该)尽量把事情委派给下属去做,但你 要检查事情是否和你预期的一样,如果不是可要自己投入。项目范围界定作为开发经理,你需要知道如何界定项目的范围。根据你所在组织的情况以及你和外部群组的协作 方式,这可能是你工作的重要组成部分。如果你经常承担、负责第三方的项目,那你应该知道如何对 RFP(需求建议书)作出回应,包括交付物、时间表和预算等。即便你只做内部项目,没有正式的文档 系统,你也应该养成为每个项目写一份项目范围说明书的习惯。另外,如果你从事的是敏捷开发,这些 文档就要随着项目的进展持续维护和更新。“总置顶”项目这是项目范围界定的一部分,但它应该单独说明一下。我听大家谈论过“总置顶”项目 ,这类项目不需要预算和时间表。这可是错误的!如果弄不清楚成本和交付物对这些“总置顶 ”项目有怎样的依赖,那可能会扼杀你的团队,因为这些“总置顶”项目会拖延进度 、消耗其他工作需要的资源。你承担的每个项目至少都要有一个内部成本和一个交付物。你要和其他利 益相关方一起协商你所承担的一切。管理关系记住,你是“中间人”,任何失败都是你的错,即使失败原因是你无法控制的事情。你 需要和参与的人保持良好、开放的关系。你不仅要让你的直接上司了解情况,还要让他的上司和同级别的人知道。此外,你也要让项目的其 他利益相关人了解项目情况。确保他们都在“消息圈里”,能定期获得状态更新,清楚你的 团队正在做什么。谁处理客户关系?这些人可是除了老板之外你最需要知道的人。他们能管理客户期望、处理投诉( 真实的或想象出来的)、与客户保持联系。另一方面,他们能让你苦不堪言,没和你核对就给客户许诺 ,提交不必要的Bug报告,缠着你按不切实际的时间表执行,诸如此类。了解你的团队,他们到公司有多久了?每个人分别有什么优势和劣势?谁能和他们协作得比较好? 他们有多忙?留意他们的生日、纪念日等等……虽然都是些细枝末节的事情,但意义却非 同小可。确保管理人员知道你在做什么,并能看到你的进度,这样他们才会满意。沟通和可视化是关键所在 。我用过各种各样的工具,让管理人员始终能了解状态、发现更多信息。使用程序工具箱、公告板、白 板及任何你能想到的工具,以便他们了解最新信息。如果利益相关者了解你和你的团队遇到的挑战,那他们可能会少提一些不切实际的期望。我说的是 他们可能会少提,而不是绝不会提。有些管理者永远不会明白为什么事情不能“运转”。这 种情况下你可能得重新找个工作了。项目计划只要你不是在大型项目里,一般都不需要单独的项目经理。对小型或中型项目,以及使用敏捷方法 的项目来说,你可以担任项目经理的角色、承担相应的责任。但开发经理并不是经过认证的项目经理。 抛开传统项目管理和敏捷开发之间的争论不谈,开发经理和项目经理的关注点一直都有冲突。作为开发 经理,你的工作是尽可能完成所有的事情,项目经理的工作则是确定什么时候能完成哪些内容。你必须 要在两个出发点之间做好平衡。如果你的项目足够大,需要专业的项目经理或Scrum Master,那就给你 的团队找一个,不要尝试着亲自扮演这个角色。不过,不论是瀑布模型还是敏捷过程,你都应该确保项 目计划是处于活动状态的,要持续更新、跟踪进度。过程控制这是工作里另一个关键的部分。不论你用的是敏捷方法还是瀑布方法,你都要掌控过程,让事情遵 守流程。记住,交付是你的本职所在,任何影响交付的事情都需要你最优先处理。你采用的开发过程是什么?是何种形式的?如果大家说它是“敏捷”过程,那就检查它 是否真的敏捷(我保留着一张很方便查看的敏捷宣言海报,提醒自己遵循敏捷原则)。你的过程如何得 以改进?不存在完美的系统,要不断寻求改进过程的方法。我们已经做了很多工作来应对Bug的Root Cause分析,但更多时候却是过程有缺陷,导致设计不好、代码糟糕,或者误解了客户的需求,以至于 产品不能发布。委托他人是件好事,但你必须跟进、确保事情都完成了。伟大的想法往往因为没人检查处理结果而 在执行中失败。我接管过好几个项目,接手前都是各个方面都不错,唯独执行不好导致一塌糊涂。最后,你需要向各个利益相关人报告基于确切度量数据的状态。所以要用对阅读报告的人来说有意 义的方式衡量、总结过程。根据你组织的情况确定报告频率(每天、每周或根据需要)。要明确报告的 频率、格式和内容。注意阅读报告的人和他们期望的详细程度,并达到这一目标。所有这些会让你的报 告清晰、明确、易读。这会减少误解报告的人,但并不意味着能消除误读。读报告的人有很多事情要做 ,可能只会略读一下,或者按他们的方式理解,所以你要准备好澄清和解释,不过听起来可不能是在为 自己辩解。技术我多次在工作职位上看见过这个要求。有些公司要求开发经理深入掌握特定领域的知识。作为开发 经理,你并不是技术专家!把这个要求留给高级开发人员和首席开发人员吧。你应该熟悉现有的技术, 了解新的和即将推出的技术,但不要让自己成为专家,这会耗费大量时间、从其他任务上转移你的注意 力。你要非常了解团队正在使用的工具,看团队成员是否在有效地使用它们,还要知道团队何时会在知 识面上出现缺口,但你不应该是“去填补”的那个人。你必须放手,委托团队的高级开发人 员去掌握空缺的知识。开发这也是一个你需要熟悉,但不必是专家的领域。伟大的程序员能写出最好的代码,不过通常会是个 糟糕的管理者。你要能区分好代码和坏代码,还应该相信你的团队负责人。你可以在关键时刻亲自投入 、接手一些开发任务,但别忘了要有大局观、要聚焦于项目的完成。可不能好几天都埋头编程,忘了自 己的工作。