聊聊远程项目交付的敏捷管理

news2024/10/7 17:34:09

这是鼎叔的第四十三篇原创文章。
行业大牛和刚毕业的小白,都可以进来聊聊。

欢迎关注本人专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。

对于日益重要的国际化市场,越来越多的离岸项目(内包或外包)在进行中,即需求方/客户在A地,开发团队在B地甚至海外。这种情形下,常见的敏捷实践活动也都是适用的。敏捷和精益关注的是价值观和原则。价值观也是文化的一部分,因此需要和离岸团队交谈并学习如何共同工作才能建立。本文内容也适用于任何远程项目的敏捷管理。

参考文章 聊聊多地点团队的敏捷研发,《在离岸开发中使用敏捷软件过程》(martinfowler.com) 。

对于远程项目,关键的不足在于缺少致力于理解和应用敏捷价值观的利益相关方(即客户和管理层),因此,我们要教导真正客户和真正开发者之间通过反馈循环进行紧密而持续的协作。所有利益相关方的思维模式和行为要为了敏捷而改变。

客户的期望

销售人员可能会给新客户不切实际的许诺,但却不关心采用Scrum所需的行为改变。建议和远程团队一起,准备一个清晰简单的指南,请销售人员和潜在用户阅读。

传统理念的客户不太习惯与实际开发人员对话,而宁可和一个中间人(项目经理)对话,客户认为只要移交了规格说明,那么在项目结束时就能得到一个好系统。

因此,当我们和新客户开始新项目时,尝试进行一天的“远程敏捷”研讨会吧。在这个会议上,像客户分享敏捷开发的基本理念,探讨如何降低各种生产中的浪费,演示一个Scrum发布周期的过程。

邀请客户去远程团队所在地GoSee(实地查看),让他和开发及测试工程师建立直接联系,并明晰产品负责人的角色职责。

开发团队与客户的互动

远程团队和真正客户之间如果有中间代表,那他应该是牵线搭桥的角色,鼓励双方直接会面,互相拜访或者视频通话。邀请客户参加迭代计划会议,迭代评审和回顾会议,或远程需求研讨会。对于跨国项目,公司甚至可以雇佣翻译,克服双方沟通上的困难。

远程外包一个普遍的毛病是客户看不到真正的问题,所以通过邀请客户参加一次迭代回顾会议对增加信心会有帮助。我们也鼓励让远程团队部分成员出差到客户所在地,完成一个到几个迭代。

如果可能的话,说服客户找到更好的产品负责人,他应该更接近用户,但并非客户IT部门内的人员,积极接受Scrum培训。

远程敏捷开发需要各方之间大量持续沟通,因此要特别确认对方的回答,不同国家的回答可能含义不同。建议提出开放式问题,或者让对方反向提问。

将需求外包给远程团队

远程外包团队可以突然被要求开发自己不熟悉的系统,就会面临“知识转移”问题,尤其面临文化、时区和语言的不同,这个问题挑战更严峻。

通常的传统做法是派人去客户那里出差,写需求,成为业务主题专家(SME)。事后发现这些SME可能成为了研发瓶颈。每个迭代的详细需求从客户发到远程团队,都依赖SME的仔细阅读。

因此,我们建议每次迭代都召开一次远程需求研讨会。整个团队一起消化需求材料,同时用白板进行问题说明和大量交谈,将争议点记录到共享WIKI上供客户侧阅读,然后两边团队举行视频会议审查争论点并把结论在线更新。这个需求研讨会也是产品代办事项清单提炼的一部分,以此方式把交接浪费降低。

远程团队还可以为新接触的大型系统,在首次迭代前组织一场“产品愿景研讨会”,先创建业务领域视图,建立共同的概念和词汇,然后认知产品未来的愿景宏图和主要特性。

发给远程团队的需求文档也不是越详细越好,而是在迭代回顾会议上确认用户故事的细节程度是否满足要求,灵活适应。详细文档并不能替代面对面交流。

还有一个技巧是,请客户方的UI设计师尽早地(最好每次迭代)制作UI原型图,或者通过视频通话共同创造UI,以尽量扩充交流的可能。

从一开始就安排验收测试用例来表达需求,对于远程短期外包项目有特殊的好处。明确客户的验收测试用例UAT,如果每个用户故事完成后,客户都能进行手工UAT,可以进一步成批地降低工作量。

稳定的远程Scrum团队

管理层需要意识到尽量把团队保留在一起的价值,不管是长项目还是短项目,理想情况下长期稳定的团队有利于保障交付和学习。但在特殊情况下可以组建新团队,比如领域专家分散在公司不同部门,或稳定团队的提升趋势缓慢。

