微软经典团队角色
微软的产品组典型的人员角色有几类(参见图2)。一类是产品规划(Product Planner)和产品管理(Product Management)。产品规划的使命是通过研究,向产品组提供诸如用户需求、市场导向、竞争对手和产品方向的分析,确保产品满足客户的需要;产品管理的使命是确定获利市场,同客户沟通产品的价值。这两个角色相当于对产品的规划以及产品的销售。一类是程序经理(或叫程序管理:Program Management),他负责整个产品开发过程的协调,是微软各产品组中非常重要的一个角色。
开发人员(Development)、测试人员(Testing)、可用性测试员(Usability Testing)之类,在微软也是一些比较特殊的角色。此外还有:Beta测试人员(Betas),如果这个产品需要汉化的话;本地化项目管理(Localization Project Manager);用户教育(User Education);最后是售后支持(Product Support),等等。
尽管微软的产品组角色定位非常清晰,但这些产品组多为横向组织,由多个部门的成员组成。比如产品管理属于微软的销售机构,而售后支持属于售后服务机构等等。微软不同机构和部门之间的协作性极强,这是保证微软按时完成高质量产品的重要原因之一。
在微软的产品开发周期中,每一个角色在不同的阶段有不同的侧重。在规划阶段,作用比较大的是产品规划和程序经理。开发阶段显然是开发人员的作用比较大,测试人员则在第三个阶段“QA阶段”很重要,但是程序经理在这两个阶段的作用都很重要。
产品规划人员对产品影响最大的作用体现在规划阶段。这个阶段的产品规划需做用户问卷调查,用各种各样的研究手段来试图了解用户的需求,并创建目标描述。这个阶段产品管理也收集用户需求,但他主要调查的是市场走向,他关心的是如何与客户沟通产品的价值。产品规划在整个产品开发周期中总是充当一个用户代言人的角色。产品管理在第一阶段和最后阶段发挥作用,产品管理必须设法了解新产品的获利市场所在,并且很好地同客户沟通产品的价值。
相比于产品规划和产品管理,程序经理与程序经理之后的角色与产品具体开发过程更直接相关。
特殊角色——程序经理
在微软的产品组中,程序经理的角色很特殊,他是惟一在产品开发周期的前三个阶段都显得非常重要的角色。
程序经理在规划阶段要贯彻和推进目标描述,书写功能/特性规格说明,创建主要的进度表。规格说明是基于产品规划所产生的目标描述来具体定义特性的实现步骤,目标描述文档是基于大量用户的调查报告和各种研究方法得出的用户的需求,定位产品的目标。但这只是给出了一个大方向,程序经理必须把这个大方向细化成若干个具体的特性,这些特性不仅要满足目标功能的要求,而且又必须是程序开发人员能够理解的语言。比如 Word某一版要支持HTML,产品规划只定目标,但程序经理就要把这个目标细化成几个具体的特性。
在第二个阶段,程序经理要管理整个开发工作的进度,检查开发人员的实现是否与规格说明相吻合,而且要使团队目标集中、齐心协力。如果在开发过程中有什么特性的变化,或者某些功能在设计时很好但在实际开发中出现问题,程序经理便要负责其更新规格说明,还要与产品规划、测试人员沟通项目的进展状态,协调开发过程中出现的问题。代码完成里程碑达到之后即开始大规模的测试,程序经理那时的作用就更大了,他要制定和控制每个Bug的优先级,做取舍决定,发送Beta版并收集用户反馈,确保产品按时达到发送候选(RC)。
一句话,程序经理的中心任务是保证软件高质量并按时出品。由于总是要在品质与进度上找到平衡点,程序经理必须精于“引导、驱策、鼓励、要求”团队做出最好的软件和表现出最好的工作效能。
在微软不同的团队里,程序经理所做的事情也有一定的差别。有偏技术性的设计功能的程序经理,他们是团队中的关键人物;有一种程序经理被叫做Release Program Manager,他的主要任务是控制开发流程;还有的程序经理会做一些客户需求调查的工作,定位产品方向。无论如何,程序经理的基本素质首先是要有很好的沟通技巧,具有设身处地为他人着想的本领;其次考虑问题周全,能处理复杂的情况;此外,程序经理要对开发产品所使用的技术很熟悉,对用户需求的理解力也要非常好。比如在具体的开发过程中,测试人员发现Bug越多越好,但开发人员却希望Bug越少越好,程序经理要善于协调二者的矛盾;在产品的开发过程中通常会出现人员突然流动的现象,或者硬件环境出了问题,或者外边竞争对手出现变化,程序经理对这些要反应非常机敏,有能力做出对公司、产品和客户影响最小的果断的取舍和决定。
微软的开发人员无疑是每一个产品组中非常重要的角色。一个头衔是软件设计工程师(SDE——Soft Design Engineer)的开发人员的级别有可能比某一个经理要高很多。在微软,开发人员根据他本身知识和能力的不同分为不同的级别,优异的开发人员负责整个软件的结构设计,中间有负责某一功能类的结构设计师,最底层的开发人员只完成规定的模块实现。好的结构设计对产品的稳定性、可扩充性非常重要,特别是对一个由多人参与的项目而言更是如此。在产品组中,最厉害的开发人员是整个产品结构的设计师。应该说,微软每一个产品中都有几个核心开发人员来控制整个产品的结构,其他开发人员则在他的领导之下共同完成开发工作。