hero-image

1 引子

大约在半年前,笔者去澳洲启动了一个新的项目,在项目初期只有笔者一人,到后来,随着需求的增加,团队也在慢慢的在增加,六月份是3个人, 7月10人, 到12月底已经28个人了。也就就是说一个全新的团队从启动之初到半年之后增加了将近30人,这还是笔者努力控制加人节奏的情况下。其中新人有19个人(完全没有公司经验),这些新人中还包括5个小鲜肉毕业生。有人会觉得说这是一件大大的好事,有人会觉得这是一件应该避免的事。

觉得是好事的同学,会这么想,团队规模大了,能够大展拳脚了,leverage的人多了,资源也向自己倾斜。
觉得应该避免这么完的同学,会这么想,短期,快速且绝大多数都是新人的团队启动方式显然太过激进,尤其是最为团队我们还承担着体现公司技术实力的重担。

笔者认为不到万不得已,还是不要这么玩火,这是一件风险极高的有挑战的好事!

2 组团之前

但是,万一幸运女神降临到你的头上,先深吸一口气,然后,你需要问自己三个问题:

  • 利益相关者期望是什么?
  • 这么快的加人,有什么坑需要我来填?
  • 我要在这个过程中扮演什么角色?
  1. 利益相关者期望是什么?
    一切没有原因的加人,都是耍流氓。就团队而言,利益相关人有三类:客户,公司,个人。

    客户对团队的期望。在上人之前,你需要弄明白的是,为什么要加这么多人,这个团队组件之后,客户对该团队有什么样的期待呢。有些客户是因为这个财年的钱有可能花不完,不把这些经费烧完不甘心,当然这种土豪客户还是稀有动物;有些客户是因为突然增加的商业计划;有些客户是因为有更换供应商的需要,基于技术,行业经验,解决方案上的优势,在其他供应商和你之间TA选择了后者;了解了客户的期望之后,不要给客户设定太高的期望,尤其是不要给他这种错觉——想要多少人都行,这都是小事一件。那句话怎么说来着,“少承诺,多交付!”

    公司对团队的期望。公司处于各种考虑,会对团队有不同的期望。比如,希望团队能够把该客户发展成战略客户,因为客户所在行业能够提高公司竞争力;或者,希望能够体现公司的技术影响力;或者,借此培养公司某一领域(大数据,数据分析,移动应用等)的技术能力和实践。不同的期望也就意味着不同的人员组成,你不会期待一个由毕业生组成的团队在客户那里体现公司的技术深度,同样你也不会期望由一堆技术牛人组成的团队,仅仅为客户提供产品维护工作。理清这个期望,也有助于团队争取合适的资源。

    个人对团队的期望。每个人都有自己的诉求,有的人是为了学习先进的生产关系,有的人是为了向牛人致敬,有的人想带带团队学习学习管理技能,有的人想增强自己和客户沟通的能力。你不会想要把一个只想做前端的开发放到devOps的团队里,你也肯定不想把一个iOS开发放进一个Java后台的坑里,因为这样做只能是互相伤害罢了。所以,你不仅需要找到技能比配的人,更为关键的是目标。

  2. 这么快的加人,有什么坑需要我来填?

    理清楚不同的期望,对于你如何挑选合适的团队成员是非常关键的,当然这是理想情况啦!因为,给你的人永远要缩水于你想要的人,比如能力和经验。 “我需要1个资深开发,2个高级开发再加上3个初级开发”, “好的,知道了,你需要6个开发”, 第二天,你收到了1个高级开发,2个初级开发外加3个毕业生。 回到这个问题本身,是多种多样的,如果要给出一个定义的话,那可以是这样子, “期望和现实之间的差距”。如果在加上限定词的话,可以是“由于过快的加人导致的团队无法达到期望的阴影面积”。好了,定义已经有了,那么我们来看看有什么坑呢?如果团队在任何方面和期望有差距的话,就会形成各式各样的坑,比如:技术坑,沟通坑,项目管理坑,交付坑,业务目标坑,团队建设坑...。那么问题来了,谁来填呢?还用问吗!

  3. 我要在这个过程中扮演什么角色?

    你要做的是搭建一个平台,一个框架体系,供团队成员在里面愉快的和客户玩耍。当然不是说你就是上帝,你说要有风就有风,你说要有树就有树,你更多的是一个协调者,参与者,谈判者,组织者,然后和很多人一起,比如说,客户,团队核心成员等,你起动手搭建这个框架。

    游戏规则非常重要,千万不要成为黑哨,没人知道你的规则是什么,也别说什么没有规则就是最好的规则,或者我们是自组织团队,不需要规则,自组织团队已经是很高境界了,没有多少团队能够达到,所以也就不要指望新组建的团队能够在短时间内成为那样一种理想的存在。

    当然,我们的目标不是限制,不是约束,而这个规则/框架的目标是为了能够支持该团队成为一个高效的交付团队。

