四、团队协作
提到团队协作,听到最多的就是团队责任制。在一个小团队里,形成对外的团队责任制是很容易的(因为集体荣誉感),这也是Scrum鼓励小团队的原因之一。但在团队内部,使每个人都能做到团队责任制却并不容易。
找到反例似乎很容易。在一个分特性到人的项目里,产品出现bug,几乎总有程序员说,恩,这块不是我开发的,你要找某某某。在另一个项目里,业务分析师越过业内的最佳实践,忽略程序员的意见,一定要在地图上一次性显示所有地点,而不是延迟分批加载,结果导致这一功能的数次返工,程序员们抱怨不已。
在团队内部做到团队责任制,最重要的就是要鼓励所有人都参与团队的任何事情。参与不一定是去做,最起码是一定要了解。试想一个模块从头到尾我都不了解,这个模块的任何决定我都不知道,要我承担责任这可能吗?就好像很多工厂门口贴出的大标语:工厂是我家,我是主人翁一样,只是一句空话。为了广泛参与,我们需要做到代码集体所有权;为了广泛参与,我们需要频繁切换结对对象;为了广泛参与;我们需要业务分析师、程序员、测试坐到一起共同分析讨论故事,当然这样做的另外一个好处是避免知识交接产生的浪费;为了广泛参与,我们有意弱化专家的角色,并在团队里做到知识分享;为了广泛参与,我们设立一个想起来就激动人心的项目前景。
这些就够了吗?不够。在微软项目求生法则里,软件的需求阶层被划分成了5块,从下到上依次是:生存需求,项目没有被取消的压力,工作条件合理;安全需求,满足个人对时间和功能的承诺,不安排不可能完成的任务;归属感与爱,健全的团队动力;自尊,感到团队生产力,相信项目重要性;自我实现,持续发展。
关于自尊,我们强调对事不对人,原则如此,操作困难。一个例子是当一个设计违背了设计原则时,直接对程序员进行了批评,认为其不负责任,导致了该程序员的离职。另外一个例子是在回顾会议上批评了不愿重构只想赶进度的行为,某程序员认为这就是在批评自己。在具体到某个人和某件事的时候,需要的是了解团队中的每个人,每个人的性格特点,周期性私下沟通是每个迭代经理的职责。什么事情拿一个大的原则来框,反而会忽略了人本身。一个极端的例子是,有观点把敏捷之所以推行不了全部归结到人的问题上,但他显然忽略了一点,敏捷本来就是来解决人的问题的,一个解决人问题的方案不能实施是因为人的问题,这莫不是一种反讽。
五、全功能团队
Scrum提倡全功能团队。有一种观点认为追求卓越的团队,就得所有人会做所有事,不认可分工。从我个人的角度说,我并不认可这种观点,我的观点是追求卓越的团队,就得所有人专注自己的事同时思考所有的事。即我是赞同分工的,为什么分工,分工才能专业。正如路边小诊所包治百病一样,专家只存在于特定领域。
一个反例是当一个项目遇到严重的性能问题时,开发人员使用selenium来进行性能测试,他们耗费了好几个月,其中很多时间用来搭建环境,最后起的效果却并不大。这时需要的是测试人员的专业技能。
另外一个反例是在一个项目后期引入专门的测试人员后,bug被源源不断的发现出来,一个功能是在列表页面弹出编辑框,在列表达到20条数据页面需要滚动时,编辑框没有跟着滚动,造成最后几条数据用户看不见编辑框而不知所措,程序员都没有发现这个bug,但测试人员却几乎是立刻发现。这时需要的是测试人员不同的思考问题的角度。
那么,为什么我们又要强调全功能团队,强调从其他人的角度思考问题呢?
首先也是最重要的是避免浪费。软件开发是脑力活动,业务分析、开发、测试之间存在工作的交接,这种交接其实表现为知识的交接,知识的交接让分工变得模糊。业务分析更多站在客户的角度分析问题,程序员更多站在技术的角度分析问题,测试人员更多站在客户使用(易用性、各种边界)的角度分析问题,最后故事的实现必然是三者协调后的结果,因此每个人都需要从其他人的角度进行思考,越早越频繁的非正式交流越好,能减少返工。在上面提到的例子里,由于业务分析师没有注意到技术的约束,而程序员没有坚持自己的意见(其实是没有更多的深入思考),导致地图的实现反复折腾,产生浪费。
剩下的就都是附带作用了,比如由于广泛参与带来团队责任感,某个测试人员对写代码非常感兴趣偶尔尝试由此带来的激励,以及当测试人员偶尔不够而程序员进行暂时替代从而平衡生产。对于平衡生产,我想说的是偶尔为之是没有问题的,但一个团队如果频繁需要程序员代劳测试,那么问题显然是测试人员不够,合适的解决方案应该是增加测试人员而不是要求程序员测试。
分享到:
相关推荐
它强调团队协作、迭代交付以及适应变化的能力。在Scrum框架中,存在三个关键角色:Scrum Master、Product Owner和开发团队(Team)。 - **Scrum Master**:负责确保Scrum过程的正确执行,清除团队障碍,并帮助团队...
它强调团队协作、自我组织和快速响应变化。在本文中,我们将深入探讨Scrum的关键要素和实践,以指导团队顺利实施敏捷开发。 首先,项目的启动阶段涉及一系列准备工作。项目发起后,经过预立项、可行性研究和公司...
在多团队协作时,Scrum-of-Scrums是Scrum团队之间协调工作的方式之一,通过定期召开Scrum-of-Scrums会议,多个Scrum团队可以同步进度并协调跨团队依赖。当团队分布在不同的地理位置时,如离岸或在家工作,就需要特别...
### 软件工程与团队协作技巧教程 #### 第1章 软件工程概述 **软件工程**是一门综合性的学科,它涵盖了软件开发、维护和管理的全过程。其核心目的是采用系统化、规范化的手段来提升软件开发的质量与效率。 - **...
Team Foundation Server 2010(TFS 2010)是Microsoft提供的一款强大的团队协作工具,主要用于软件...通过这个实例,你可以了解到从基础架构准备到实际应用的全过程,从而有效地管理软件开发项目并提升团队协作效率。
以敏捷的方式启动项目意味着从一开始就关注价值交付、团队协作和快速反馈循环。这包括但不限于: - **快速原型设计**:通过快速构建和展示原型来收集早期反馈。 - **小批量发布**:通过频繁的小规模发布来持续交付...
Scrum 强调团队的自组织能力,鼓励频繁的沟通和协作,以便在开发过程中能够灵活应对需求变化,从而更好地满足客户需求。 在 Scrum 中,开发过程被分解为一系列短期的迭代周期,称为 Sprint,通常每个 Sprint 的长度...
Scrum强调使用物理看板而非电子工具来促进团队间的沟通和透明度,同时也鼓励采用敏捷开发的其他实践,如测试驱动开发(TDD)和结对编程,以提高代码质量和团队协作效率。 总之,Scrum敏捷开发模型提供了一个灵活且...
6. **工具与实践**:Scrum团队使用任务看板跟踪工作进度,燃尽图可视化剩余工作,以及可能结合极限编程(XP)实践,如测试驱动开发(TDD)和结对编程。 通过这些元素,Scrum促进了高效沟通、透明度和团队自我组织,从而...
- **Pivotal Tracker**:敏捷项目管理工具,特别适合Scrum团队,提供可视化的产品待办事项列表管理和进度跟踪。 #### 8. Web测试与源代码控制 - **WatiN**:Web自动化测试框架,适用于.NET环境下的Web应用测试。 - ...
- **核心特点**:Teamlinker 是一个综合性的团队协作平台,其核心在于将各种常用功能模块集成在一起,以提高团队工作效率。 - **项目管理**:支持项目的创建与管理,便于跟踪项目的进度。 - **Wiki**:为团队提供...
4. **团队协作**:良好的组织和协作机制使得团队成员能够更好地协同工作。 **软件生命周期模型** - **瀑布模型**:这是一种传统的线性顺序模型,按照固定顺序执行每个阶段的工作,如需求分析、设计、编码、测试和...
- 团队协作和沟通技巧 8. **第8章:软件维护** - 软件维护的类型(改正性、适应性、完善性、预防性) - 维护成本与软件质量的关系 - 软件演化和版本控制 9. **第9章:软件质量保证** - ISO 9001和CMMI质量...
10. **团队协作与沟通**:在软件工程中,团队合作和有效的沟通至关重要。学习如何在团队中进行有效的协作,提高团队的生产力和效率。 通过《实用软件工程》的学习,学生不仅能掌握软件开发的基本技术,还能理解软件...
5. **项目管理**:产品开发通常涉及跨部门合作,因此,手册可能会涵盖项目管理的技巧,如敏捷方法(Scrum或Kanban)、时间管理和团队协作。 6. **设计与开发**:设计过程可能包括用户界面/体验(UI/UX)设计,功能...
通过上述书籍、文章和其他来源,我们可以看到敏捷开发方法论的核心在于强调团队协作、快速响应变化、持续改进和高质量的产品交付。这些资源不仅为敏捷开发团队提供了宝贵的指导,也为那些希望采用敏捷方法进行项目...