写点什么

一起工作,分开就座

2014 年 10 月 22 日

要想判断你的离岸外包冒险之旅是否成功,有两个最根本因素:人和过程。有人会说:过程是最重要的;另外有些人将人放在第一位。8 年前,我开始实施近地外包,当时认为流程最重要。我相信,必须要搭建某种像工厂一样的流程,这样离岸外包才能成功。现在,我相信:虽然流程至关重要,但人是最基础的根本。出色的流程加上不怎么样的人,结果必将让你失望。雇佣最好的人,却没有任何流程,结果会让你吃几个。如果你雇的人有问题,他们可能根本不注意流程,而是直接“开步走”。这常常导致各种沟通和项目管理方面的问题。

本文的早期版本曾刊登于《如何组织离岸外包和近岸协作》这本书中,它属于一系列管理远程团队的书籍

本文是管理远程团队系列文章的第一篇。我将分享的经验,谈谈如何构建适用于远程协作的稳固流程。当人们身处多个远程地点时,必须付出更多精力,阐明团队如何协同工作。在 Bridge 公司,我们研究出一种工作坊,一直将其提供给新客户。我们还创作了工作手册,其中有些章节提到达成远程高效协作的几个关键因素:

  • 流程:我们如何工作?
  • 责任:谁负责做什么?
  • 项目管理工具:我们如何跟踪项目?
  • 沟通:我们如何沟通?频度如何?
  • 绩效:我们用什么来度量绩效和进度?具体如何度量?
  • 编码规范:我们的标准是什么?
  • 时间记录:我们如何记录时间?
  • 形成“同事”:我们如何一起工作,发挥潜力,成为朋友?

我会讨论其中三个因素:流程(“我们的工作方式”,包括规划、需求和测试)、责任和绩效。大家可以在我们的网站下载免费的工作手册

1. 流程

软件项目中,很多人会自然地“马上开工”。他们会在东欧或是印度选择一个合作伙伴(后者要在招投标上用很多时间),然后就“开始工作”、“启动项目”。尤其是针对固定价格的外包项目关系,他们会期望合作伙伴知道如何着手项目。需求写完了,也发给供应商了,我们现在可以坐享其成,等着成果在指定日期交付就好。但是,这可能吗?

当然,作为外包的“买方”,你有权期望外包合作伙伴知道外包的工作方式。远程团队必须了解如何满足你的要求,让你的项目成功。而且很可能他们也是如此。但是你呢?

他们了解你的具体情况吗?知道如何让外包过程符合你的具体项目吗?当然,很多外包厂商都是技术公司。他们开发能力很强,但这不意味着他们可以保证复杂的协作过程顺畅无阻,这个过程要跨越文化、时区、不同语言的差异。最近,我跟荷兰一家大银行的 CIO 聊天。他告诉我:只要是把征求计划书(RFP)发到离岸厂商那边,得到的回应一定是深入技术细节的解决方案。而他一直在寻找的公司,要能告诉他自己如何交付他需要的解决方案:他们会用什么样的人,建议使用什么样的流程,建议如何与在岸的产品负责人协作。

在离岸团队开始执行项目之前,在他们开始分析你的需求、撰写代码之前,你必须召开一次会议,离岸和在岸团队都要参加,大家一起讨论具体工作方式。不妨从你们各自当下的工作方式开始。因此,两种方式可以在这里碰撞——你们的工作方式、厂商的工作方式——这意味着其中某一方(或者双方)要调整、适应彼此的行为。

软件开发是创造性过程。指望往一个标准化过程中灌入需求,然后得到完成的产品,这对任何客户来说都是一个美梦。但这不是任何创造性过程的工作方式。过去,软件开发遵循建筑行业的构建过程,人们制定出了瀑布模型。这个模型主导了 20 来年的工作方式。今天,一切都要“敏捷”。创造性过程自然就是敏捷的。本文中,为了简化起见,我将会使用瀑布和 Scrum 作为流程因素的两个极端加以讨论。

你现在如何工作?

你遵循的过程接近瀑布模型吗?还是你们已经完全敏捷了?你们是不是像很多公司一样开始使用 Scrum?也许你们已经应用了极限编程或是看板?在 Bridge 公司,我们构建的远程团队专为某家公司的内部 IT 部门服务。我已经体会到:最具挑战性的客户,是提供服务的公司(相对于构建产品的公司而言)。尤其是小型服务提供公司,比如互联网公司,要想让离岸发挥效果,非常具有挑战性。而且,在大多数情况下,客户强制要求使用固定价格。也许得使用瀑布式模型才能按固定价格报价。如果你是规模比较大的服务提供商,那就完全不同了。基本上,大型服务提供商要为客户的长期项目构建“产品”。因此,在打造流程的时间和灵活性更强,可以得到期望的产出。这种情况下,合作双方都有更多时间制定联合协作流程,即便价格或时间有限制,项目还是更易于成功。