鼓励远程团队说“不”,这是自组织团队的自我赋权,改变过度承诺,获得个人安全感。Scrum的原则之一是工作不能强加给团队。

建立长期的敏捷指导中心团队,为远程团队引入外部可以充当感染源的敏捷指导专家,给新人分配经验丰富的伙伴。

健康的合作关系

避免“本地管理,离岸开发”的模式,这是差劲的泰勒主义形式,和精益敏捷开发实践违背。不要把单职能或组件外包出去,而是可以外包一整套以客户为中心的完整特性。绝大多数工作都由外包方承担,除了接近真正客户的本地团队帮助进行详细的需求分析。

把远程外包团队当内部伙伴来对待,出现问题时拜访合作伙伴并寻找根本原因,要实地查看,而不是盲目遵循所谓的“质量准则”来兴师问罪。

在远程团队和本地团队中不偏爱一方。比如多地点会议时不要总安排远程(离岸)团队不方便的时候,不要忽视离岸团队的假日。

远程外包团队可能是经验不丰富的年轻人,如果我们采取本地经验丰富的专家来做设计,指挥远程团队将其编码实现,那么就会带来大量的交接和转移浪费,更多的规范,以及更糟糕的代码。因此,我们要反过来,尝试让本地丰富经验的“设计师”充当指导和审阅者角色,让远程团队采取小幅度的创造性编码和设计。本地老手带异地新手,充分利用共享桌面的结对编程,短周期代码评审。

基于敏捷来甄选外包公司

外包公司有可能号称自己支持各种敏捷研发模式,实际上将其变异成自己能够重新定义,控制的东西,兜售逐利的商业工具,但是有些敏捷原则可能在该外包公司根本无法支持。

在头重脚轻的外包公司中,资深的人做为管理者积极强化传统管理,“控制”经验少的年轻群体,形成“假冒敏捷”的组织。因此,要亲身Go See外包公司的程序员,看他们的才能是否匹配一个自组织团队的高要求。警惕外包公司仅仅以“擅长编程”来招聘员工,而是观察员工的编程质量,以及结对工作时的表现。

而这些外包公司的环境布置可能也和敏捷倡导的背道而驰,需要进行互动可视化和创造力的改造。

把编码和测试工作比喻成“工厂”的外包公司,没有理解反馈循环的意义,“工厂”强化了长队列上的大批量工作,把“半成品”交付给其他团队。

大型外包公司和工程师才能似乎有反向关系。大型公司的管理者距离实际工作更远,也不指导他人,缺乏对优良设计和卓越技术的持续关注。

如果你选定了一家外包公司,就要鼓励他们和你一起采用精益和敏捷,共同提升。

结论

某些尝试过远程交付,而且还是跨国外包交付的人,可能感到泄气,感到项目浪费巨大。敏捷的远程开发,不仅意味着远程团队要采用Scrum框架,也要求这个团队和本地客户的关系发生变化。即:

建立更直接更人性化的联系,移除中介角色,频繁使用视频或者出差,采用丰田精益理论的GoSee实地查看远程团队的工作和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这十套练习,教你如何用Pandas做数据分析(09)

练习9-时间序列 探索Apple公司股价数据 步骤1 导入必要的库 运行以下代码 import pandas as pd import numpy as np visualization import matplotlib.pyplot as plt %matplotlib inline 步骤2 数据集地址 运行以下代码 path9 ‘…/input/pandas_exercise/pandas_exer…

CVE-2019-11043(PHP远程代码执行漏洞)复现

今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2019-11043(PHP远程代码执行漏洞)复现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负&am…

【hexo系列】02.hexo和obsidian实现笔记丝滑

文章目录hexo主题hexo进阶hexo插件:自动生成目录hexo插件:自动生成目录序号(自行选用)obsidian插件:templater安装插件配置插件定制模板新建笔记参考资料hexo主题 hexo主题大全 cd blog git clone https://github.co…

这十套练习,教你如何用Pandas做数据分析(08)

