软件开发项目经理的起源

开发 项目管理
项目经理这个职位是从哪里来的?他为什么会逐渐脱离代码编写的工作?这里面跟微软还有点关系。

  在一个软件团队里, 不同的人有不同的投入, 我们在 猪,鸡和鹦鹉的故事里已经说明了. 不同的人还要在团队中担负不同的任务, 我们也要讲一下.

  开发人员 (大部分内容在: 现代软件工程讲义 2 工程师的能力评估和发展)

  项目经理 ( 这篇博客 )

  测试人员 ( link)

  1. 微软PM 的来历

  大部分公司的项目经理叫 Project Manager, 微软的经理叫 Program Manager, 这有什么本质的区别么?

  微软曾经也是一个创业公司, 两个创始人都是 dev, 招聘的新成员也大多是像他们一样的开发人员, 这其中就有一个叫 Charles Simonyi的超级程序员 (当然还有像 Steve Ballmer 那样的超级销售人员, 这里按下不表)。

[[51631]]

  1974 年, Charles Simonyi 在Xerox PARC 开发了 WYSIWYG (所见即所得) 的字处理软件 Bravo, 成为 PARC 的 Alto 个人电脑的重要应用软件。

  (作为时间的参照:

  同一年, Steve Jobs 从印度回来, 加入Atari 公司打工, 因为其他员工不能忍受他的傲慢态度和卫生习惯, 他只好上夜班。

  同一年, Bill Gate 在哈佛大学读 2 年级, 他第二年看到了个人电脑的曙光 – MITS Altair 8800, 于是退学创立了 Microsoft.

  )

  1981 年, Charles 加入了微软公司, 领导 Word 和其他办公软件的开发。 很多开发人员聚集在一起, 怎么工作呢? 如果大伙做的是搬砖的体力劳动 (我很喜欢用搬砖的例子), 那么在一定限度内, 人员的增长和项目复杂度的增长是线性的关系; 程序开发就有些不同, Charles 发现项目管理的复杂度似乎是和人员数量的平方成正比。 一个团队里有 4 个成员, 就有 6 种双向依赖和交流的途径, 然后增加一位新成员, 就要增加 4条新的双向依赖交流的途径。 对于 N 个成员的团队来说交流的途径总数是 n * (n-1) /2, 这种 N 平方的增长是不可持续的。

[[51632]]

  怎么办? Charles 想到了一个办法 - 他提议把程序员分成 Master Programmer 和 Slave Programmer, MP 和其他成员交流, 了解需求, MP 只写抽象的伪代码, 或者对功能的描述; SP 根据MP 的文档, 实现具体的功能。 SP 只用和 MP 交流。 这样不就大大减少了交流的成本么?

  这个想法在理论上是好的, 但是在实际上, 没有人想做 Slave Programmer, 刚加入团队的成员问 - 为什么我们不能当 Master Programmer? 这次改革***不了了之。

  但是, 随着软件复杂度的提高, 用户需求的多样化, 市场竞争的日益激烈, 光有程序员和销售人员是不够的。 我们需要专门人才来做下面的事:

  怎么让软件变得可用 (usable), 有用 (useful)

  销售人员把顾客的需求直接告诉开发人员, 但是开发人员往往听不懂。 我们需要专人来把市场/销售人员那一套 MBA 的套路翻译成程序员能懂的功能说明 (spec)

  一个产品团队要做很多事, 这些事往往是程序员不愿意花时间的:

  和客户交谈, 组织用户调查, 发现用户需求

  了解和比较竞争对手的产品

  怎么改进团队的流程

  谁都不愿意做, 谁都没有能力做好, 大家宁愿盯着屏幕写代码。 怎么办呢? 这时候有另一个聪明人出现了, 一个叫 Jabe Blumenthal 的程序员提出了 Program Manager (PM) 的头衔, 并成为了微软***个 PM (1984年). PM 做什么呢?

  2. PM做开发和测试之外的所有事情

  Program Manager 和一些公司的 Project Manager 的区别:

  

Project Manager Program Manager

是团队的行政领导, 带领大家在项目中工作。

和大家平等工作, 推动团队完成软件的功能。

