ThoughtWorks扁平组织的成长和归属感

最近有同事和一些离开我们的同事都提到,现在公司大了,归属感在降低,文化在稀释。ThoughtWorks中国正在面临着成长的烦恼。不少同事担忧,我们是不是为了成长而付出了太大的代价。

归属感的来源主要有两个,一个是共同的使命,一个是我们之间的亲密感。共同的使命不太容易因为成长而受到影响,而亲密感则确实有可能随着组织的扩大而被稀释。很多企业经过了创业阶段后就会面临这样的情况。很多人认为这是企业升级的必然,是实现管理正规化的机会,是用法制代替人治在企业里的体现。但是这其实不是必然,不同文化、不同风格的组织,成长的路径也会不同。ThoughtWorks是否有可能避免这样的宿命呢?

为什么小型的组织更有归属感和亲密感呢?就从ThoughtWorks中国区自己的历史开始吧。在我刚加入的时候,中国office(当时虽然有西安和北京两个小office,但大家都自称中国office)还只有20多人,但我也没有在一开始就感觉到什么归属感。

作为刚进公司的PM,我被要求启动一个新的海外交付项目,技术栈是.NET。团队包括一个不会.NET的Dev,一个面试Dev失败但通过了BA面试的BA,还有一个尴尬发现自己进了一个号称不需要manager的环境的manager(我)。这时候中国office刚开始了第一个大型的offshore交付项目。项目上集中了所有的老员工,还有一帮从海外过来支援的大人物。除了运营团队的几个人,这间办公室里其实就这两个项目团队。头几个月两个团队之间交流实在不多。那帮家伙每天冷眼旁观我们几个新人每天加班到十点半,也没见有人来搭个手。我们也没觉得跟那帮整天开会乱喷架构没见出什么活儿的家伙是一伙儿的。

归属感是什么时候产生的呢?那就是总是在同一个战壕里加班,肆无忌惮地挑战对方的观点(注:就事论事而非抬杠或攻击),周末去team building,分享很多个人和家庭琐事,互相起昵称,甚至有自己团队专属的语言和词汇。一开始这仅仅局限在一个项目团队内部,后来时间长了,一个人数不多的办公室里,大多数人也都能有机会共享这样的经历,归属感自然就产生了。

当一个办公室人数多了的时候,问题出现在什么地方?

首先我们没有办法跟周围所有人都有共享的经历,因此注定没法跟所有人产生这样的亲密感。当周围晃动的大多是不太熟悉的面孔时,自然而然会有情感甚至文化稀释的感觉。另外可能更重要的是,当人多了,层级似乎就不可避免地出现了。很多组织上的决定,政策的出台,甚至自己和项目的安排,既不是来自自己,也不是来自身边相熟相知的人,而是某一帮所谓的上面的“领导”。

要解决这样的问题,我们可以从建立一个相对稳定的较小规模团队开始。同时,鼓励团队承担责任,并给与跟责任相匹配的自主权,让团队在一个规则框架下尽可能少地被干预。

在一个公司里,跟业务密切相关的团队相对更容易形成稳定有内聚力的组织,比如现在已经有了的除了功能团队,业务团队有咨询团队、国内交付团队、海外交付团队,数据和TOC正在形成当中,而以兴趣爱好甚至专业方向聚集起来的松散组织,比如QA、BA、Dev等技术社区,很大程度上依赖于核心组织者燃烧着的热情,从机制上来讲,持续性和内聚力就要弱得多。

那么对于一个大型的办公室来说,什么样的机制能形成类似的效果呢?这让我想起了哈利波特里的霍格沃茨魔法学校(Hogwarts School of Witchcraft and Wizardry ),以及其四大学院 – 格兰芬多(Gryffindor),赫奇帕奇(Hufflepuff),拉文克劳(Ravenclaw),斯莱特林(Slytherin)。我们为什么不能在一个office内部形成多个学院呢?

之所以使用学院这个隐喻(Metaphor),是因为这个划分的单元既不同于职能部门,也不同于包括一个公司完整价值链的业务单元,而是专注于能力、研究和创新的一个组织,看上去更像是一所大学。