现在,请用一些时间,梳理一下你自己真正的工作方法。我自己的经验是:Scrum 基于某些原则,而不是定死了的流程。因为人们会遵循“原则”,所以就有很多种方式可以产生工作方法。很多公司因此认为自己在实施 Scrum,实际上他们用的是瀑布或是看板,或是其他类似的过程。如果你希望与远程团队建立顺畅、完整的写作方式,你必须告诉他们(在你自己眼中)自己的工作方式,以及你希望的工作方式(你希望在自己流程中看到的改进)。很多时候,工作方式都没那么正式(也就是没有文档或流程图)。自己团队中的人们在潜意识中已经形成一套工作方法。然而,新加入的远程团队必须从意识上认识、适应新的工作方法,这个方法也是你们彼此同意的。所以,不仅要讨论工作方法,还要用笔写下来,画下来,让人人都能看到,从而产生责任感。如果仅仅以口头方式说明工作方法,开工之后,可能会发现大家对其理解彼此不同。

你如何估算工作?

瀑布模型有一个十分严重的问题,就是对项目的估算。不妨看看你个人的规划。你个人如何规划自己一周的工作?如果你看看这周的事务优先级,是否能准确估算出每一项要占用多少时间?要是估算接下来这个月呢?要是接下来这一年呢?要想知道估算的准确程度,比较你的预计时间和完成任务的真实使用时间。可能你会发现:真实使用时间是估算时间的 2-3 倍,每个季度是 5-10 倍。

我们希望软件开发者能给出比较好的估算,还发明了各种方法让其更准确。但是,我们是否的确更接近真实情况了呢?一般来说,为客户完成的项目需要提前估算。因此,常常使用简化的计算过程,以加快投标进度。既便如此,你也不能无视:即便赢得了投标,到了某个时间点,离岸团队还是要估算工作量。而且很有可能他们已经偏离了估算,那时你已经偏离预期进度了!

如果你以这种方式工作,而且无法改变瀑布模型。那我建议你寻找使用相同流程的离岸合作伙伴,他们已经习惯使用固定价格方式,他们的流程也能符合你的估算。不过我还是推荐尽可能改变这种流程。你可以先向当前流程中引入某些 Scrum 的元素,然后一步步改变流程,也许可以跟你的离岸合作伙伴同步进行。引入敏捷的原则和 Scrum 需要花时间,要培训团队如何实施 Scrum 时间,让你的某些雇员认证成为产品负责人或是 Scrum Master。这个变化会需要几个月,并且可以在与远程团队开始项目之前,让离岸合作伙伴帮你一起建立流程。

如果你正在使用敏捷或是 Scrum,那就最好不过。你可能使用规划扑克(或是其他方法)来估算每个用户故事,整个团队都要认可这些用户故事。如果你需要估算整个项目,可以大概估计一下项目范围,然后利用 Scrum 的灵活,在每个 Sprint 中调整工作量,最终完成项目范围内的工作。理想情况,当然是整个团队,包括离岸团队,都能加入 Sprint 规划,同时认可项目范围。

我们如何定义需求?

知道需要构建什么,而且能用清晰的需求文档加以表达,这是软件开发最具挑战性的方面之一。再加上遥远的距离,以及不同时区、不同语言、不同文化的差异,难度大大增加。

瀑布模型假设我们可以事前想清楚要做什么。我相信,如果时间足够多,我们可以做到,但也只能完成 75%-80%,所以,风险在于:当你完成某些功能时,它可能已经过时了。如果我们在远程协作中选择这种方式,那就必须要提前规定清晰的指南,说明如何制定需求规范。要回答类似下面的问题:

  • 需求规范中哪些细节最为重要?
  • 我们是否要创建单独的技术需求规范?如果是,哪些规范最重要?
  • 离岸团队如何参与到需求规范的制定或扩展?
  • 针对需求规范的附加条件、优先级变化、删除,如何讨论、达成一致、保存?

这些问题的答案必须有明确的纸质(或电子)记录,这样每个团队成员对于需求的设定方式才能有清晰理解。要是能附上一份“理想需求”的范例作为补充,那会很有帮助。

