第五章 程序开发团队
团队的组建
一支程序开发团队之所以成立,是为了承担并完成某项由任何个人都无法独自完成的任务。这种要求,不仅仅与待完成工作的技术要求相关,同时也与可以找到来参加该项工作的人员的能力以及允许完成任务的时间长短有关。
个人能力与日程进度二者之间存在着互补的对应关系。在开发日程与工作结构之间同样存在着一种重要的关系,许多程序开发任务之所以没有在计划的日程内按时完成,其原因都可以追溯到最初的日程规划以及开发路线上,最初的这些计划总是一厢情愿地把开发过程中的所有条件都设想为最好。但是如果企图对各种可能出现的问题都在事先面面俱到地做好准备,我们就不得不需要在团队中设置很多附属人员。另外,如果整个任务必须通过划分再分配给一批人,那么需要进行的协调工作量也会增加。
程序开发团队的规模和组成似乎都符合这样一条基本规律---如果希望通过最小的代价获得最佳的开发效果,你必须找到尽可能出色的程序员,并且给他们以尽可能长的时间。
在程序开发的过程中,开发团队中各成员的地位,通常在很大程度上取决于其他人对其个人能力的了解程度。在被分配各某项特定工作之后,某个成员也可能相应地获得或者丧失一些地位,负责何种开发工作,将决定不同成员的身份地位。为了组织好一个团队,我们必须在推行过程中,在各成员的敏感性格之间如履薄冰般周旋。
目标的设定和认同
社会心理学家们已经证实:只要有一名成员与集体的目标不一致,那么该集体的整体水平就将受到影响。这种影响不仅来自于这个成员本身,而且也来自于集体内部其他成员的绩效下降。
为了实现在集体目标上真正的意见一致,最好的办法莫过于让开发组自己来确定其目标。如果开发团队的任务不是开发一个特定的系统,而是为其他程序开发组提供服务和支持,那么这种目标不明确的问题就会更加突出,必须经常提醒他们注意自己的贡献,否则,他们的工作就会越来越具体,而且没有什么产出。
当然,最好的情况时,一支开发团队只有一项明确定义的任务。然而这个世界上的事情很少会这样简单。即使其任务只是完成一个程序,也有可能在诸如速度、空间或者时间进度等方面存在冲突,人们对这些方面的重视程度可能不同。如果没有明确地告诉每个成员应该对各个方面强调到何种地步,那么他们各自的工作目标就很有可能相互矛盾,其效果将互相抵消。
如果不同成员对团队的目标理解不一致,而且这些不同观点之间的差异几乎无法察觉时,这些分歧的消除就显得极为迫切。如果在团队中持续出现这种争论,那么这就是一个确定的信号,它显示出团队内部存在着更深层次的冲突--比如可能是为了争夺团队的领导权--所以绝对不能因为其貌似琐碎就掉以轻心。
团队的领导者及其领导方法
程序员们一般会更加注重创造性的工作以及专业能力,在他们所从事的工作范围内,他们会对那些被自己认定为很出色的人更加器重。与那些世界级的口若悬河的推销商们相比,作为一名语调温和的程序开发奇才,将可以更加轻松地对程序员们进行领导。
民主化集体得以运转的一个重要前提,并不在于所有成员掌握同等的领导权力,而是在团队内部真实的集体生活之上(而不是来自外界的强加),确定领导权力的分配。一支真正的民主化团队,总是特别能适应环境的改变,所以面对难以预料的困难,这种团队很容易成为一个值得信赖的开发团队。
目光短浅、难以依靠的团队领导者可能会认为,博得管理层欢心的最好方法,就是无论他们要求什么都满口答应。但,管理层需要的不只是诺言,更重要的是恪守诺言。作为一名被指派的团队领导者,如果他的手下无法完成某项任务,但他的上级却强迫他接受这项任务,那么他所能采取的最好方法,就是坚决予以抵制。如果他本身是位优秀的程序员,那么他在这场斗争中就拥有双重的砝码--因为他对自己的判断更加充满自信,同时他也很清楚,即使他丢失了这份领导者的职位,也不至于沦落到讨饭的地步。只有随时准备下台的领导者,才有可能获得成功。
团队中可能出现的危机
把团队的工作划分为两种类型分别对待:以完成团队任务为直接目标的工作,以及在面临危机时以维护团队的有效运行为直接目标的工作。
在开发团队中,成员们会倾向于推选两名互补的领导者:一位是任务权威,另一位是协调工作的权威。
民主式团队更有能力经受住成员离开的影响,但这样的团队通常很难接受新成员。从外界看,一个民主式的团队的外表显得更加冷漠和不友好,而一个集权式的团队则会对外来的加入者表现出异乎寻常的热情和友好--这似乎是一个悖论。
团队中如果出现某个成员没有能力胜任其承担的那部分工作,民主式团队最可能的办法就是逐渐的该成员不能胜任的工作转移给其他成员。如果某个成员能力很强,但是却与周围的人合不来,那么这个问题就会比某个成员能力极差的情况更为严重。
团队的组建
一支程序开发团队之所以成立,是为了承担并完成某项由任何个人都无法独自完成的任务。这种要求,不仅仅与待完成工作的技术要求相关,同时也与可以找到来参加该项工作的人员的能力以及允许完成任务的时间长短有关。
个人能力与日程进度二者之间存在着互补的对应关系。在开发日程与工作结构之间同样存在着一种重要的关系,许多程序开发任务之所以没有在计划的日程内按时完成,其原因都可以追溯到最初的日程规划以及开发路线上,最初的这些计划总是一厢情愿地把开发过程中的所有条件都设想为最好。但是如果企图对各种可能出现的问题都在事先面面俱到地做好准备,我们就不得不需要在团队中设置很多附属人员。另外,如果整个任务必须通过划分再分配给一批人,那么需要进行的协调工作量也会增加。
程序开发团队的规模和组成似乎都符合这样一条基本规律---如果希望通过最小的代价获得最佳的开发效果,你必须找到尽可能出色的程序员,并且给他们以尽可能长的时间。
在程序开发的过程中,开发团队中各成员的地位,通常在很大程度上取决于其他人对其个人能力的了解程度。在被分配各某项特定工作之后,某个成员也可能相应地获得或者丧失一些地位,负责何种开发工作,将决定不同成员的身份地位。为了组织好一个团队,我们必须在推行过程中,在各成员的敏感性格之间如履薄冰般周旋。
目标的设定和认同
社会心理学家们已经证实:只要有一名成员与集体的目标不一致,那么该集体的整体水平就将受到影响。这种影响不仅来自于这个成员本身,而且也来自于集体内部其他成员的绩效下降。
为了实现在集体目标上真正的意见一致,最好的办法莫过于让开发组自己来确定其目标。如果开发团队的任务不是开发一个特定的系统,而是为其他程序开发组提供服务和支持,那么这种目标不明确的问题就会更加突出,必须经常提醒他们注意自己的贡献,否则,他们的工作就会越来越具体,而且没有什么产出。
当然,最好的情况时,一支开发团队只有一项明确定义的任务。然而这个世界上的事情很少会这样简单。即使其任务只是完成一个程序,也有可能在诸如速度、空间或者时间进度等方面存在冲突,人们对这些方面的重视程度可能不同。如果没有明确地告诉每个成员应该对各个方面强调到何种地步,那么他们各自的工作目标就很有可能相互矛盾,其效果将互相抵消。
如果不同成员对团队的目标理解不一致,而且这些不同观点之间的差异几乎无法察觉时,这些分歧的消除就显得极为迫切。如果在团队中持续出现这种争论,那么这就是一个确定的信号,它显示出团队内部存在着更深层次的冲突--比如可能是为了争夺团队的领导权--所以绝对不能因为其貌似琐碎就掉以轻心。
团队的领导者及其领导方法
程序员们一般会更加注重创造性的工作以及专业能力,在他们所从事的工作范围内,他们会对那些被自己认定为很出色的人更加器重。与那些世界级的口若悬河的推销商们相比,作为一名语调温和的程序开发奇才,将可以更加轻松地对程序员们进行领导。
民主化集体得以运转的一个重要前提,并不在于所有成员掌握同等的领导权力,而是在团队内部真实的集体生活之上(而不是来自外界的强加),确定领导权力的分配。一支真正的民主化团队,总是特别能适应环境的改变,所以面对难以预料的困难,这种团队很容易成为一个值得信赖的开发团队。
目光短浅、难以依靠的团队领导者可能会认为,博得管理层欢心的最好方法,就是无论他们要求什么都满口答应。但,管理层需要的不只是诺言,更重要的是恪守诺言。作为一名被指派的团队领导者,如果他的手下无法完成某项任务,但他的上级却强迫他接受这项任务,那么他所能采取的最好方法,就是坚决予以抵制。如果他本身是位优秀的程序员,那么他在这场斗争中就拥有双重的砝码--因为他对自己的判断更加充满自信,同时他也很清楚,即使他丢失了这份领导者的职位,也不至于沦落到讨饭的地步。只有随时准备下台的领导者,才有可能获得成功。
团队中可能出现的危机
把团队的工作划分为两种类型分别对待:以完成团队任务为直接目标的工作,以及在面临危机时以维护团队的有效运行为直接目标的工作。
在开发团队中,成员们会倾向于推选两名互补的领导者:一位是任务权威,另一位是协调工作的权威。
民主式团队更有能力经受住成员离开的影响,但这样的团队通常很难接受新成员。从外界看,一个民主式的团队的外表显得更加冷漠和不友好,而一个集权式的团队则会对外来的加入者表现出异乎寻常的热情和友好--这似乎是一个悖论。
团队中如果出现某个成员没有能力胜任其承担的那部分工作,民主式团队最可能的办法就是逐渐的该成员不能胜任的工作转移给其他成员。如果某个成员能力很强,但是却与周围的人合不来,那么这个问题就会比某个成员能力极差的情况更为严重。