比如每当一个学院的人数超过几十人,我们可以就派生出新的学院。这个新的学院可能是原来的学院一分为二,也可以是由一个选拔出来的种子团队发展而成。Office Principal则像是Head Master的角色。

各个学院应该独自冠名,比如Gryffindor听上去就还不错。学院之间则可以形成不同的特色,而学院之内的同学们应该能够有机会获得很多共同的经历。当然,更详细的细节还有待讨论,比如具体的运营模式,领导团队的协作模式等。


更多精彩洞见,请关注微信公众号:思特沃克

Share

ThoughtWorks的同侪压力

毕业季又开始了,ThoughtWorks即将进入新人入职的高峰。一个“一大波新人驾到”的帖子,让我们欣喜地看到又一批小伙伴的加入,也让另一波同学隐隐感受到了前方的压力:我们团队已经有好多新人,怎么办?又要加毕业生了吗?

ThoughtWorks的业务在增长、组织的规模在扩大,有了越来越多的大型项目和大型客户。稍有经验的ThoughtWorker都在带新人,感觉自己总是在付出,很少能从其他人身上吸取养分。以至于很多人都有这么一个感觉——我们的能力和文化在不停地稀释,不少同事感到跟资深同事合作和学习的机会很少,不知道进步的空间在什么地方,没有压力来提升能力。

规模的增长是否一定意味着对追求卓越的妥协?是否一定意味着文化和能力的稀释?我认为不是这样。我们的敌人不是增长,我们的敌人是平庸。以前我在《ThoughtWorks的格调》里说过,“格调的诞生在于对平庸现实的抗争”。这种抗争的驱动力量既来自ThoughtWorker自我。同时,就像《格调》那篇文章强调的那样,这个驱动力还来自ThoughtWorks的这个环境,也就是同侪压力(Peer Pressure)。

压力听上去是个挺负面的词,不过2013年《自然》杂志一篇文章提到的研究表明,适当的压力能起到积极的促进正面协同的行为。从减少碳排放的环保运动,到医学界借助AA(Alcoholics Anonymous:嗜酒者互诫协会)帮人克服酒瘾的做法,我们都可以看到Peer Pressure发挥的正面作用。

对应到ThoughtWorks的上下文,这里汇集了一群追求卓越的人。于是这群人形成了一个追求卓越的环境,让每一个新进来的伙伴都压力山大,努力提升自己,寻求用正确的方法,做正确的事情。当对留在ThoughtWorks工作的原因进行调查时,很多人的回答是,“因为出色的伙伴,出色而努力的伙伴逼着我必须进步。”听到这些,我脑海里浮现出了挥着鞭子的那些我的伙伴们…

Peer Pressure多是发生在经验、水平大致接近的ThouhgtWorker之间。当同时加入公司几年的资深同事逐渐开枝散叶到不同团队,开始承担更多“发展他人【1】”的职责,小伙伴们之间沟通和协作机会似乎越来越少。同时,我们每年都有很多新ThoughtWorker加入。跟加入公司多年的ThoughtWorker相比,大家能力、经验也都很出众,只是不太熟悉ThoughtWorks现有的做法,需要学习和适应,暂时还没有发挥出自己的潜力。谁又没经历过这样的一段儿呢?一出一进,这两者或许就是各种所谓稀释之感的缘由。

稀释之感有时让人不自觉陷入一种“Last Qualified ThoughtWorker Syndrome”,感慨“后面来的人真是越来越不行啊!” 也让我们有些相对资深的同事总是觉得自己能力已经很不错,失去了进步的方向和动力。之所以会有日渐平庸之感,至少一个重要的原因是Peer Pressure的稀释导致的自满和苟且。

我们要驱逐自己内心的苟且,我们还要在身边注入些许压力。

我们如何发现和欣赏身边ThoughtWorker的卓越之处和付出的努力?加入公司的同事大多都有闪光的点点滴滴,未必都能在日常工作中展现,或许我们只是有时候习惯用自己的长处比较旁人的短板。