3 团队建设

好了,认清形式,弄明白自己的目标,接下来就是具体怎么搞了。

技术面

核心目标:构建的是团队的能力

没有任何一个团队能在组建初期就达到技术能力的最大化,抛开团队协作的成分来看,团队至少需要了解目标客户的商业模式,业务需求,目标用户等,如果涉及遗留系统,还需要对它们进行深度学习,以便为维护,新特性开发或者和新系统集成时做些铺垫。因此团队的能力是需要培养的。不过,同样是能力建设,它确要被分开来看,目的是:给客户信心(能力提升还能给客户提供信心,是的,没错!),为团队设定能力提升目标。怎么分能达到这个两个目的呢?一般会这个分:技术能力应用能力。 来,先看下图img-large-size-height

图中有两个蛛网图,分别体现了团队的这两种能力。第一种能力,Technical Skill,主要是指的普遍使用的技术能力,比如.Net技术栈的能力,前端能力,devOps能力,构建的能力,版本管理的能力,自动化测试的能力等,这些能力的特点就是和客户没有任何关系,不管是和客户A合作还是客户B合作,这些都是不已客户为转移的;第二种能力,Application Skill,主要是指与客户强相关的应用能力,比如客户不同系统,代码库,基础设施,架构,甚至包括编码规范。当然,既然和客户强相关,那么不同客户的该类能力的差别就极大了,可以说是客户定制化能力。

继续回答上面的问题,第一种能力给客户信心,第二种能力为团队提供能力提升目标。较为理想的状态是前者能力足够强,后者能够明确识别被给出团队需要提升的量化目标。我们来进一步解释一下,怎么就算足够强?和如何量化?目标怎么确定?

先说如何量化,要做到量化就需要标准,它可以是客户定义或者团队定义,其实都没有关系,重点是双方能够达成一致。当然由团队定义的标准且有客户赞同是最好的,因为这样能够量化标准可以从团队的实际情况出发,让能力体现最大化。

再说怎么算够强,这是相对概念,首先可以定义出满足客户需求的技术能力要达到何种量化水平,再给出当前团队的评估,最差情况也需要刚刚满足开发要求,比如客户想要做一个类淘宝的电商平台,而你的团队能力只能做静态门户网站,这显然是不够的。客户对团队的信心和两者之间的正向差距是成正比的。

最后说目标怎么定,和客户一起制定,只需要保证步子不要迈的太大即可,且目标应该是阶段性的而非一次性。有了目标和现状,之间的差距就显而易见,于是自然而言的就驱动出各种能力提升计划,它可以是双方出差做知识分享,可以是结对编程,可以是一系列的workshop,以及持续的代码审核等等。

管理面

核心目标:构建的是团队的协作体系