最根本的问题是:谁负责创建需求?一般都是在岸团队负责,因为他们更接近客户。但是要想清楚。如果在纸面做出某些承诺,那一定是经过了深入思考,这些思考来自于此前与客户的多次讨论。然而,远程团队却没有参与到这个互动中。所以,这些需求文档对你很清晰,对远程团队却如迷雾一般。要让远程团队尽量早加入解决方案和需求的制定,这样他们就更易于理解这个过程,知道要构建的东西。

如果你在使用敏捷开发过程,讨论和会议就是你的起点,而不是需求。至于需求,整个团队都参与到制定过程中,而不仅仅是某一个人。

首先,产品负责人会与客户或用户对话,将需求转换成用户故事,然后 Scrum Master 和开发团队(设计人员、开发者、测试人员、架构师)会进一步探究每个用户故事。要明确理解这种流程在你公司内部的机制,这很重要。

我观察到:有些公司称之为“Scrum”,即便他们没有真正遵循这个方法。这么一来,举个例子,产品负责人(或是既当产品负责人又当 Scrum Master 的人)就会跟客户讨论,详细描述用户故事,预先描述解决方案,有时会深入到技术实现细节,然后会将“用户故事”发送给开发团队。如果你这么做,就等于创建了“迷你瀑布”模型。虽然这种方式能出成果,但你和远程团队一定要明白:使用这种模型,会影响团队的参与程度,以及团队对需求的理解深入程度。

如何做计划?

电子书《如何组织离岸和近岸协作》中,有整整一章讲到规划,本文只提出一些要点。

如果使用瀑布模型,你可能要制定出使用工具(比如 Microsoft Project)创建项目计划的标准化方式。要思考制定计划的方法,这有助于为远程团队提供明确的书面理念。你是否要让离岸团队参与到规划活动中?他们是否会创建设计,还要经过你批准?你是否创建供他们执行的规划?

在 Scrum 中,你是否认真进行了 Sprint 规划?整个团队都参与到规划活动中了吗?如何计算 Sprint 中有多少个小时可用?团队成员能够将 80% 的精力用在用户故事的高效开发上吗?或者至少能保证 50%?谁为 Sprint 中的工作负责?

谁负责测试什么?

测试是软件开发中的灰色区域,各个公司的实施方式完全不同。很多公司希望他们的开发人员能测试自己的工作(但这么做如何做到“验收”?),然后项目经理会完成某些最终测试,再发给终端客户或用户。大型团队有专职测试或测试部门,他们评估开发完成的功能或是用户故事。此外,有些人使用小组测试,在 Sprint 最后一天,整个 Scrum 团会聚在一台电脑前共同测试。

这里的重要之处在于:记录组织当前的测试流程。你希望每个人都做什么?面对与远程团队成员的合作,你在测试上要做出哪些调整?验收条件,或者“完成”的定义是什么?把一切都写下来,与远程团队讨论,对于如何完成测试,要得到清晰的共同理解。

2. 责任

如果把团队放在一起,让他们“马上开工”,他们能否成功完成项目,很难说。在我看来,在团队开始工作前,一定要讨论清楚各自负责什么,然后写下来。

公司层面是最佳的起始点。两边的责任是什么?与项目有关的首要问题,是项目或产品的相关责任。谁负责规划、设定截止日期?谁负责项目管理?要想回答这些问题,必须划分明确的界线,而且要以契约形式确立。其他因素包括:谁负责管理人?谁确保每隔 3-6 个月团队成员就可以跟管理者讨论自己的个人发展?谁负责培训的决策和组织?

在 Scrum 中,产品负责人和 Scrum Master 是最重要的角色。在瀑布模型中,这些问题都差不多,虽然角色命名有所差异。

在离岸语境中,分配职责最有效的方式,就是让产品负责人在岸,尽量接近客户。离岸团队可以有第二个项目负责人,不过要是项目不大,这么做有可能更复杂。Scrum Master 离岸或在岸都可以。常用的方案有:

A. 在岸产品负责人与离岸 Scrum Master(加上团队)对话。

B. 在岸产品负责人与离岸产品负责人对话。

C. 在岸 Scrum Master 与离岸 Scrum Master 对话。

D. 在岸 Scrum Master 与离岸开发团队对话。