最后,可能是最重要的,我们是不是对日常工作所期望的水准定得过低了?完成功能拍拍屁股走人,这很多人都能做到,我们是否做到了自己宣称的卓越?当我们深感进度压力巨大的时候,我们的技术决策是否帮助我们提高了团队的产能?当我们抱怨客户保守的时候,我们是否真的研究了客户的业务和所在的市场,提出了最具商业价值的思路和方案?我们的咨询能力是否有提高的空间来更有效地赢得客户关键人员的信任?

大家对这些问题有什么自己的答案?或是大家还有什么不同的思路?

注: 【1】发展他人(Develop Others)是ThoughtWorks胜任力模型的核心胜任力之一。


更多精彩洞见,请关注微信公众号:思特沃克

Share

常用的几种大数据架构剖析

数据分析工作虽然隐藏在业务系统背后,但是具有非常重要的作用,数据分析的结果对决策、业务发展有着举足轻重的作用。随着大数据技术的发展,数据挖掘、数据探索等专有名词曝光度越来越高,但是在类似于Hadoop系列的大数据分析系统大行其道之前,数据分析工作已经经历了长足的发展,尤其是以BI系统为主的数据分析,已经有了非常成熟和稳定的技术方案和生态系统,对于BI系统来说,大概的架构图如下:

可以看到在BI系统里面,核心的模块是Cube,Cube是一个更高层的业务模型抽象,在Cube之上可以进行多种操作,例如上钻、下钻、切片等操作。大部分BI系统都基于关系型数据库,关系型数据库使用SQL语句进行操作,但是SQL在多维操作和分析的表示能力上相对较弱,所以Cube有自己独有的查询语言MDX,MDX表达式具有更强的多维表现能力,所以以Cube为核心的分析系统基本占据着数据统计分析的半壁江山,大多数的数据库服务厂商直接提供了BI套装软件服务,轻易便可搭建出一套Olap分析系统。不过BI的问题也随着时间的推移逐渐显露出来:

  • BI系统更多的以分析业务数据产生的密度高、价值高的结构化数据为主,对于非结构化和半结构化数据的处理非常乏力,例如图片,文本,音频的存储,分析。
  • 由于数据仓库为结构化存储,在数据从其他系统进入数据仓库这个东西,我们通常叫做ETL过程,ETL动作和业务进行了强绑定,通常需要一个专门的ETL团队去和业务做衔接,决定如何进行数据的清洗和转换。
  • 随着异构数据源的增加,例如如果存在视频,文本,图片等数据源,要解析数据内容进入数据仓库,则需要非常复杂等ETL程序,从而导致ETL变得过于庞大和臃肿。
  • 当数据量过大的时候,性能会成为瓶颈,在TB/PB级别的数据量上表现出明显的吃力。
  • 数据库的范式等约束规则,着力于解决数据冗余的问题,是为了保障数据的一致性,但是对于数据仓库来说,我们并不需要对数据做修改和一致性的保障,原则上来说数据仓库的原始数据都是只读的,所以这些约束反而会成为影响性能的因素。
  • ETL动作对数据的预先假设和处理,导致机器学习部分获取到的数据为假设后的数据,因此效果不理想。例如如果需要使用数据仓库进行异常数据的挖掘,则在数据入库经过ETL的时候就需要明确定义需要提取的特征数据,否则无法结构化入库,然而大多数情况是需要基于异构数据才能提取出特征。

在一系列的问题下,以Hadoop体系为首的大数据分析平台逐渐表现出优异性,围绕Hadoop体系的生态圈也不断的变大,对于Hadoop系统来说,从根本上解决了传统数据仓库的瓶颈的问题,但是也带来一系列的问题:

  1. 从数据仓库升级到大数据架构,是不具备平滑演进的,基本等于推翻重做。
  2. 大数据下的分布式存储强调数据的只读性质,所以类似于Hive,HDFS这些存储方式都不支持update,HDFS的write操作也不支持并行,这些特性导致其具有一定的局限性。

