`

敏捷开发松结对编程之六大型团队

阅读更多

松结对编程是小型团队的实践,大约运行在1个师傅+1~3个徒弟的尺度上,当面临更大尺度的时候,就需要大型团队模型。这里推荐139团队模型,因为它不但可以让松结对编程运转顺利,还解决了大团队沟通、绩效考核、师傅的出路等问题。

139团队的整体情况相当复杂,将另有系列博文描述,这里只描述与“松结对编程”相关的内容,以保证本系列博文的完整性。

基本概念

139团队就是1个项目经理,3个师傅,9个徒弟的简称,当然实际上未必正好凑够13个人,也未必正好每个师傅都有3个徒弟。

在第一篇里边已经提到过三个层级的工作关系,下面是一些深入的剖析。

绩效考核

绩效考核历来是软件业最头痛的问题,按代码行考核吧新程序员写的垃圾代码比高手多,按任务数考核吧任务大小不一,按功能点考核吧多数人不会数,按工作按时完成率考核吧师傅还帮不帮徒弟了?……139团队大致有个答案:按1-3-9的层次安排大致薪金和奖金比例(在139团队系列中有详细分析)。

139团队认为绩效考核首先是团队的整体绩效;在分解到个体时,不是看具体每个人干活多少,而是看在团队中所起的作用。

所以,想加薪?带徒弟吧。不过有一点,带一队没用的徒弟是没用的,首先要有团队绩效,才会有个人绩效。

人员招聘

人员招聘一般在较高层进行,最低也是项目经理,但是最终带新人的却是师傅。所以招聘的时候应该请未来的师傅也在场,部门经理/项目经理可以问师傅“这个人给你当助手,你觉得够吗?”这个问题我最近正好问过,师傅的话语权很重,因为如果他不喜欢,下面的配合会很难。如果是招聘师傅,项目经理心里要对此人和现有师傅水平的高下比较有个概念,尤其是沟通和教学能力。

师徒的差异既不能太大,也不能太小。太大学不明白,白耽误师傅的功夫;太小没什么可学,还可能引发冲突(经常半斤大战八两,如果其中一个是二两就打不起来了)。如果理解了松结对编程的上述实践,在遇到实际人员的时候实际情况实际分析一下就可以了。

职业生涯规划

徒弟学好了可以做什么?可以独立工作,比如新出现一个模块或业务,可以单独交给此人开发(要配代码审查人);做得更好了可以做师傅,带徒弟。

师傅学好了可以做什么?可以做项目经理。比如如果有个师傅带了多达3~5个徒弟,而且还想增加人,那么他的那个模块多半要分拆为一个子项目了,而分拆后,师傅是新项目经理的最佳人员。

之前呆过的一家高成长性公司,去的时候只有18人,一年半以后就达到120人了,而业务骨干多半都是当年的徒弟,而不是新招来的高手。究其原因,一则业务壁垒不是刚招来的高手能突破的,二则师徒制度使人成长很快。最初大家并没有正式的师徒制度,但是项目经理无私地指导大家,为团队成长和后来建立师徒制度建立了条件。本人刚去的时候工作五年了,还不知道申请的内存要删除(C++),现在的编程功底基本上都是在这家公司学成的。

主程序员团队

如果遇上一个顶十个的师傅,也有团队模型就是主程序员团队。师傅干活,徒弟打杂+学习。本人用过两次半,都很成功。主程序员团队的工作方式更“松”,但也有其工作模式和师徒制度,本博客中已有一篇博文与之相关。

主程序员团队不如松结对编程团队健康和有潜力,个人感觉只适合某些情况。

后记

任何开发方法都有局限性,也都有可取之处,松结对编程也不例外。

笔者在多年开发及咨询过程中,逐渐发现所有研发方法都会遇到困难,而所有研发方法经过变形都可以某种方式应用下来。关键问题在于,在遇到困难的时候不要因为困难而否定方法,而要积极为解决困难寻找答案。格言说得好:不是缺少发现问题的眼睛,而是缺少解决问题的手。

松结对编程本身就是在实际环境中应用敏捷开发和结对编程的时候遇到困难后的变形,所以在应用松结对编程的时候如果遇到困难时,办法只有一个:继续变形。

敏捷开发传入中国已经10年了,但是如果问哪家企业非常成功地应用敏捷开发,谁能出来好好地讲讲案例,几乎无一能者。究其原因无外乎两个:

1. 过于迷信方法,因此尝试原封不动地使用方法,结果水土不服遭到失败。

2. 过于不迷信方法,尝试失败后就轻易放弃。

整个过程中最容易被忽略的,是实践者自身的创造力。其实早在创建Scrum的时候,Ken就指出Scrum只是一个起点,他建议人们从原装的Scrum入手以保持稳定的过程框架,并进而自行发挥。但多数人在应用时,都过于喜欢查书,百度,google,找培训课程,看博客——包括这里,只要还找不到的,也不再尝试不再创新,这就背离了创始人的初衷。

个人感觉凡是不违背敏捷之神的研发管理方法,均为敏捷。所有敏捷的实践者,都应该在敏捷的大框架下,跟着自己直觉和本能的引导,去创造适合自己的敏捷实践方法。
分享到:
评论

相关推荐

    C++ 敏捷开发资料

    在C++这样的编程语言背景下,敏捷开发可以帮助团队更高效地完成项目,提高软件质量和用户满意度。这份资料包包含了两份文件,分别是"敏捷开发.pdf"和"c++敏捷软件开发方法简介.ppt",旨在帮助开发者了解如何在C++...

    敏捷开发官方文档

    XP注重编程实践,如结对编程、持续集成和测试驱动开发。 3. 用户故事与敏捷规划 用户故事是从用户角度描述功能需求的小型叙述,通常采用“作为一个<角色>,我想要<功能>,以便于<价值>”的格式。敏捷项目规划围绕...

    面向大型分布式软件项目的敏捷开发模型研究.pdf

    【摘要】中提到的面向大型分布式软件项目的敏捷开发模型研究,是针对大规模信息化项目中,如何在广域网络环境下,协同多个开发团队进行有效开发,同时规避软件过程风险的议题。研究的核心在于改进传统的极限编程(XP...

    敏捷开发流程

    2. **XP (Extreme Programming)**:侧重于实践,比如持续集成、结对编程等技术实践,旨在提高代码质量和团队协作效率。 #### 四、Scrum开发流程详解 **Scrum**是一种流行的敏捷开发框架,它的核心在于通过固定的...

    敏捷开发 原理与实践

    **敏捷开发原理与实践** 敏捷开发是一种以人为核心、迭代、逐步交付的软件开发方法论。它强调在快速变化的需求环境中,...无论是在初创公司还是大型企业,敏捷开发都能够帮助我们更好地应对挑战,实现高效的软件开发。

    敏捷建模-极限编程和统一过程的有效实践

    Java则是一个广泛使用的跨平台语言,尤其适合大型企业级敏捷开发,有丰富的开源库和框架支持敏捷实践,如Spring Boot和JUnit。 面向对象(Object-Oriented, OO)编程是敏捷建模的基础,它强调通过封装、继承和多态...

    敏捷开发 课件

    ### 敏捷开发核心知识点详解 #### 一、敏捷开发概览 **1.1 敏捷的概念** 敏捷开发是一种以人为本、迭代增量的软件开发方法论。...无论是对于初创企业还是大型公司,敏捷开发都是一种值得尝试的方法论。

    敏捷软件开发:原则、模式与实践

    敏捷开发强调模式的使用,书中的“模式”部分可能涵盖各种设计模式和技术实践,例如重构、持续集成、测试自动化、结对编程等。这些模式可以帮助团队更好地适应变化,提高代码质量和可维护性。例如,重构是改善现有...

    敏捷软件开发方法理论与实战.pdf

    敏捷方法的应用非常广泛,从初创公司到大型企业都在采用敏捷开发模式。实践中常见的敏捷框架包括Scrum、看板(Kanban)、精益软件开发等。例如,Scrum框架通过设定短周期的冲刺(sprint)来实现快速迭代,每个冲刺结束时...

    敏捷开发最佳实践-九大实践

    敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法论,旨在应对快速变化的需求,提高软件质量和团队效率。以下是对“敏捷开发最佳实践-九大实践”的详细阐述: 1. 完整团队:一个完整的敏捷团队通常包括...

    传统开发与敏捷开发对比1

    核心实践包括结对编程、测试驱动开发、重构、代码集体所有权等,强调简单设计和持续集成。 - **Scrum**:采用“橄榄球”式开发,团队成员对全过程有发言权,强调自治和跨职能合作,以短期迭代实现产品开发。 对比...

    Rios公司敏捷开发分享资料

    - XP(极限编程):XP注重编码质量和团队协作,包含结对编程、测试驱动开发、持续集成等实践,以减少缺陷,提高代码质量。 - 敏捷估算和规划:使用故事点进行相对估算是敏捷开发中的常见做法,帮助团队预测工作量,...

    敏捷开发的相关内容和实践

    - XP(极限编程):强调编程实践,如对代码的持续集成、结对编程和测试驱动开发。 3. 敏捷实践: - 用户故事:用简洁的语言描述用户的需求,作为开发工作的依据。 - 迭代开发:将大型项目分解为多个短周期的...

    敏捷开发的相关资料 总结

    - **结对编程**:结对编程是一种协作开发方式,可以提高代码质量和团队成员之间的沟通效率。 - **持续集成/持续部署(CI/CD)**:CI/CD可以自动化测试和部署流程,减少人为错误,加快开发周期。 - **任务分解**:将...

    一个真实的敏捷开发案例.docx

    团队通过“规范和章程”活动确定协作方式,包括结对编程、工具选择和质量标准,并将这些协议记录在Wiki上,方便团队成员查阅和更新。随着团队规模的增长,形成了多个Scrum团队,共享测试资源。 在整个过程中,团队...

    敏捷开发必备技能[2011最新开发技术英文版]

    3. **结对编程**:这是一种敏捷开发实践,两位开发者在同一台工作站上一起工作。一个编写代码(驾驶者),另一个观察代码并提供反馈(导航者)。这种方式可以提高代码质量,同时促进知识分享。 4. **重构**:重构是...

Global site tag (gtag.js) - Google Analytics