团队管理的核心是如何最大化团队的生产效率,并且随着团队的发展,团队管理的重点也在迁移。以刚刚成立团队为例,管理的目的如何让组员快速进入状态,清楚自己的和别人的职责,以及对事物的一致看法(使命,愿景,价值观,笔者会在之后的文化面提到)。在该项目上,笔者主要从以下三个方面出发:

  1. 标准的新人上手流程。在该项目中快速启动是核心目标,因此如果和让新人能够快速上手,了解客户的业务模式,组织架构,现有系统以及架构,代码库,如何构建部署,已经日常的事物,如请假等,我们把它称之为《新手上路指南》。不论何种形态的指南,有一个很重要的原则就是——宏观到微观。切记新人刚刚进入团队就开始熟悉代码,这样做损失的不仅是长期利益,甚至也牺牲了短期利益,因为不知道为什么而做出的决定,写出的代码不会好的!下图是该项目启动初期,团队快速增加时制定的上路指南,它是一个5天的活动,帮助新人了解客户,了解项目情况,而80%的活动都是在了解宏观的项目上下文,只留给新的开发人员20%的时间真正看看,了解一下代码库。img-large-size

  2. 标准化工作流程。 一提到流程,很多人可能都会想到臃肿,复杂,冗长,无用,显然这不是实情。千万不要相信『没有流程是最好的流程』之类的理论,否则就这个团队要么像大雁那样自组织,要么就只能布朗运动了,当然成为后者的概率是不言而喻的。标准化工作流程的目的是让这个团队有组织有纪律的运行起来。

需要制定哪些流程呢?这个问题的答案是随着团队的不同,同一团队的不同阶段而不一样。笔者的原则是,取决于当前团队面临的问题,以为未来的发展目标。在团队刚刚组件的时候,我们标准化了这么几个流程:基础开发流程,请假流程。随着人员不断增加,新的问题出现了,比如,提交代码后构建失败的概率大大增加,团队成员能力参差不齐,被标准化的流程又增加了:构建提交流程,请假流程,分享机制。在后来的时候,笔者开始未团队的未来发展考虑了,我们需要提现团队的技术领导力,于是流程又有新成员:每2周一次的小组长会议,以及同频率的核心成员例会,分别用于项目进度和风险的更新,追踪,以及对未来发展的思考和行动。

  1. 定义组织结构。 看到这个话题,可能读者会想,不就是一个团队嘛,有必要搞什么组织架构吗?会不会太重了?还有我们是扁平化的组织,不要搞那么多层级好不?先回答第一个问题,有没有必要不是说出来的,而是根据实际情况来,团队组建初期,10人以下的时候,Team Lead(以下简称TL)怎么搞都行,就那几个人,双手是能数得过来的,每个人在做什么、需要什么样的帮助、进度怎么样了、能力如何都一清二楚(具体如何从个人转型团队leader可以参见<<从自我驱动到带领10人团队>>)。当团队人数增加到15,20人时,TL就吃不消了。第二个问题,太重吗?那就不一定了,这个完全取决于TL,如果要把组织结构归类的话,不妨把它暴力的不负责任的归为:提升组织效率的和降低组织效率的,前者肯定不重,后者不言而喻,至于组织效率如何定义,则不在本文的讨论范畴。至于第三个问题,层级不意味着不扁平,扁平也不意味着没有层级,两者是没有因果关系的。下图是笔者团队在4个月时候的样子img-large-size-height

由于团队成员的增加,笔者已经不能照顾到每个人,同时也到了想想未来这么大的团队如何发展的时间点,因为核心成员和STL这两种角色被提出。前者和笔者一起,规划,制定下一步发展计划,后者和笔者一起保证项目的正常交付。

文化面

核心:构建的是团队的行为模式

什么是文化? 本文并不研究它的严格定义,笔者认为它就是没有明文规定的团队的行为模式。