基于大数据架构的数据分析平台侧重于从以下几个维度去解决传统数据仓库做数据分析面临的瓶颈:

  1. 分布式计算:分布式计算的思路是让多个节点并行计算,并且强调数据本地性,尽可能的减少数据的传输,例如Spark通过RDD的形式来表现数据的计算逻辑,可以在RDD上做一系列的优化,来减少数据的传输。
  2. 分布式存储:所谓的分布式存储,指的是将一个大文件拆成N份,每一份独立的放到一台机器上,这里就涉及到文件的副本,分片,以及管理等操作,分布式存储主要优化的动作都在这一块。
  3. 检索和存储的结合:在早期的大数据组件中,存储和计算相对比较单一,但是目前更多的方向是在存储上做更多的手脚,让查询和计算更加高效,对于计算来说高效不外乎就是查找数据快,读取数据快,所以目前的存储不单单的存储数据内容,同时会添加很多元信息,例如索引信息。像类似于parquet和carbondata都是这样的思想。

总的来说,目前围绕Hadoop体系的大数据架构大概有以下几种:

传统大数据架构

​之所以叫传统大数据架构,是因为其定位是为了解决传统BI的问题,简单来说,数据分析的业务没有发生任何变化,但是因为数据量、性能等问题导致系统无法正常使用,需要进行升级改造,那么此类架构便是为了解决这个问题。可以看到,其依然保留了ETL的动作,将数据经过ETL动作进入数据存储。

优点:简单,易懂,对于BI系统来说,基本思想没有发生变化,变化的仅仅是技术选型,用大数据架构替换掉BI的组件。

缺点:对于大数据来说,没有BI下如此完备的Cube架构,虽然目前有kylin,但是kylin的局限性非常明显,远远没有BI下的Cube的灵活度和稳定度,因此对业务支撑的灵活度不够,所以对于存在大量报表,或者复杂的钻取的场景,需要太多的手工定制化,同时该架构依旧以批处理为主,缺乏实时的支撑。

适用场景:数据分析需求依旧以BI场景为主,但是因为数据量、性能等问题无法满足日常使用。

流式架构

在传统大数据架构的基础上,流式架构非常激进,直接拔掉了批处理,数据全程以流的形式处理,所以在数据接入端没有了ETL,转而替换为数据通道。经过流处理加工后的数据,以消息的形式直接推送给了消费者。虽然有一个存储部分,但是该存储更多的以窗口的形式进行存储,所以该存储并非发生在数据湖,而是在外围系统。

优点:没有臃肿的ETL过程,数据的实效性非常高。

缺点:对于流式架构来说,不存在批处理,因此对于数据的重播和历史统计无法很好的支撑。对于离线分析仅仅支撑窗口之内的分析。

适用场景:预警,监控,对数据有有效期要求的情况。

Lambda架构

Lambda架构算是大数据系统里面举足轻重的架构,大多数架构基本都是Lambda架构或者基于其变种的架构。Lambda的数据通道分为两条分支:实时流和离线。实时流依照流式架构,保障了其实时性,而离线则以批处理方式为主,保障了最终一致性。什么意思呢?流式通道处理为保障实效性更多的以增量计算为主辅助参考,而批处理层则对数据进行全量运算,保障其最终的一致性,因此Lambda最外层有一个实时层和离线层合并的动作,此动作是Lambda里非常重要的一个动作,大概的合并思路如下:

优点:既有实时又有离线,对于数据分析场景涵盖的非常到位。

缺点:离线层和实时流虽然面临的场景不相同,但是其内部处理的逻辑却是相同,因此有大量冗余和重复的模块存在。

适用场景:同时存在实时和离线需求的情况。

Kappa架构

​ Kappa架构在Lambda 的基础上进行了优化,将实时和流部分进行了合并,将数据通道以消息队列进行替代。因此对于Kappa架构来说,依旧以流处理为主,但是数据却在数据湖层面进行了存储,当需要进行离线分析或者再次计算的时候,则将数据湖的数据再次经过消息队列重播一次则可。