练习8-创建数据框 探索Pokemon数据 步骤1 导入必要的库 运行以下代码 import pandas as pd 步骤2 创建一个数据字典 运行以下代码 raw_data {“name”: [‘Bulbasaur’, ‘Charmander’,‘Squirtle’,‘Caterpie’], “evolution”: [‘Ivysaur’,‘Charmeleon’,‘Warto…

链接的接口——符号

链接的接口——符号 链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,或者说像玩具积木一样,可以拼装形成一个整体。为了使不同目标文件之间能够相互粘合,这些目标文件之间必须有固定的规则才行,就像积木模块必须…

Akka 学习(八)路由与Dispatcher

目录一 编发编程二 Actor路由2.1 路由的作用2.2 路由的创建方式2.3 路由策略2.4 广播消息2.5 监督路由对象2.6 Akka 案例三 Dispatcher 任务分发3.1 什么是Dispatcher?3.2 Dispatcher的线程池3.3 Dispatcher的分类一 编发编程 Akka 是一个用于实现分布式、并发、响…

mPEG-Phosphate,甲氧基-聚乙二醇-磷酸盐试剂供应

一:产品描述 1、名称 英文:mPEG-Phosphate 中文:甲氧基-聚乙二醇-磷酸盐 2、CAS编号:N/A 3、所属分类:Phosphate PEG Methoxy PE 4、分子量:可定制,2000/1000/3400/20000/5000/10000 5、…

认识Java中的反射与枚举

作者:~小明学编程 文章专栏:JavaSE基础 格言:目之所及皆为回忆,心之所想皆为过往 目录 反射 什么是反射? 常用的反射类 Class类 Class类中的相关方法 常用获得类中属性相关的方法 获得类中注解相关的方法 获得…

Java中的运算符--短路运算

文章目录0 写在前面1 介绍2 举例2.1 逻辑与 &&2.2 逻辑或 ||3 小技巧4 写在最后0 写在前面 JAVA中有两个短路运算,一个是短路与,一个是短路或。 所谓短路,就是当一个参与运算的操作数足以推断该表达式的值时,另一个操作数…

VirtualBox安装CentOS7

一:、下载CentOS7的镜像 下载地址:Downloadhttps://www.centos.org/download/ 进入后有三个版本可以选择: 1、DVD ISO 标准安装版,一般下载这个就可以了(推荐)本文以此为例! 2、Everything…

2023跨年代码(烟花+雪花)

一眨眼,马上就2023年了,祝大家在新的一年里:身体健康平安,生活充实饱满,事业步步高升,心情阳光灿烂,财运滚滚而来,家庭美满幸福,新年开心快乐! 本文将给大家分享一些跨年…

GitHub Copilot

介绍 GitHub Copilot 是人工智能编程助手,它可以帮助你编写程序。在你用visual studio或visual studio code等软件设计工具进行编程时,它可以直接给你整行或整个方法的代码提示,并且提供多种提示方案供你选择。他是由openai公司(马…

docker 及docker-compose network概念及操作详解

1. docker network概述 Docker通过使用网络驱动程序【network drivers】支持网络容器。默认情况下,Docker提供了多个网络驱动程序,如bridge 和overlay驱动程序。用户也可以自己写一个网络驱动插件,这样就可以创建自己的驱动程序。 Docker引…

SpringBoot整合Mybatis-Plus分页失效

场景:项目整合mybatis-Plus分页失效,current一直是1,size一直是10,total属性一直是0,数据分页不准 先看官网给的示例: 解决方案是新建mybatis-Plus的配置文件: package com.amc.config;import …

[附源码]计算机毕业设计海南琼旅旅游网Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

混检阳性概率的计算(贝叶斯定理的一个应用例)

目录 1. 混检阳性概率的计算 2. 混管阳性时你阳性的概率有多大? 2.1 贝叶斯分析结果的解释 1. 混检阳性概率的计算 目前核酸混检的基本做法是十混一,如果阳性人群分布完全随机,那么做十混一混检为阳性的概率有多大呢? …

对immutable的理解?如何应用在react项目中?

一、是什么 Immutable,不可改变的,在计算机中,即指一旦创建,就不能再被更改的数据 对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象 Immutable 实现的原理是 Persistent Data Structure&#xff08…

笔试强训(四十二)

目录一、选择题二、编程题2.1 解读密码2.1.1 题目2.1.2 题解2.2 走迷宫2.2.1 题目2.2.2 题解一、选择题 (1)tcp套接字中,不会阻塞的是哪一种操作(D) A.read B.write C.accept D.bind bind函数不会阻塞执行流的 &#…

Stm32旧版库函数3——nrf24l01 16位数据 51单片机发送与stm32接收

51代码&#xff1a; #include <reg52.h> #include <intrins.h> typedef unsigned char uchar; typedef unsigned char uint; //****************************************NRF24L01端口定义*************************************** sbit MISO P1^7; sbit …

runnable、callable、consumer、supplier

Java 没有委托的概念&#xff1b; 相反&#xff0c;如果需要一个指向函数的指针&#xff0c;可以创建内联匿名类&#xff08;或 Java 8 的 lambda 表达式&#xff09;&#xff0c;它们是为此建议设计的某些接口的实现&#xff08;也称为 Java 8 的功能接口&#xff09;。 然而&…