论证,也有了一定的投资和时间预算,产品立项了。但这只是一个良好的开端,因为下面的任何一个过程的失败,都有可能导致全盘皆输。
二、团队构建
产品立项后,就要开始组建研发团队了。软件开发是一个既要高度协作、又有独立创造的智力活动。所以人的因素是关系到产品开发能否成功的一个重要方面。应该说产品能否研发成功,研发团队的合理构建是关键性的。一个公司的领导层或许没有多少软件研发的经验,但必须要保证能构建一个合理的研发团队。就点很容易理解,就是让合适的人去做合适的事。不过反过来说,如果领导层没有软件研发的经验,那也很难构建一个合理的团队。
那怎样构建一个好的团队呢?这个问题没有一个非常普遍的答案。各个产品的规模、技术难度都不相同,答案也不一样。我们时常看到的情况是,公司会任命一个研发经理或叫PM,负责整个研发过程。于是问题就出来了。这个PM是负责管理工作还是技术工作,或者两个都一起负责?怎样规定PM的职责权限?如果没有对这个问题的明确答案,那危险就随之而来的。就来我的经历过的来说吧。在离开上一家公司后,我来到另一家软件公司做网上教育平台的产品研发。前期阶段可以说没有一个专职的项目经理,管理工作基本上由一个做技术的Team Leader(架构师)负责,虽说也有不少问题,但大家基本上还是团结在一起安步就班的工作。后来公司为我们团队招来一个PM,此君是海龟派,在国外、学习工作好几年,也有技术背景。我们对他也充满期待。没想到过了不久,他居然把我们的Team Leader给开了,找了一些大家都不认可的理由。并自任技术负责人,对我们的大部分的技术方案都持否定态度,并严厉要求我们服从他的技术领导。如果他精通技术也就罢了,关键是他的技术一点也不怎样,还自我感觉良好。那最终的结果可想而知了。产品基本上失败,技术人员纷纷跳槽,最后,这个 PM也只得走人了。
这样的故事每天都在发生,大量的技术人员在抱怨领导不懂技术,瞎指挥。在我的案例中,可以明显的感觉到,公司对这个PM没有明确的职责划分,或者这个PM没有摆正自己的位置。这个PM应该做做管理工作,而不是负责技术。做软件开发的都知道,一个团队中一般都有一个技术领导,或者叫架构师(Architect)。那他和PM怎样划分职责?如果要开发的产品规模比较大,比如人员数达到10人以上。这时面临的管理、组织工作比较多,公司应该考虑起用一位专职的PM来负责这方面的工作。他的主要工作包括人员招聘,提供开发团队所需资源,制定计划,监督实施等,同时,他应该是一个能够鼓动士气,懂得调动员工积极性的亲善的领导人,对作为一个PM的职位来说,个人的素质和性格应该具有更决定性的意义,他主要工作是为研发团队提供一切必要的服务,监督的作用应该包含其中。在这样的团队里,必须存在一位架构师来全面负责技术工作,他有权独立决定技术方案,他与PM的关系是团结与合作,而不是领导和被领导,架构师应该得到PM应有的尊重,而这点在中国很难做到。很多PM干涉架构师的技术工作,甚至起而代之,造成团队之间的混乱。上面的案例正是说明了这一点。架构师一般都是有一点完美主义,他总是希望看到产品做得更加出色,但这是否让产品开发走向不可控制的地步?事实上,架构师要对现实情况作出妥协(如时间、资金的限制),也就是对PM作出妥协。如果说PM代表时间、资源的现实主义,那么架构师就代表着完美的理想主义,他们就是在不断的合作、妥协中共同推动产品的发展。
对于开发的产品规模较小,也可以完全不设置专职的PM。设置一位Team Leader,他既负责整个技术、也同时负责团队的管理工作。如果认为负担较重的话,