优点:Kappa架构解决了Lambda架构里面的冗余部分,以数据可重播的超凡脱俗的思想进行了设计,整个架构非常简洁。

缺点:虽然Kappa架构看起来简洁,但是施难度相对较高,尤其是对于数据重播部分。

适用场景:和Lambda类似,改架构是针对Lambda的优化。

Unified架构

​ 以上的种种架构都围绕海量数据处理为主,Unifield架构则更激进,将机器学习和数据处理揉为一体,从核心上来说,Unifield依旧以Lambda为主,不过对其进行了改造,在流处理层新增了机器学习层。可以看到数据在经过数据通道进入数据湖后,新增了模型训练部分,并且将其在流式层进行使用。同时流式层不单使用模型,也包含着对模型的持续训练。

优点:Unifield架构提供了一套数据分析和机器学习结合的架构方案,非常好的解决了机器学习如何与数据平台进行结合的问题。

缺点:Unifield架构实施复杂度更高,对于机器学习架构来说,从软件包到硬件部署都和数据分析平台有着非常大的差别,因此在实施过程中的难度系数更高。

适用场景:有着大量数据需要分析,同时对机器学习方便又有着非常大的需求或者有规划。

总结

以上几种架构为目前数据处理领域使用比较多的几种架构,当然还有非常多其他架构,不过其思想都会或多或少的类似。数据领域和机器学习领域会持续发展,以上几种思想或许终究也会变得过时。


更多精彩洞见,请关注微信公众号:思特沃克

Share

CSS-in-JS,向Web组件化再迈一大步

简介

CSS-in-JS是什么,看到这个词就能大概猜到是在JavaScript里写CSS,那为什么要在JavaScript里写CSS呢,像之前一样写在css文件里哪里不好么?

在介绍这个概念之前,先来回顾一下在日常编写CSS代码时都有哪些痛点:

  • 全局污染 – CSS的选择器是全局生效的,所以在class名称比较简单时,容易引起全局选择器冲突,导致样式互相影响。
  • 命名混乱 – 因为怕全局污染,所以日常起class名称时会尽量加长,这样不容易重复,但当项目由多人维护时,很容易导致命名风格不统一。
  • 样式重用困难 – 有时虽然知道项目上已有一些相似的样式,但因为怕互相影响,不敢重用。
  • 代码冗余 – 由于样式重用的困难性等问题,导致代码冗余。

进化史介绍

在CSS的进化历史上,出现过各种各样的框架致力于解决以上的问题:

  • SASS, LESS – 提供了变量、简单函数、运算、继承等,扩展性、重用性都有了很大的提升,解决了一些样式重用冗余的问题,但是对于命名混乱问题的效果不大。
  • BEM (.block__element–modifier) – 比较流行的class命名规则,部分解决了命名混乱和全局污染的问题,但class定义起来还是不太方便,比较冗长,而且和第三方库的命名还是有可能冲突。
  • CSS Modules – 模块化CSS,将CSS文件以模块的形式引入到JavaScript里,基本上解决了全局污染、命名混乱、样式重用和冗余的问题,但CSS有嵌套结构的限制(只能一层),也无法方便的在CSS和JavaScript之间共享变量。

可以看一个简单的CSS Modules例子了解一下:

生成的dom结构如下图,基于css文件中的class名称生成了唯一的class名称,样式会定义到生成的class上。

styles打印出来如下图,定义了css中的class名字和生成的唯一class名字的对应关系。

可以看出,以上框架都解决了不少痛点,但也还是各有一些不足,当然CSS-in-JS也并不是完美的解决了所有问题,我们先来详细介绍一下。

流行框架介绍

现在随着组件化概念的流行,对从组件层面维护CSS样式的需求日益增大,CSS-in-JS就是在组件内部使用JavaScript对CSS进行了抽象,可以对其声明和加以维护。这样不仅降低了编写CSS样式带来的风险,也让开发变得更加轻松。它和CSS Modules的区别是不再需要CSS样式文件。

来看一下几个流行的CSS-in-JS框架六个月内的下载趋势

我们来看看几个下载量靠前的框架的风格是什么样的:

styled-components

先来看看下载量最高的styled-component的代码风格:

从上图可以看出,Title和Wrapper都是框架包装好的component,可以直接在react的jsx语法中使用,在包装component的时候还定义了标签分别是h1和section。此段代码产生的html dom如下图所示:

可以看到section和h1上分别生成了唯一的class名称,样式也对应的定义在生成的class上了。

这样就可以解决命名混乱和全局污染的问题。组件相关的代码都在一起,可以统一查看,也可以方便的重用样式。

glamorous

再来看看glamorous,这个框架是PayPal开发的。(前两个logo看下来,恍惚间感觉进了化妆品专柜)。

和styled-component不同的是,glamorous的样式直接以attribute的形式定义在了dom上,之后虽然也为其生成了class名称及样式,但这种以attribute定义的方式对伪类选择符(如 :hover)支持的不好,会带来一些不方便,而且需要再记住一套attributes名称和值与真正的css样式代码的对应关系。

JSS

和上面两个框架类似,jss也是会定义styles对象,并附到component上,最后生成的dom也是会有生成的唯一class名称,并有对应的样式,但样式并不是真正的css语法,而是对象的属性和值,这样也是对伪类选择符支持的不好,而且也需要记住属性和css样式代码之间的对应关系。

Radium

Radium在定义样式对象上看似和其他相似,但在生成dom结构的时候并没有生成唯一的class名称,而是直接把样式放到了style属性上,这样会带来诸如可读性差、CSS权重过大、不支持伪类选择符等问题。

测试

下面再来看一个styled-component提供的基于jest的测试框架:

jest-styled-components

这个框架主要是通过生成Snapshot并比较的方式来保证component样式的每次更改都会被检测到,并且样式是期望的样式。这样就又降低了重构CSS样式带来的风险。

优劣势总结

看了这些框架后,可以发现CSS-in-JS的优势还是挺多的:

  • 因为有了生成的唯一class名称,避免了全局污染的问题
  • 唯一的class名称也解决了命名规则混乱的问题
  • JavaScript和CSS之间可以变量共享,比如一些基础的颜色和尺寸,这样再当需要在JavaScript里计算一些高度的时候,可以取到和dom相关的一些padding,margin数值,统一管理
  • 只生成页面需要用到的代码,缩减了最终包的大小,提升了性能
  • CSS的单元测试增加了样式重构的安全性

但是CSS-in-JS也存在着一些不足和争议:

  • 有些观点觉得JS和CSS的关系没这么近,把CSS写进JS里引入了新的一套依赖,增加了复杂度,新人加入项目后需要学习的东西就更多了,也让学习曲线更加陡了
  • 对前端框架确实有些依赖性,更适合于组件化的框架,如React等
  • Debug的时候需要花更多的功夫才能找到对应的样式代码
  • 覆盖第三方插件样式时会有权重不够的问题
  • Lint工具对于JavaScript内部的CSS代码样式支持的还不够

最后

在ThoughtWorks最新一期的技术雷达(CSS-in-JS | Technology Radar | ThoughtWorks)里,它的等级是Assess,表示的是:“值得追求。重要的是理解如何建立这种能力。企业应该在风险可控的项目中尝试此技术。” 所以最后想说的是,虽然它还是有些不足和争议,在应用之前需要多角度衡量一下对项目的适合度。但它的优点也很多,确确实实解决了很多痛点,而且与web组件化的方向高度一致,希望大家在条件合适的情况下多多尝试,多多反馈,这样也能促进整个CSS编码体验的继续进化~


更多精彩洞见,请关注微信公众号:思特沃克

Share

浅谈敏捷离岸团队沟通

很多人说,要让团队敏捷, 先让团队坐在一起。没错,“坐在一起”这区区几个字,可以解决团队从沟通到信任到效率提升的不少问题。作为团队的业务分析师,我们很多时候都扮演着产品端和开发端的黏合剂,最理想的工作环境可能是坐在产品团队和交付团队中间;办公室就是大舞台,随时都能展现自己的十八般武艺,把“坐在一起”的效应发挥到极致。