比如TA收到指责时的反应,当TA听到不同声音时的行为,当TA发现上级的决定有可能是错误的时的反应,当TA发现别人的开发进度很慢且很有可能会让团队延迟发布时的反应,各种各样不同的行为和反应最终在团队内形成一种模式,没有具体规定和流程,但是人人遵循。在刚刚笔者团队刚刚成立的时候,团队文化建设并没有提上日程,因为人数还很少,但是四个月之后,人数增长到20+,有毕业生,有社招,有自己公司的。那时候出现了一个显著问题,就是大家不愿意表达自己真是的感受。边现在哪里呢?毕业生在团队中感到迷茫,但是他们仅原因私下在自己的小圈子里面分享这些,Senior开发感到迷茫,觉得自己没有表现出应有的价值,但他们也仅仅在团建时和一小撮人私下里吐个槽。显然,团队体量扩张的速度超出了团队的安全感的增长速度,这个混合团队已经没法给大家提供心里上的安全感了。笔者做了这几件事儿:

  • 人员能力培养计划,该计划主要是通过知识分享来提高大家对项目中使用到的关键技术的理解
  • Senior人员胜任力模型,主要描述了作为一个高级开发工程师,TA需要在团队中表现出的行为准则
  • 反馈导入,明确大家对于反馈的正确态度,如何给别人提供反馈以及如何收集反馈,详情请参见《你会给别人提反馈吗?

前两件事情是在解决个人能力以及团队对自身期望的问题,希望能够通过这种方式,鼓励他们做出与与自己定位想匹配的事情,换句话是说,降低了关键行为的心理门槛。

当你做完这些,你就能稍稍喘口气了,至少你有很大概率活下来了。

