简介
团队的开发人员撇开需求沉浸在想象中的“完美”程序中;测试人员迷茫的点击着按钮试图搞明白这到底是个什么功能;设计师造出了没有尽头的楼梯,更糟的是,客户爱上了这个设计;团队领导四处救火,力有不逮。种种迹象表明,我们得打破分工带来的壁垒,建设全功能团队——大多数人能完成大多数种类工作的团队。
在一次闲聊中,女友的母亲说起实习大夫必须轮岗一年才会进行分科学习,我质疑道:“对于致力于心脏病治疗的医生来说,他岂不是在不相干的学习上浪费了一年时间么?”,她母亲笑着说:“不这么作,你怎么确信病人的确患有心脏病呢?”。不知道为什么,我眼前突然浮现出这样的场景?测试人员在怯生生的询问:“这是一个缺陷么(而不是操作系统/浏览器的限制)?”。
亚当与大头针工厂
亚当·斯密于1973年在描述大头针工厂的专业化生产时提出了社会分工的好处:提高熟练程度、减少任务切换时的开销、便于机器的应用。我们似乎可以非常自然得推导出重复设计、重复编码、重复测试可以增加相应岗位员工技术熟练度,提升效率,并由此提升企业的盈利能力。
然而市场的不断变化让重复生产的美梦不在,切换任务变得越来越频繁。IT公司不是大头针工厂,知识工作者毕竟有别与体力劳动者,在劳动主体发生变化的过程中有两件事情的差异被放大了:一是局部优化与整体优化的差异,二是正确的做事与做作正确的事情的差异。
有一道数学题,假设每个开发人员每天可以完成一个功能,测试人员每天可以测试2个功能,团队由3名开发人员和1名测试人员组成,那么一周内通过测试的功能最多为多少个?
大多数人的第一反应是5(天)x2(功能/天)=10功能,下面的表格会告诉你,由于负载不均衡,测试人员在周一没有功能可测,团队其实无法在一周内交付10个功能。
|
周一
|
周二
|
周三
|
周四
|
周五
|
总计
|
开发人员
|
3功能
|
3功能
|
3功能
|
3功能
|
3功能
|
15个功能
|
测试人员
|
0功能
|
2功能
|
2功能
|
2功能
|
2功能
|
8个功能
|
(表一)
那么我们改变一下条件,假设团队中有4个开发人员,并且开发人员可以参与测试,结果会怎样呢?
|
周一
|
周二
|
周三
|
周四
|
周五
|
总计
|
开发人员
|
4功能
|
4功能
|
3功能
|
2功能
|
0功能
|
13个功能
|
测试人员
|
0功能
|
0功能
|
2功能
|
4功能
|
8功能
|
14个功能
|
(表二)
我们最终能够交付13点,产量提高了60%, 如果我们只留下三名全能人员:
|
周一
|
周二
|
周三
|
周四
|
周五
|
总计
|
开发人员
|
3功能
|
3功能
|
3功能
|
1功能
|
0功能
|
10个功能
|
测试人员
|
0功能
|
0功能
|
0功能
|
4功能
|
6功能
|
10个功能
|
(表三)
居然比3个开发人员和1个测试的人员组合还多交付两个功能!
我们当然有理由质疑第二题的假设:“开发人员可以胜任测试人员的职位”。又或者继续讨论迭代二的数据变化。我对此的的回答是:
第一,以我的观察来看开发人员之所以不进行测试工作,不是能力不允许,而是主观上认为测试工作是简单、重复而枯燥的,不愿意作。客观上开发人员们比较贵也更难于培养,组织层面不允许这样的“浪费”。
对测试工作的偏见客观上促成了大量不具备技术能力的人选择测试工程师作为职业,而技能不足则一步导致了测试工作倾向于简单重复。测试人员在很大程度上无法判断什么是正确的事情(作正确的事),从而更倾向于熟练的按照脚本进行操作(正确的做事)。
第二,我的关注点不在交付8点还是10点,我希望这个例子能够引发大家对于均衡生产的思考。
软件的需求和实现可以被细化,但它毕竟不是大头针,需求和实现间往往呈现出关联与依赖,换言之,局部效率的增加无法直接转换为整体效率的增加。而整体效率的优化往往依赖于均衡生产(参考表三),即消除生产的波峰(过度生产)和波谷(生产不足),避免任务时松时紧,松时生产力浪费(周一时专职测试人员),紧时加班加点,粗制滥造。
我倾向于认为亚当·斯密对劳动分工论述的假设是:需求稳定,简单生产。对于IT领域来讲,这些假设还成立么?
拧螺丝的卓别林
不难发现,对分工以及个体效率的迷信已经深刻的影响着IT领域。分工的端倪在招聘时就已经显现,即便对于差异不大的毕业生们,雇主也会根据其极有限的技能,用不同的标准进行测试(Java, .Net, PHP等),并在入职后将其冠以前端工程师,后端工程师,测试工程师,支持工程师等不同的头衔,甚至可能在其可见的职业生涯中专门负责某个文件的维护。
整体效率的优化要求IT团队消除技能壁垒,培养多面手,根据计划的的变动,弹性地调整任务,达到各角色和流程之间的平衡。对于IT企业来说,变化从招聘时就必须开始。找到拥有学习热情、学习能力、学习习惯的人变成了当务之急,员工是否掌握了某种算法、语言或者工具应当从准入条件降格为对于其学习能力和热情的一种(不是唯一一种)证明。
整体效率的优化要求员工必须持续学习、成长,兴趣无疑是成长的催化剂,然而丧失意义的工作却在不断扼杀人的兴趣。
丹?艾瑞里在怪诞行为学里著述到:
劳动者与他自己的生产活动、劳动目标以及生产过程相分离。这就使工作成为非自发性的活动,因此劳动者就无法对劳动产生认同或者领略到劳动的意义,而缺少了意义,专业人员可能觉得自己好像电影《摩登时代》中查理·卓别林扮演的角色,一切都由工厂的齿轮控制,他们根本不会有全心全意工作的愿望 。
如果员工成长是必须的,那么,帮助员工认识到工作的全貌也是必须的。角色轮换是一个很好的解决方案。在项目内部通过角色互换,不限角色的结对工作,加强不同角色,不同模块间的知识传递,打破技术壁垒,帮助员工从不同视角理解项目,锻炼技能,进而增加团队均衡生产的能力。
在我看来,进行角色轮换的最大阻碍在于编程能力的普遍缺乏,大多数的测试、需求分析工作(鉴于大多数团队所处的地位,需求分析师实在言过其实,更精确的名字是需求整理师),迭代管理,简单的客户交流,学习曲线都非常低,任何成员都可以在师傅的带领下迅速掌握工作要点,然而编写程序却是个例外,即便对于基础良好的新人,在经验丰富的导师带领下,也需要2个月左右才可能写出比较体面的单元测试、较为面向对象的程序。在分工的体制下,用别的角色轮换开发人员几乎是个死局。
非常奇怪,IT领域如此的看重抽象能力和逻辑分析能力,可为佐证的是层出不穷的建模语言,模式,领域模型,架构。然而最能训练抽象能力和分析能力的一项活动,却仅仅有选择性的开展,这是不是意味着我们认为IT项目可以在大多数人无法(也没有能力)达成共识的情况下顺利展开并成功交付呢?在我看来,编写程序不仅仅是一项技能,一种思考方式,还承担着构造IT团队成员间共同经验区,提高交流效率的目的。
一个值得从其它行业借鉴的经验是首先展开基础素质培养,再进入领域培养专业素养,换言之,避免过早的分工,所有新人从编程开始职业生涯,在公司的体制层面促成每个新人都能经历力所能及的所有角色。在具有了一定的基本素质后,在员工对工作内容和自身兴趣有了充分的了解后,根据个人意愿进入领域发展专业技能,兴趣将成为员工成长的内在动力,而良好的基本素质将使员工有能力在专业岗位上施展自己的想法。
同时公司应当鼓励员工跨界工作,《应用Selenium和Ruby进行面向领域的Web测试》的作者是拥有卓越能力的开发人员,他曾经进行了相当长时间的测试工作,在其它人抱怨自动化界面测试难于维护时,他优秀的抽象能力、分析能力已经帮他提炼出测试模式,识别出缺陷,找到了优雅高效的工作方式并诞生了这篇优秀的文章。
丹·艾瑞所言于我心有戚戚焉。
知行合一
在过去9个月间我们在团队中进行了建设全功能团队的初步实践,在分享具体实践前,我希望下面的总结性数据能帮助你获得一些背景知识。
项目处理的是期货交易领域,使用的技术栈是C#, ASP.NET MVC。团队主要由八名开发人员以及两名测试人员组成(其中一名测试人员在项目中期加入),其中4位是毕业生,3位具备工作经验,但刚刚加入Thoughtworks,只有一位开发人员具备.Net开发经验。
下面是全部35周的燃尽图,黑色实线代表项目的范围,绿色实线代表开发完成的速度,蓝色实线代表测试完成的速度,每周为一个迭代。
在这张图的大部分区域内蓝色和绿色是重叠或者非常接近的,这意味着团队每迭代开发完成的功能恰好与测试人员的处理能力对齐。一方面,这归功于测试人员自行实现的自动化测试框架对效率的提升,另一方面,开发人员参与测试也起到了平衡开发和测试速度的作用。
让我们截取开发过程的一部分,观察每个迭代的速度,在下面这样图中,横轴代表第几个迭代,纵轴代表每迭代完成的功能点数。
从项目经理的角度看,团队的交付速度很稳定,从15周开始直到项目的结束,我们都可以放心的使用12点每周的经验数据进行估算、计划工作。事实上团队在后期所处理的工作种类越来越多,包括了正常的开发任务、公式转换、性能调优、验收测试、支持等。在这种情况下,每个人都具备跨角色,跨模块工作的能力才保证了可持续的交付节奏。
在这篇文章中我们一起回顾了分工历史,对于技术团队影响以及建设全功能团队的必要性 ,在下一篇文章中我将详细分享一些实践以及经验数据。
作者简介
胡凯, ThoughtWorks公司的敏捷咨询师,官方认证的Spring Framework讲师,近2年一直从事持续集成工具Cruise以 及CruiseControl的设计开发工作。 创造和参与了开源测试框架junit-ext,以及用于分析CruiseControl构建的报表工具iAnalyse, 对于Web开发,敏捷实践,开源软件与社区活动有浓厚的兴趣,可以访问他的个人博客进行更多的了解。
本文出自:http://fengshen-xia.iteye.com/admin/blogs/new
分享到:
相关推荐
【企业文化与团队建设全案】深入探讨了企业文化与团队建设的重要性、构成要素及功能,旨在帮助企业管理者理解和构建高效的企业文化。本讲座适用于企业中高层经理、专职企业文化推广人员及各级党政管理干部。 首先,...
【企业文化与团队建设】是企业发展中的重要组成部分,它关乎到企业的长远发展和团队的凝聚力。在现代社会,企业文化和团队建设的重要性日益凸显,因为它们能够帮助企业应对市场的挑战,提高员工的满意度和生产力,...
团队建设中应注意功能齐全,各个角色的组合应涵盖领导班子所需的所有功能,领导者之间要主动补位,用人所长,容忍之短,尤其要重视个性气质的包容。 执行力是团队效率的体现。它涉及到目标设定、计划制定、资源分配...
【全媒体呼叫中心建设全套解决方案】 全媒体呼叫中心是现代企业与客户互动的重要平台,它整合了各种通信渠道,如电话、微信、QQ、手机APP、短信、电子邮件、传真、电话留言和Web在线服务,实现了全交互式的客户服务...
"sun 全功能版"表明这是该系统的一个完整版本,包含了所有功能模块,没有删减或限制,用户可以充分利用其全部特性来满足多样化的网站需求。 在WonKoo CMS v1.08中,你可以期待以下关键知识点: 1. **多语言支持**...
3. **软件工具的局限性**:现有的软件工具可能存在功能不全或难以操作的问题,影响了管理效率。 #### 解决策略 1. **加强制度建设**: - 制定明确的管理制度和监督机制,确保各项规定得到有效执行。 - 建立和完善...
【团队凝聚力与高绩效团队建设】\n\n团队凝聚力是任何成功组织的基石,它意味着团队成员间的紧密协作,共同追求团队目标,并愿意为团队的利益付出努力。孙学敏在讲座中强调,团队精神对于个人、企业乃至民族的发展至...
- **团队建设活动**:组织团队建设活动可以增强团队凝聚力。 - **知识分享与培训**:定期举办知识分享会和技术培训,提高团队成员的专业技能。 **多元团队管理** - **跨文化团队**:在具有不同文化背景的团队中...
动易SiteWeaver内容管理系统是一款广泛应用于企业及组织的网站建设和管理工具,尤其在V6.7这个全功能商业版本中,它集成了强大的内容管理、电子商务和其他多种实用功能,旨在为企业提供一站式在线业务解决方案。...
贝尔宾的团队角色理论指出,一个功能齐全的团队需要包括开拓者、稳定者和调整者等不同角色,以确保团队在面对过去、现在和未来的挑战时都能有效应对。 团队成员应识别并理解自己的角色,这有助于提升团队的协作效率...
团队角色理论指出,团队需要有限种类的角色,如董事长、塑造者、智者等,这些角色各自承担特定的责任,共同构建出功能齐全的团队结构。关键在于,团队需要的不是个体的平衡,而是整体的平衡,确保每个成员都能发挥...
5. **团队的类型**:项目团队、固定工作团队、功能团队、网络化团队、快速应急团队和质量圈团队等,每种类型都有其特定的适用场景和运作方式。 6. **团队的结构**:包括技能结构、个性结构和角色结构。团队成员应...
团队凝聚力和高绩效团队的构建是现代企业管理中的关键议题,尤其在技术领域,团队协作和技术融合对于推动...在技术行业中,这样的团队建设策略不仅能够提升项目执行效率,还能激发团队创新,最终推动企业的持续发展。
常见的团队类型包括项目团队、固定工作团队、功能团队、网络化团队、快速应急团队和质量圈团队。 在咨询过程中,团队的愿景与目的是至关重要的。每个团队成员都需要意识到他们的工作与一个更大的愿景相联系,只有...
【团队凝聚力与高绩效团队建设】\n\n团队凝聚力是任何成功组织的核心,它涉及到团队成员之间的紧密协作、相互信任和共享目标。正如《团队精神》中提到的,一个人的力量有限,但当个体组成团队,就能产生强大的合力。...
管理者应通过清晰的沟通、目标设定和团队建设活动来加速团队的成熟过程。 总的来说,团队绩效管理的核心是构建一个结构合理、技能互补、目标一致的团队,并在不同阶段采取适当的管理策略,以促进团队的高效运作和...