工程师团队和支持团队之间,或者两个不同的工程师团队之间,都可能产生合作竞争关系,如何把这种关系维持在良性层面上,需要团队管理者做多种努力。
在开发这套支付安全系统时,经常要跟其他组合作。比如要跟反垃圾邮件组进行交流,因为他们有一个大型的人工规则系统,我们这边也有。他们的目标是发展成通用化架构,既可以在上面运行人工规则系统,也可以运行各种机器学习模型。我们这套系统的目标与此类似,当时还集中在人工规则,下一步则想支持机器学习,并且这个项目已经讨论通过了。这就面临一个问题,我们是分开做还是进行整合?Facebook在技术上有一个理念,就是拒绝重复开发,与其大家在类似的方向上各自用力,不如整合起来,在一套系统上花更多时间加以完善,集中力量做到极致。
双方讨论了很久,因为涉及的系统比较重要,大概过了三周才定下来,用他们那套系统继续开发,这样,后台的很大一块工作就挪到反垃圾邮件组那边去了。不然的话,我们这边后面还需要更多的人来做。反垃圾邮件组属于网站品质(Site Integrity)这个大组里,从2009年初就开始做相关开发,积累了较丰富的经验。事实证明最后发现两组合作这个决定是对的,他们把我们系统里的一些特色整合到他们的系统里,我们组就不用在框架上操太多心,更多的是提要求,由他们来做。而我们把精力放到和支付欺诈相关的数据挖掘和机器学习建模上面。
当然,在具体实践中,肯定还会碰到矛盾。例如,原来都是我们组自己开发,做什么、不做什么由自己决定,整合以后,如果我们组再想做些什么东西,要与他们讨论,有时还要说服他们优先考虑我们的相关需求。这同样要考验你的沟通说服能力。
工程师和支持团队之间往往存在纠结的合作竞争关系(注意,合作在前)。互联网技术公司中很多人(尤其是聪明人)总是期望工程师对所有问题都能给出一个绝妙的解决方案。但现实是,不是每一个问题都可以或者应该在技术框架下解决。对于一些具体问题,客户支持部门和运营部门会有一些非常深刻独到的见解,工程师则未必行,毕竟很多见解需要不同的专业知识,依靠实践经验。工程师可以在代码中自动收集大量的原始数据,但从原始数据中提炼可靠的信息却并不总能如愿。和很多公司的客户或支持部门不同,Facebook支持部门招募了素质相当高的员工(很多来自美国名校,像我直接接触的反欺诈支持组,20多人中就有3名斯坦福毕业生)。因此,当两群都很聪明的人观点相左时,该听谁的呢?紧张关系在所难免。
工程师之间也会有类似的合作竞争关系。像上面提到的两个系统融合的过程,就是两个工程师团队独立处理类似但不同的问题。往往在这个时候,双方都试图向对方推销自己的解决方案和理念。那么,如何让合作竞争保持在一种健康有序的状态呢?我觉得关键是促进人与人之间的亲密感。人的距离近了,事情就容易解决了。
我花了大量时间在和其他团队建立关系上面。例如,两周一次或者一月一次和其他团队负责人的一对一碰头会。合作越紧密的团队,交流越频繁。我自己或者我的团队成员会有选择地经常参加一些其他团队的会议(我们称之为Friends & Family Meeting)。当为一个共同的大项目工作时,我曾安排不同部门的成员(工程师、支持、数据分析、金融财务)坐到一起进行项目冲刺。这是拉近相互之间距离非常有效的做法,可以减少相互扯皮的机会,(因为互相之间经常会请喝咖啡,可称之为“咖啡外交”)。我也会经常和一些人约吃工作午餐,经常聊的就是家常,以增进感情。有时候,一次长距离的散步也能让人畅所欲言。而这样的紧密关系,在我们面对一个极具挑战性项目的关键时刻,会帮助大家紧紧地抱团闯关。