理想状态下,客户或最终用户会在 Sprint 规划会议中与整个团队对话,要是能与(虚拟)Scrum 团队(无论是离岸、在岸还是混合的)坐在一个办公室中,就更好。可是,很多时候,产品负责人会跟客户对话,然后将所有的用户故事告诉团队。无论选择何种方式,整个团队(包括产品负责人和 Scrum Master)都要在 Sprint 规划中使用视频会议。

为了保证责任界定清晰,要回答以下问题:

  • 谁负责描述用户故事的实现(从功能以及技术角度)?是离岸还是在岸 Scrum Master?
  • 产品负责人能描述多少内容?
  • 在 Sprint 中,谁负责决定开发什么、何时开发?如果那个人因为时区差异找不到该怎么办?
  • 谁负责做演示?
  • 演示的目标人群是谁?
  • 谁主导功能测试?

为了完成每个人或者每个角色的责任列表,我会继续阐述如下问题:

离岸协作中有一个关键角色——“流程经理”,也称为“交付经理”、“质量经理”或类似名词。此人的责任在项目之外,其核心工作是确保在岸和离岸团队顺畅沟通。比如,在比较大的环境中,在岸和离岸团队中都有这样的角色会更好。这些流程经理每周开会,评估当前的整体表现。他们不会深入到每天的项目进展细节中,而是有相对外部的视角,为团队沟通的方式提供有益的建议,他们会核查流程,看看是否偏离正常方向;他们还可以保证项目符合合同中的相关条款,以及诸如此类的事情。

我们有一个开发在线约会平台的客户,当时我们使用了上述协作方法。产品负责人位于客户在苏黎世的办公室,Scrum Master 也是。在岸流程经理位于荷兰,离岸流程经理位于乌克兰的基辅,跟团队在一起。CEO 一开始担任产品负责人。在每周定期的会议中,我们发现一个问题:CEO 有时候找不到。团队常有用户故事的问题,但他总是没法直接联系上,这会导致进度延迟。我们决定,苏黎世办公室中需要一个新的产品负责人。这个新产品负责人加入之后,障碍数目迅速下降,开发速度得以提升。很多时候,如果流程经理不能每周见面,这样的问题可能要几周乃至几个月才能发现,拖慢项目进度,影响团队之间的关系。

3. 绩效表现

在公司层面,基本上只有一个问题:这种写作能否交付我们需要的价值?在 Bridge 公司,我们每周都会来回问这样的问题。这不是一次就能回答的问题。在岸和离岸团队必须适应写作。目标是构建合作伙伴关系,要一起写作,要创建协同效应,达成 1+1=3 的结果。毕竟,这才是最重要的。当然,你也可以度量响应时间、工作效率,或者其他与你的 SLA 联系在一起的变量。

如果有多个团队参加多个项目,项目主管也不一样,同样问题也可以在团队层面提出。

需要评估的最重要的绩效,就是个人层面的绩效。团队由人构成,所以我们需要有人评估每个个人的技能。如果(离岸或在岸的)Scrum Master 可以每个月或者每季度完成类似评估,那就最好不过。在 Bridge 公司,我们让客户每个月评估单个团队成员。我们使用 1-10 的评分,以确保清晰明白。一般来说,我们使用下列问题(根据项目某个方面的重要性不同,我们会修改问题):

这个开发人员能否:

  • 满足你的期望?
  • 及时响应你分配的任务?
  • 自己做出有效决策?
  • 理解产品或项目的商业模式?
  • 以开放心态接受反馈?
  • 在答应的时间进度内完成工作任务?
  • 适合你未来的项目?

除了这些“正式”的绩效评估外,还必须建立有节奏的会议。如果你遵循 Scrum,每天的站立会议中、在演示时、在回顾会议中,都可以为团队提供反馈。我们也有与流程经理每周的会议(见前述内容),其中每个离岸地点都会像前文一样,给协作打分。每个季度,我们会与每个成员、我们的 HR 经理、流程经理等,单独开会。某些时候,我们的客户会加入或者接手这个季度个人发展会议。

对于更大规模的企业,《如何组织离岸外包和近岸协作》这本电子书有一章很有价值,讲到 Erwin de Bont,其中提供了一个度量绩效和 KPI 的框架。

结论

要想为远程协作奠定坚实基础,在真正“开工”之前,必须留出“思考时间”。项目启动之前,想想你每天的工作方式,以及如何调整这些工作方式,才能与离岸团队一起工作(流程)。你可以思考如下话题:

  • 我们遵循哪些步骤?
  • 我们如何达成估算?
  • 我们如何列出需求?
  • 我们如何规划?
  • 谁来测试什么?