通常是团队和外界打交道的唯一代表 一个团队可以有很多PM
对项目的功能有***的决定权 和其他团队成员一起形成决议
管事也管人 管事不管人
不一定做具体工作 一定做具体工作

 

  在别的团队中, 也有产品经理的职位, 例如这个博客 (和书) http://iamsujie.com.

  问: 目前微软公司有哪几类的PM?

  答: 有做功能设计的PM; 有些需要很深的 Computer Science 的专业知识 (如 Visual Studio, SQL server, Windows Server, Bing Search 等团队的PM ), 有些需要对商业和客户很强的了解能力 (如 Office 应用软件的PM ), 有些需要广泛的经验和知识面, 商业拓展能力 (如 MSN 部门的 PM); 有些是驱动流程的PM, 例如推动几百人的团队完成一个版本的开发, 又如保证 WP7 在几十个不同硬件上能发布; 也有专门深入某一领域的 PM (如 localization/globalization); 还有和研究人员合作, 做技术转化的 PM。

  问: 既然PM 这么厉害, 为什么不让他们领导开发人员和测试人员, 这样 PM 工作起来不就是更有利了么?

  答: 首先, 我们认为好的产品设计是在平等讨论 (甚至争论) 的基础上产生和完善的, 如果讨论的一方同时又是另一方的老板, 则无法进行平等和无拘束的讨论。

  其次, PM 的产品是 spec (规格说明书), PM 要凭自己的能力, 把用户的需求展现成 dev/test 能够了解, 能够执行的语言, 从而赢得同伴的信任和尊敬。 如果PM 同时又是其他人的老板, 则不必写太好的 spec, 用命令即可说服别人。 再次, PM 不一定是很好的行政经理, 硬把管理不同专业的 dev/test 的任务加到PM 头上, 反而会坏事。 关于这个问题, 这里也有一篇讨论.

  问: PM ***的, 最独特的贡献是什么?

  答: 保持团队的平衡。

  一个软件产品几乎做不到同时又多又快又省。 在别的领域也类似, 中国在大跃进期间提出了 多快好省的要求。 ***只得到一个 “多” - 人多。 (参见 软件工程的估计)

  大部分优秀的团队可以做到两个:

  多, 快, 但是不省

  多, 省, 但是不快

  快, 省, 但是不多

  PM 要带领团队选择哪两个是最重要的, 哪一个是可以牺牲的。

  还有许多不那么优秀的团队也许勉强可以做到一个:

  多, 但是不快, 不省

  省, 但是不多, 不快

  快, 但是不省, 不多

  当然还有一些团队一个目标也达不到, 中途作鸟兽散了。

  问: 我们团队有几个程序牛人, 参加过 ACM 比赛什么的, 他们写的程序都不用测试, 为什么还要 PM? 如果PM 也来开发, 是不是项目进展更快?

  答: 程序 和 软件有区别, 请看: http://www.cnblogs.com/xinz/archive/2011/05/22/2053838.html

  其次,在下面的图中, 团队有很多划船的牛人, 也有一个拿着话筒的舵手. 如果这个舵手也开始划船, 后果会怎么样?