posted @ 2017-04-16 09:36 杨栋 阅读(5925) 评论(8) 推荐(18) 编辑
摘要: 同病相连 最近跟一位同事谈心,他非常热爱技术,是一个不折不扣的极客,不仅如此他有很强的执行力,并能持之以恒,从他的身上我看到了未来几年将会成长起来的一个技术牛人。但是,他有比较严重的焦虑症,比如:几天没有看书就会非常纠结,通常情况是他需要花时间来陪孩子和家人,他会感觉自己浪费了宝贵时间,精力无法集中 阅读全文
posted @ 2016-02-15 16:41 杨栋 阅读(8230) 评论(30) 推荐(52) 编辑
摘要: 新的机会有一天,你的老板找到你,他说你这段时间的表现都非常不错,我很欣赏你,正好呢,另外一个团队需要一个头,于是他决定把你提拔为那个团队的项目经理。这时的你可能会这么想,我将屌丝逆袭迎娶白富美。如果你,正在经历这种转变,从自我驱动到带领团队这么一个过渡阶段,那么恭喜你已经成功的,走过了《领导梯队》的... 阅读全文
posted @ 2015-09-24 09:30 杨栋 阅读(3684) 评论(6) 推荐(8) 编辑
摘要: 几个例子你会提反馈吗?不急回答,我们先来看几个例子。例子一:项目经理:“xxx,我本来对你的期望特别高,但是你让我有些失望啊。”xxx:“啊,不知道哪些地方做的不好呢?”项目经理:“本来我想让你承担更多的项目管理的工作,你就是我的备份,但你并没有做太多类似的事情”xxx:“哎,最近项目实在是太忙了,... 阅读全文
posted @ 2015-06-10 18:11 杨栋 阅读(1214) 评论(2) 推荐(6) 编辑
摘要: “微信,是一个生活方式”,这是微信的自我评价,是不是觉得如果那天不在朋友圈里分享一下自己的最新状态,并且收到几个赞和评价的话,会觉得空虚寂寞呢?它实实在在的改变了我们的生活方式。“微信,也是一个生意方式”,在微信成为我们日常必备之app的同时,它同样具备巨大的的商业或许不应该称为潜力,因为有很多人已经获利,名人们在微信上开设公众账户来吸金,商家来做推广,服务行业借此拓展渠道,甚至微信已经支持支付了, 还有越来越的自媒体在微信平台涌现出来。这篇文章就是介绍如何快速的成为公众平台开发者,由于个人只能申请订阅号,因此本文是以订阅号为例。关于订阅号和服务号的区别,请参见微信公众平台服务号、订阅号的相关 阅读全文
posted @ 2013-09-29 16:36 杨栋 阅读(18036) 评论(10) 推荐(7) 编辑
摘要: 上一篇文章中 介绍了function在javascirpt作为一等公民所担任的重要责任,在不同 的上下文中它担任着不同的角色,在对象内部它可以是函数,同时又能充当名字空间,不仅如此所有的function都是闭包。看起来它的确是了不得,不过除 此之外,function还能担当构造函数,亦或者说它同时还是一个类的声明。这篇文章的目的向大家详细介绍function是如何作为构造函数。如何定义一个函数声明式函数定义最常用的方式之一。 1 //声明函数 2 function add(x, y) { 3 return x + y; 4 } 5 6 //声明构造函数 7 function Anim... 阅读全文
posted @ 2013-06-20 23:48 杨栋 阅读(1699) 评论(7) 推荐(4) 编辑
摘要: Function作为Javascript的核心技术之一,清晰的理解function的机制和用法,对我们进行javascript开发非常重要.今天本人就结合自己的实践为大家介绍一些function在javascript中的一些浅显用法.1. Function是什么从Javascript对function的定义, function是一个由代码集合而成的对象.从中我们可看出,我们可以使用向C语言中的函数那样使用function,也可以对function进行面向对象编程.当然Javascript中function的强 大还不止如此.2. 如何使用function2.1定义function myfun. 阅读全文
posted @ 2012-02-05 23:13 杨栋 阅读(3405) 评论(5) 推荐(6) 编辑
摘要: 熟悉敏捷的人,都知道回顾会议。它是一个在每个迭代或者项目结束时,进行的一个团队自省的活动。通过它我们可以知道在过去的一段时间内,什么方面是团队做的好的,还有那些方面不足,已经对于未来,我们团队有什么好的改进建议。通过这种方式,我们及时总结团队的得失,获取改进意见,并且制定出相应的措施,去维持团队做的好的部分,根据建议改正现有缺陷,尝试新的实践。接下来我要说的是一场比较特殊的回顾会议。回顾会议经常出现我们的工作中,但是在生活中有人使用它吗?最近我就经历了一场这样的回顾会议。背景: 我与女友已经恋爱8年了,我们的爱情始终是比较平淡的那种,没有轰轰烈烈的爱情,也没有大吵大闹。 不过我们彼此深爱对方, 阅读全文
posted @ 2011-06-06 14:04 杨栋 阅读(1359) 评论(4) 推荐(3) 编辑
摘要: 最近在学习Django和wxPython,但是光是安装整个的开发环境,就忙了好几天,好不容易的找到了安装出错的原因,特此分享给大家。确定你所安装的python版本和位数(32位还是64位)mac上查询python是32位还是64位的命令是:file $(which python) /Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture i386): Mach-O executable i386 /Library/Frameworks/Python.framework/Versions/2.7/ 阅读全文
posted @ 2011-05-20 23:12 杨栋 阅读(2448) 评论(1) 推荐(0) 编辑
摘要: XP的简单设计指导团队的设计尽可能的简单、具有表现力。此外他们仅仅关注于计划本次迭代中要完成的user story。他们并不会考虑哪些未来的user story。相反,他们会在不断改进系统设计,是之对正在实现的user story而言保持在最优状态。它包含三条原则: 1.考虑能够工作的最简单的事情尽可能的使用最简单的方法来实现当前的user story。然后选择一种和该方案接近的方案实现该story。在实现story的过程中,如果能使用平面文件就不适用数据库。如果能不适用多线程,就不要使用它。总的意思就是能简单就简单。 2.你将不需要它(You Are Not Going To Need It 阅读全文
posted @ 2011-03-01 13:48 杨栋 阅读(1860) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示