你可以跟离岸和在岸团队成员一起讨论。会议中或者会议后,要把流程记录在纸面上。描述每个参与者的职责,说清每个细节。最后,要形成一个稳定的框架,可以为每个人、团队、公司提供反馈,互相评价。

现在,你也许在想:“太棒了!我们已经搞定了这些东西,讨论了很久,也都写下来了,最后就把它们放在(虚拟的)抽屉里。没人会再去看它们,我们还是会马上动手干活。”没错,也许你会这么做,因为这是自然而然的趋势。

然而,动脑子的团队就会想:“如何在真正开始开发之间展开协作”。这会建立起人们之间的联系,而且可以创建更有效的工作方式。现在,你要负责不让这些文档躺在抽屉里,在你的定期会议中使用它们,随进度更新它们,让它们成为有生命的计划和实践!

关于作者

Hugo Messer从 2005 年开始,就在世界各地建立和管理团队。推动位于不同文化、地域、时区的人们一起协作,是他的激情所在。无论是离岸还是近岸,他知道如何达成全球化的协作。如果希望更多了解 Hugo,请访问他的网站,也可以阅读他的博客,或是观看 Youtube 上有关他的视频。

查看英文原文: Working together, sitting apart.

2014 年 10 月 22 日 07:592371
用户头像

发布了 479 篇内容, 共 124.0 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

敏捷团队的质量保障赋能

BY林子

质量保障 质量赋能 敏捷测试

案例展示自定义C函数的实现过程

华为云开发者社区

数据库 数据 C语言 字符串

深度解析!滴滴内部开源Spring IoC和AOP源码小册

Java架构追梦

Java spring 架构 aop ioc

浅析整洁架构之道(一) 为什么需要整洁架构

御剑

架构 DDD 整洁架构 The Clean Architecture Robert C. Martin

架构师训练营 - 第 13周课后作业(1 期)

Pudding

软件测试--中间件介绍

测试人生路

软件测试 中间件

IT2.0:中台构建还应从企业业务实际出发

华为云开发者社区

区块链 分布式 安全 数据 身份安全

Linux的进程pid编号极限

程序员架构进阶

Linux 进程

架构训练营 - 第 13 周课后作业 - 学习总结

Pudding

有没有听说过通达快递?

escray

极客时间 极客大学 课程作业 大作业 架构师训练营第 1 期

测开之函数进阶· 第7篇《装饰器装饰类,通用装饰器,有啥区别呢?》

清菡

测试

如何防止短信验证码接口被恶意调用攻击?

香芋味的猫丶

短信 短信防刷 接口安全 验证码

如果腾讯、阿里是弱生态,那么谁是强生态?

ToB行业头条

Linux进程知识干货|收藏

赖猫

c++ Linux 后台开发 运维

获奖名单|七日更挑战成功!

InfoQ写作平台官方

奖品 活动专区 七日更

抽象照进现实

小型火焰🔥

抽象 视觉化

架构师训练营 - 大作业一

Pudding

这道面试题,出错率90%

田维常

面试

掏空各大厂面试题库的“380JAVA面试题(性能优化+微服务+并发编程+开源框架+分布式)”跳槽大厂必备!

Java成神之路

Java 程序员 架构 面试 编程语言

智慧公安防控管理平台搭建,重点人员管控系统解决方案

t13823115967

智慧公安

架构师训练营 - 大作业二

Pudding

分布式身份:重新定义你的“身份”管理

华为云开发者社区

区块链 数据 隐私保护 分布式身份标识

Python的GIL

yunson

Python GIL

别再问我“阿里架构师和普通程序员的区别了!”看完这篇文章之后你就知道自己差在哪了!

Java成神之路

Java 程序员 架构 面试 编程语言

电商平台如何激发内容生态

马踏飞机747

内容 内容分发网络 电商

美团四面,offer已拿;分享个人面经以及刷题经验!

Java成神之路

Java 程序员 架构 面试 编程语言

四年三次获奖,PostgreSQL再度荣获“年度数据库”桂冠!

PostgreSQLChina

数据库 postgresql 开源

OpenKruise 2021 规划曝光:More than workloads

阿里巴巴云原生

阿里云 开源 容器 云原生 调度器

云原生2.0时代,华为云DevOps立体运维实践

华为云开发者社区

DevOps 运维 云原生 华为云

LINUX SHELL脚本攻略

田维常

纵观 ActiveX 平台的兴衰史,看开发控件的技术演变

Geek_Willie

SpreadJS activex

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

一起工作,分开就座-InfoQ