然而,由于种种原因,我们不免会遇到跨文化、跨时区的离岸团队。当“坐在一起”的舒适圈被打破后,很多问题则接踵而来:“见都没见过的团队成员怎么建立信任?”、“人都找不到怎么高效沟通?”、“时区空间不一致怎么组织工作坊?”经历了一个离岸团队的从无到有,淌过了大大小小的坑,笔者将所见所得整理成本文,希望能对同样纠结于此的同行们有一点点裨益。

按需互访

“见都没见过的团队成员怎么建立信任?” 答案恐怕是“无法建立”。别怪我这回答太消极任性,对于远隔重洋甚至黑夜颠倒的离岸团队而言,留言和视频所带来的困惑和乏力往往多过友好度和安全感。尤其对于那些毫无离岸合作经验的客户来说,面对这份未知和“不可控”往往是自我保护甚至抗拒的。

合作双方的互访则是建立信任的捷径,通过这扇窗户,一方面可以了解双方的企业文化、工作习惯乃至个人的性格特点;另一方面能够利用面对面工作坊高效梳理规划,最大程度保证后续项目推进方向的正确性。在条件允许的情况下,在项目伊始就建立互访机制:

  1. 在项目的重要节点,例如合作初始、项目里程碑、检查点进行在岸交流;
  2. 设立双向固定互访周期,如每三个月/半年。

当有机会去到客户现场,该如何充分利用短短数周或是数日?从个人经验来看,你或许可以:

  1. 做好充分的行前计划:不要把它当成签证材料准备中的“例行公事”。海外出差费时费力,为了确保效果,必须提前沟通准备并了解项目干系人的工作/休假安排,重要会议提前发好会议邀请,最好以邮件形式确认你的计划。相信我,你一定不想像我一样,人都到了客户现场以为一切自有安排,才发现接头人马上要休长假,独留“一脸懵逼”的自己。
  2. 尽量结识多的人:哪怕你自认不是“交际花”,哪怕自己的英语不够好,哪怕ta算不上直接干系人甚至来自不相干的团队/部门;当你们未来有工作上的交集,有一面之缘也大大好过冰冷的邮件。
  3. 定期和离岸团队沟通:即使有完整的记录,出差回来一次性输出的效果恐怕也差强人意。就算再忙再紧张,也要定期与团队交流,沟通自己在客户现场的收获,了解团队的问题和想法,并及时反馈到客户现场的工作计划中。

当客户即将来访,该如何抓住深化合作的机会?

  1. 最重要的依然是计划:提前为客户来访的工作内容做好细致的安排准备,双方设置好来访预期和目标,最大程度利用好团队与客户成员共同工作的时间。
  2. 提升对客户的影响力:帮客户站得更高,看得更广。尽力帮助他们在来访过程中更好地感受我们的工作方式和文化氛围,甚至以我们为窗口,介绍目前国内市场上的先进案例和最佳实践。
  3. 为客户做好行前准备和安排:这包括签证准备、交通酒店及个人饮食过敏源等在内的各类生活细碎。很多客户并没有到访中国的经验,对这个陌生又熟悉的国家甚至存在很多误会和担心。我们可以简单准备一份包含城市介绍、物价水平等信息的行前小材料,让他们不至于在踏上飞机前对即将来访的城市一无所知。

搭建沟通框架

对于“坐在一起”的敏捷团队,沟通会在工作和相处中自然而然地发生。而当我们所处的是一个离岸团队,很多沟通问题则会因为物理位置、语言文化障碍、时差而被放大;最危险的可能是,你不知道你不知道;而某些沟通隔阂可能会在某些时刻产生致命的影响。在项目初始就定义好沟通的渠道和方式在这样的环境下显得尤为重要。简单来讲,我们最应该关注的是:谁和谁沟通,通过什么形式沟通,达成怎样的目标,要有怎样的沟通频次。

(在项目初始与客户达成对重要会议的一致理解)

(对团队成员之间的沟通渠道需要统一和确认)

巧用工具

