Actionary

A man is valued by his works, not his words!

关于结对开发的那些事儿

今天是"双11",据说这个词已经被注册了商标,不知道这里用会不会侵权啊。这样的日子里,连上班早高峰都不堵车了,传说都是昨晚伤得,大家起不了早。这不,我的搭档都伤得要去买膏方了。

在这样的成双成对的日子里,让我想到了软件开发的结对。(这个引子太牵强了,LOL)在讨论结对开发的时候,我们很容易想到XP中提到的navigator与driver的形式的结对开发。那么结对开发还有其他形式吗?答案是有的。

我们认为,结对开发是用于团队的ramp up的利器之一。团队建立,先分析人,结对开发是一种加强团队成员彼此了解的好机会,这是一种交换学习的形式,设想一下,团队里有7位同事,如果大家都曾彼此结对工作过,大家彼此的了解会更深入,哪些人擅长什么都很清楚。

以老带新的形式进行结对,或者以交换学习新知识和新技能的需要进行结对。需要注意的是,结对的时候,两个人的能力水平差距不宜过大,这样会影响结对工作的效果。多鼓励团队成员自发结对工作,当然,做为经理,可以对结对进行调整,如job rotation的形式等等,多创造一些结对工作的机会。如两个程序员一起结对,程序员和测试人员结对,tutor跟newcomer结对等等。

我们会问,如果大家结对,有没有什么形式来保证大家在开发过程中不会走错路?其实这个问题跟结不结对没有关系,一般来说,架构师会做一个全局的考虑来避免走错路,另外,在daily meeting上也可以通过对任务的更新来发现并避免走错路,每次会议,都问一句能力比较强的同事:有没有什么建议或不同意见?

采用这样的结对方式,可以有效地提高团队的能力,达到团队能力的最优,我们需要的是团队能力的最优,而不是单个个体的最优。如果我们在结对的过程中发现团队的合作或配比不是最优,我们可以打乱团队,重新洗牌。

能不能做到结对开发,这是文化的问题。我们可以通过对能力比较强的同事设定这样的KPI来解决,如,考核该员工结对培养了多少人,另外做360度feedback来考核员工,他所曾经结对过的同事给他反馈。所以我们建议,针对刚成立起来的团队,必须做到100%的结对工作,越是关键,越是困难时期,越是要快速的将团队整体的实力进行提升,而提升的过程必须是learning through work,而结对工作就是一个比较好的手段。我们可以给团队建立一个结对工作图,只有之间有结对工作,将两者之间用线连接起来,以此来跟踪团队结对工作情况。

Alt text

是不是所有工作都应该结对?很显然,不是,结对工作的目的如果是想做团队的能力培养,那么结对的工作内容应该是那些可以让一部分能力强的员工帮助这一块比较弱的员工的工作,如对某个业务模块的编程,测试用例的编写等等,而那些适合独立思考的任务,则给员工留足独立思考的空间吧。所以,员工之间可以达成一个agreement,比如,每天下午的13:00 - 16:00之间会用于pair work,而其他的时间留给各自吧。

为了保证团队建设的可持续性,我们建议直线经理的关注点做如下分配,50%的时间用于团队人员相关事务,30%用于项目相关的事务,而20%的时间则用于hands on的团队工作,如跟团队成员以结对的形式进行工作。这样的直线经理,才能对团队的动态进行洞悉。

其实结对工作可以让参与者完全投入,并能产生积极的工作压力,从这个角度来说,是有助于工作效率的提升,谁也不知道一个看似独自努力工作的人是不是在努力工作,但是,两个在一起努力工作的人肯定是在努力工作。当然,在这样的过程中,做为直线经理,需要关注并影响团队的负面情绪。做为结对开发的推广,我们可能通过KPI考核方式的改变,如考核合作这一块,鼓励尝试使用好的方法,双向推进,真下而上去educate你的经理,自上而上的要求你的团队成员。

通过结对开发,我们可以有效保证产品的质量和开发效率的基础上,做好团队整体能力的提升。

-EOF-

Comments