[[51633]]

  可能小船的速率会快一些, 但是小船的方向, 稳定性会出问题。 你愿意船很快, 但不稳, 而且***到了一个以前没计划的地方?

  问: PM 文化的盛行有副作用么?

  答: 任何方法或文化都有优点和缺点, 由于大部分决定都是经过平等的讨论协商折中的到的, 一个后果是 “design by committee”, 一些产品不能很快跟上市场变化, 在需要个人特色的方面, 如设计/UI, “committee”设计出来的东西大多中规中矩, 但是很多方面了无新意。

  3. PM 的能力要求和任务

  成为一个团队的PM, 需要哪些能力呢?

  学习能力:在一个新领域中能很快上手

  观察理解能力:能理解用户, 站在用户的角度上考虑问题, 观察发现用户不善于表达的需求, 观察团队成员的言外之意, 老板/客户/利益相关人的弦外之音.

  分析管理能力:每天项目中发生的事情千头万绪, 能够分析出重点, 找到优先级, 做决定…

  一个项目和个人一样, 每天都会碰到各种问题:

  重要而紧急的 //网站崩了!

  //程序员二柱突然说他要离职!

  重要而不紧急的 //按照流量和内容的发展趋势, 三个月后, 目前的架构似乎撑不住, 但是现在还凑合…

  //程序员们都不写文档, 他们三个月前说等忙过之后会写的, 但是…

  不重要而紧急的 //老板的老板问到了项目的进度! 要写一个PPT,请若干人征求意见

  不重要且不紧急的 //…

  PM 如何处理这些事情呢?

  交流能力, 处理冲突的能力:其他角色碰到冲突一般会来找 PM. PM 也要鼓励团队成员保持斗志。

  一定的专业能力: 写代码, 玩转Excel, PPT, Visio, 甘特图, 会PS, 有文字功力, 能写有人读的博客, 总得有几招绝活吧!

  在一个项目中, PM 的具体任务是什么呢?

  带领团队形成团队的目标/远景, 把抽象的目标转化为可执行的, 具体的, 优美的设计。

  管理软件的具体功能的生命周期 (需求/设想/设计/实现/测试/修改/发布/升级/迁移/淘汰)。

  创建并维护软件的功能说明书 (specification), 让它成为开发/测试的及时准确的指导, 而不是障碍。

  代表客户和用户的利益, 主动收集用户反馈, 预期用户新的需求。 协调并决定各种需求的优先级。

  分析带领其他成员形成对缺陷/变更需求的一致意见, 并确保实施。

  带领其他成员确保项目保持 功能/时间/资源 的合理平衡, 跟踪项目进展, 确保团队发布让客户满意的软件。

  收集团队项目管理和软件工程的各种数据, 客观地分析项目实施过程中的优缺点, 推动项目成员持续改进, 从而提振士气。

  成功的PM 如果得到团队成员的支持, 会是什么样?

  成为项目流程的主人 - 驱动流程, 会议, scrum, 进度

  代表团队, 向上级/伙伴团队/客户/市场报告项目进展

  不用自己写一行代码,也同样可以积极地影响项目和产品

  PM 如果得不到到团队成员的支持, 会是什么样?

  在各种会议或流程中浪费大家的时间, 发一些大家不读的 “Status Mail”.

  不能凝聚团队, 形成共识

  对团队的状态不了解, 也不能有效和准确地向有关方面报告团队的情况, 获得支持

  对项目和产品造成负面的影响。

  4. PM 们的故事

  讲了这么多条条框框, 我们还是讲几个故事吧:

  A) 是不是所有的好功能都是由PM 主导, 一步一步根据用户需求,按照用户场景设计,然后可用性测试等等步骤之后得来的?

  功能本天成,妙手偶得之——一个来自微软的故事。[注3]

  约摸在1985年,微软的一个叫Steve Hazelrig的工程师正在写Mac Excel 版本的打印功能,那时候激光打印机很贵,而且离办公室也不近。他懒得经常跑到打印机那儿取打印纸,检查打印效果,就写了一个小程序,把要输出到打印机的图像显示在屏幕上,还有一个放大镜功能可以把局部放大以检查每个像素的位置及效果。这时一个PM路过看到了这个小工具,说,这么酷的东西,为啥不做成一个功能呢?

  所以后来微软的编辑软件都有“打印预览”这一功能。然而,用户们并没有正式地要求这一功能。

  B) PM 怎么说服聪明的同事

  这个故事在 [注4, 注5] 中都提到了. 在Macintosh 研发的过程中, 由于计算能力的限制, 计算机的图形显示非常缓慢. 一位聪明的程序员展示了他的新算法, 能很快地画圆形和椭圆. 当他得意地展示给 Steve Jobs 看的时候, (作为一个不懂编程技术的 PM,Steve 应该表示仰慕才对…) Steve 看了之后, 反问 - 你能继续改进, 让圆角的矩形框显示速度加快么? 程序员说: 这个太难了, 也没有必要. 椭圆不是挺好的么? Stevel 为了说服同事, 建议两人到外面散步, 然后指出现实世界中的各种告示牌都是用 圆角的矩形框 来实现,走了一圈, 同事就被说服了。 过了几天, 圆角的矩形框也可以很快速地在屏幕上显示了。

  C) PM 的分析能力和韧性

  能把市场, 我方的优势和劣势, 创新的机会讲得头头是道, 也是一种能力。 在软件工程课上我们讲过 NABC 方法。 乔布斯在 NeXT 公司时那样也做过很有说服力的分析:

  注意, 这么厉害的 PM, 分析的这么透彻, 但是 NeXT 的产品还是失败了.

  但是乔布斯没有气馁, 又投入了另一个公司的运作 – Pixar.

  你有这些能力么?

原文链接:http://www.cnblogs.com/xinz/archive/2011/11/07/2239150.html

【编辑推荐】

  1. 推荐5个免费项目管理工具
  2. 软件项目管理的十大定律
  3. 软件开发团队建设思路谈
  4. 浅析IPD模式下的敏捷软件项目管理
  5. 老生常谈IT项目管理的六种错误思维
责任编辑:彭凡 来源: 博客园
相关推荐

2011-09-01 09:57:54

对日软件开发

2022-02-18 09:00:00

软件开发周期时间项目经理

2011-05-16 10:12:02

项目经理

2011-08-04 09:01:44

项目经理

2011-04-07 11:44:02

软件质量项目

2013-10-12 10:35:53

2009-04-01 09:33:00

问题项目经理项目管理

2011-05-17 08:58:29

软件项目经理

2011-05-04 09:23:11

软件项目经理

2017-09-18 13:38:34

IT项目经理互联网

2011-06-03 09:47:04

软件项目经理

2012-08-15 10:53:33

产品项目

2012-09-26 09:35:13

程序员项目项目经理

2011-05-31 09:54:18

项目经理

2011-05-12 09:19:13

项目经理

2011-11-23 09:36:16

项目经理

2023-07-10 15:51:03

项目经理软件性能

2015-09-24 16:09:45

软件开发项目原因

2022-04-11 09:32:14

项目经理离岸团队CIO

2011-05-19 08:57:41

软件开发项目
点赞
收藏

51CTO技术栈公众号