“时区空间不一致怎么组织工作坊?”针对这个问题,恐怕不仅仅是需求分析相关的工作坊,离岸团队的种种限制对我们许多熟悉的组织技巧和习以为常的敏捷实践都提出了挑战。互访是类似昂贵的特效药,而真正要身体好,还离不开悉心的日常调养。合适的工具,则是这里的关键。

1.Always On:如果能有超过四个小时的工作时间重叠,Always on一定要有。实时视频能增加许多亲切感和趣味,拉近团队成员的距离;更能让包括站会、desk check在内的很多敏捷实践变得容易。有了Always On,信息不回抬头喊一喊,开会了朝屏幕招招手,方便直接,也算对得起客户给的“魔镜”名号。

2.远程协作编辑软件:市面上的远程协作软件让人眼花缭乱,在这里分享几个你也许正在寻找的:

  • Keynote-Collaborate Mode: Keynote算得上我们目前使用最为频繁的演示软件,而它的Collaborate Mode这项高能技巧好像并不是那么知名。协同编辑除了能在紧张的项目节奏中提高团队效率,还可以帮助在重要演示环节/工作坊中与客户进行快速确认。举个例子,如果有两人共同参加工作坊,一人作为组织者与客户交流,另一位则可以实时将产出记录到Keynote中,在工作坊结束前第一时间呈现给客户进行确认。

(只需点击标题右下方的Collaborate,输入你要协作编辑对象的iCloud邮箱,即可将当前文件分享给对方进行协同编辑)

  • RealtimeBoard: 如果让我列举“2017年度最好用工具”,RealtimeBoard一定榜上有名:它是我目前能找到的最好的sticker board,是组织远距离工作坊的最佳搭档。除了最常用的反馈会议、头脑风暴外,RealtimeBoard提供了许多针对不同场景的实用模板,例如用户故事地图, 产品演进路线。

(RealtimeBoard: 五花八门的实用模板)

(团队的第一次远程回顾会议)

3.即时通讯工具:每个人每天都要用到,自然必不可少。 在与海外客户的合作中,常见的主要有Skype, Lync(Skype for business), Slack,HipChat, Hangouts等。目前我们项目正在用的是Hipchat,比较突出的亮点是不用翻墙、可以与Jira, Github集成,缺点主要是记录保存时间较短。

4.项目资产管理工具:个人认为,离岸团队要比在岸团队更加注重文档,良好的文档整理能降低沟通成本,也让沟通有迹可循。关于用户故事/电子看板,常见的有Jira, Trello, Pivotal Tracker, Mingle;关于其他项目相关文档管理,一般使用Confluence, Google Drive, DropBox等。

文化互通

文化差异是每个海外合作团队所必须面对的。由于文化背景的不同,团队成员们有不同的语言体系、做事方式,继而对合作产生一些显而易见或者不知不觉的影响。它本身是一个中性词,甚至褒义词:两种截然不同的文化碰撞,让我们能够交到大洋彼岸的朋友,了解彼此的文化,是多么幸运的一件事。而它也有可能成为“问题”:因为缺乏了解,导致双方产生误解甚至不信任,影响健康的合作关系。

承认并沟通合作双方的文化差异永远不会太早,在项目开始前/初期就应该主动地向客户介绍我们的文化:这包括了大文化,即国与国之间的文化差异,例如中国人可能会相对内向,不说话并不代表没有关注讨论;也包括了小文化,即组织和团队的文化差异,例如我们会相对自管理,不存在传统的上下级观念。

我们总是在谈论良好的团队氛围对项目成功的重要性。良好的团队氛围永远不是从单纯的工作沟通中来的,而是必须来自于每一个活生生的人。当团队成员之间建立起个人关系,很多问题都可以迎刃而解。

(当遇到文化碰撞,团队里需要有人挺身而出)

以上寥寥几点来自笔者有限的项目实践,不免有所遗漏或有待商榷。但毫无疑问的是,离岸团队需要更用心和精巧地经营,而成功也往往离不开各个角色的配合与贡献。


更多精彩洞见,请关注微信公众号:思特沃克

Share