代码整洁之道
简介:
本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。
本书适合所有程序员阅读,也可供所有想成为具备职业素养的职场人士参考。
第十三章 团队与项目
小项目该如何实施?如何给程序员分派?大项目又该如何实施?
13.1 团队开发仅仅是简单的混合吗?
这几年来,我为许多银行和保险公司做过咨询。这些公司看起来有一个共同点,那就是它们都是以一种古怪的方式来分派项目的。
银行的项目通常相对比较小,只需一到两名程序员工作几周即可。
这样的项目通常会配备一名项目经理,但他同时还会管理其他若干项目;会配备一名业务分析师,但他同时也为其他项目服务;也会配备几名程序员,他们同样同时参与其他项目的工作;还会配备一到两名测试人员,他们也同时测试其他项目。看到其中的模式了吧?这些项目太小,无法把一个人的全部时间完全分配其中。每个人在项目上的投入都是以50%甚至25%的比例来计算的。
但是,不要忘了:事实上并没有半个人的这种说法。
让一个程序员把一半的时间投入在项目A中,把其余时间投入在项目B中,这并不可行,尤其是当这两个项目的项目经理不同、业务分析师不同、程序员不同、测试人员不同时,更不可行。这种丑陋的组合方式能称为团队吗?这不是团队,只是从榨汁机中榨出的混合物而已。
有凝聚力的团队:
形成团队是需要时间的。团队成员需要首先建立关系。他们需要学习如何互相协作,需要了解彼此的癖好、强项、弱项,最终,才能凝聚成团队。
有凝聚力的团队确实有些神奇之处。他们能够一起创造奇迹。他们互为知己,能够替对方着想,互相支持,激励对方拿出自己最好的表现。他们攻无不克。
团队的人员组成及其比例:
- 有凝聚力的团队通常有大约12名成员。最多的可以有20人,最少可以只有3个人,但是12个人是最好的。这个团队应该配有程序员、测试人员和分析师,同时还要有一名项目经理。
- 程序员算一组,测试人员和分析师算一组,两组人数比例没有固定限制,但2∶1是比较好的组合。
- 由12个人组成的理想团队,人员配备情况是这样的:7名程序员、2名测试人员、2名分析师和1名项目经理。
团队组成人员的分工与职责:
分析师与测试人员:
- 分析师开发需求,为需求编写自动化验收测试。测试人员也会编写自动化验收测试,但是他们两者的视角是不同的。两者虽然都写需求,但是分析师关注业务价值,而测试人员关注正确性。
- 分析师编写成功路径场景;测试人员要关心的是那些可能出错的地方,他们编写的是失败场景和边界场景。
项目经理:项目经理跟踪项目团队的进度,确保团队成员理解项目时间表和优先级。
监督人员:其中有一名团队成员可能会拿出部分时间充任团队教练或Master[2]的角色,负责确保项目进展,监督成员遵守纪律。他们担负的职责是,如果团队因为项目压力太大选择半途而废,他们应当充当中流砥柱。
团队的发酵期:
- 成员克服个体差异性,默契配合,彼此信任,形成真正有凝聚力的团队,是需要一些时间的,可能需要6个月,甚至1年。
- 凝聚力一旦真正形成,就会产生一种神奇的魔力。团队的成员会一起做计划,一起解决问题,一起面对问题,一起搞定一切。
- 团队已经有了凝聚力,但却因为项目结束了就解散这样的团队,则是极为荒谬的。最好的做法是不拆散团队,让他们继续合作,只要不断地把新项目分派给他们就行。
团队和项目,何者为先?
专业的开发组织会把项目分配给已形成凝聚力的团队,而不会围绕着项目来组建团队。一个有凝聚力的团队能够同时承接多个项目,根据成员各自的意愿、技能和能力来分配工作,会顺利完成项目。
如何管理有凝聚力的团队?
管理团队的项目速度:
每个团队都有自己的速度。团队的速度,即是指在一定时间段内团队能够完成的工作量。有些团队使用每周点数来衡量自己的速度,其中“点数”是一种关于复杂度的单位。他们对每个工作项目的特性进行分解,使用点数来估算。然后以每周能完成的点数来衡量速度。管理人员可以对分配给团队的项目设置一个目标值。
项目承包人的困境:
作为项目承包人,如果有一个专属团队完全投入在其项目上,他能够清楚计算出团队的投入是多少。他们明白,组建和解散团队代价高昂,因此公司也不会因为短期原因就调走团队。
如果项目分配给一个有凝聚力的团队,并且如果那些团队同时在做多个项目,那么在公司心血来潮时便可以改变项目的优先级。这可能会影响项目承包人对未来的安全感。他们所依赖的资源,也可能突然间便被抽走。
组建和解散团队只是人为的困难,公司不应受到它的束缚。如果公司在业务上认为一个项目比另外一个项目的优先级更高,应该要快速重新分配资源。项目承包人的职责所在,便是清晰地定义和陈述项目的价值与意义,让项目得到公司管理层的认可和支持。
13.2 结论
团队比项目更难构建。因此,组建稳健的团队,让团队在一个又一个项目中整体移动共同工作是较好的做法。并且,团队也可以同时承接多个项目。
在组建团队时,要给予团队充足的时间,让他们形成凝聚力,一直共同工作,成为不断交付项目的强大引擎。