软件世界中的个人英雄与团队协作

用户头像
王泰
关注
发布于: 2020 年 04 月 25 日

一、引子



某次下班后和几个朋友一起吃饭聊天,程序员之间的话题一般就是那几种,哪种语言最好啊,怎么写代码更快啊。其中一位朋友说,要是谁能把从产品到开发的事情全都做好,那么他工作起来效率一定很高。我作为一个爱抬杠的程序员,当时就问他,那啥现代化的工业需要分工协作?他愣了一下,好像要说还没说的时候,另一个朋友抢一步说,美国的企业文化和我们不一样的。因为那个朋友是从美国回来的,我们哈哈大笑着就结束了这个话题。



其实提起话题的那位朋友是一名技术高超的工程师,也是一位优秀的Manager,他的观点肯定是工作中的实际感悟。可为什么和公司中实际感受不同呢?我之后又思考过几次这个问题,也没有找到让自己满意的答案回答自己。直到有一天我在重温《设计原本》的时候,好像找到了答案。



二、团队协作和个人创作



话题的分歧在哪呢?关键就是个人工作的效率高还是团队协作的效率更高。天下的道理都是相通的,一通百通,我们以设计师工作为例,过去我们很少听说过哪件作品是多个设计师协作创造的,因为许多作品都是设计师自己独自一个人完成的。像瓦特、爱迪生、linus等等优秀的设计师,我们只要一听到他们名字的时候,就能马上想到了他们的作品。



可是如今我们越来越少听听说类似的故事,比如,神州5号、C919、蛟龙,虽然这些作品虽然都有总设计师,但当今的总设计师背后还是有设计团队在协作,和过去的独立设计师还是有所不同。



为什么我们过去有过很多优秀的设计师都是一个人,一个人就能完整完成设计工作,而今设计工作却越来越依赖设计团队呢?因为现在产品所需的功能越来越复杂,所依赖的技术越来越专业,同时要求完成的时间越来越短。



三、设计的挑战



设计师工作的挑战,不仅仅指的工业产品的设计师,也包括软件设计师。设计师们工作的最重要挑战就是要保证产品的一致性。不仅风格,更重要的是的所有细节都具有一致性。



《设计原本》的作者Brooks 相信,一致性是质量评价体系中至高无上的标准。一个良好的架构应该是始终如一的,观察者只要了解了系统的一部分信息,那么其余的信息就可以推导出来。如果一件作品出现了不一致的细节,那它就是不完美的。



比如一个推荐系统,其中推荐的对象和推荐的逻辑有着清晰的定义,并在系统各处保证定义的一致性。所有的算法,应当和其它系统使用的相同算法保持一致;每个特征是离散的还是连续的,应该和其它数值运算定义保持一致;推荐库的内容定义,热点推荐库和运营推荐的内容,也应当与实际内容一致。



一个人在设计作品时比较容易保证一致性。即使作品中间出现了不一致的细节,设计师也会主动的修正。可如果是协作完成,就会很难保证其风格与逻辑的一致性。产品不能保证一致性,那体验或质量就难以保证。我们需要增加额外的成本来维护保证一直想。协作增加的成本幅度与产品的复杂度和直接参与的人数成正相关。



四、个人英雄的优点



因为在软件开发中保证一致性是最重要的挑战,而个人开发的时候因为所有的想法都是没有跑出个人的大脑中,所以个人英雄对一致性的保证最为简单。



尤其新软件产品为了快速验证自身的商业逻辑是否正确,需要用最小的成本更快速的接触到目标用户,来测试新产品是否真的切中了用户痛点。现在常常采用的MVP的设计方案,MPV从用户的核心需求出发,将核心需求设计成产品,更多的是需要抓中市场一个聚焦的小点进行产品化的实现和验证。MPV阶段需要的是团队执行力与产品的验证结果。



MPV因为产品逻辑简单,非常更适合独立的工程师来完成所有的设计工作,这里要求工程师掌握的知识不一定非常专业化,但尽可能的领域广泛,才能减少沟通的成本,也更容易保证产品设计的一致性。



五、为什么出现了团队



随着技术的复杂性不断的提高,一个人就很难掌握全部技术细节。往往一个产品的设计需要应用到很多领域的专家,而且是那些平常看起来并不相关的领域专家一起解决。即使是一瓶普普通通的洗发水,为了让其中的各种配方可以顺利混合,联合利华需要在数学博士和流体力学帮助下,来调整洗发水的配方比例和混合方法。



任何技术复杂度出现了爆炸性增长,都是因为其依赖的很多学科,它们的专业化发展。以软件开发为例,十年前会网页、数据库和服务器开发就可以说自己是全栈工程师。而如今因为软件技术的专业化与复杂化的发展程度,应该没人敢轻易叫自己全栈工程师了吧。



技术的专业化和复杂化是出现团队协作的原因之一。团队协作出现的第二个原因就是时间进度的紧迫性。在软件公司中普遍流行着一句话,“天下武功,唯快不破(古龙)”。因为产品越快的上线,公司就能越快的获得丰厚的利润。时间的紧迫性也迫使了产品需要以团队的形式进行设计。



六、团队的成本



为了解决技术的专业化和复杂化,上线时间的紧迫化的问题,所以团队是必然出现的。可是团队并不是完美的,团队可以解决一些个人无法解决的问题,却不能代替个人。因为实际上团队协作比个人工作增加许多额外的协作成本。



团队的成本可以分为以下几个方面。



6.1 任务拆分成本



团队协作的第一步就是安排好每个人的工作。合理的划分子模块并分配给所有相关的人员。如果只是口头上说,你应该做这个,他来做那个,就非常容易指令不清晰,接受任务的人和分配任务的人直接上估计100%的出现偏差。为了让所有人明确要做的事情,任务的定义必须清晰。



为了可以解决任务拆分导致认知不一致的问题,任务和模块的定义还需要用标准化的语言表述,确保定义的一致性。



所以任务拆分本身就是一件很高成本的事情。



6.2 学习成本



随着工作进度的推进,模块和接口的设计也在不断的更新。为了让大家不仅可以及时的掌握信息,还能提出合理建议,就要不断的将这些信息传授给团队成员。



因为团队的产生是技术的专业化导致的,所以团队整体需要掌握很多专业知识。为了让团队内部成员可以对设计问题保持共同的看法,团队内部需要经常性进行专业技术培训。



学习和培训的成本也是团队带来的额外成本。



6.3 沟通成本



团队工作的顺利进行,不仅需要大家保持一致性的目标愿景,工作计划和进度也需要不断的同步给所有的人,沟通是必须的。尤其是软件设计,会比其它设计增加更多的沟通。为了降低这种沟通成本可以应用标准化沟通工具。



6.4 变更成本



世界上唯一不变的就是变化,软件设计也是如此,而且可能会更加频繁,因为软件设计没有实体的物体,这种存在设计师大脑中的作品,更容易变化。如果只是自己的模块内部变化,对其它人影响还较小。可如果是接口变化,那就需要和其它协作者沟通。接口变化不仅影响其他人的进度,甚至有可能造成整体产品的返工。



七、如何协作才更加有效



良好的协作本质上是管理问题,如果团队中没有好的管理,那么协作将是一场灾难。有效的协作团队中,必须有一个能抗事、能拍板的人。我反对过于扁平对团队,如果团队过于扁平每个人都可以决策,那只会让这个团队膨胀、臃肿和效率低下。人人要负责就没人负责,人人要满意就没人能满意。



实际工作中,因为系统比较复杂,需要多名工程师协作完成。那么这里整体的设计工作,就只能由一名设计师完成。这名设计师负责保证设计风格的完整性,对产品有清晰的目标和远景。其他人在他的周围完成细节的部分。



如果设计工作也非常复杂,需要多名设计师协作,那么可以由唯一的一名产品业务人员决定产品目标和约束,以此保证设计目标和约束的一致性。



以此类推建立金字塔形的团队协作模型。



团队内部可以从以下几点提高协作的效率。



7.1 团队内所有的人建立一致的目标



在项目开始的时候,管理者要与项目的每一个人进行谈话。其实参与项目的大多数人对项目的目标和边界并不清楚,通过谈话可以让大家形成对项目的最初印象。再通过观察大家的反应和工作中的举动,感受到大家对目标的理解后,再次进行谈话,通过反复的谈话,让大家建立一致性的目标和共同认知下的约束条件。



7.2 团队的头脑风暴



大家坐在一起,每个人都可以说出自己想法,不需要指责或批评,但也不一定会采用,重要的是想法和点子越多越好。大家的想法交融在一起,碰撞火花。



7.3 内部竞争



竞争是协作的另一种形式。在概念探索阶段,可以通过竞争激发出更多的创造力。在明确目标和清楚约束条件下的时候,竞争是一种非常有效的协作手段。



软件团队中常常都会有不同人针对某些设计方案的竞争与讨论,面对竞争的情况团队领导需要做的不是充当“和事佬”而是应当及时管理大家的目标一致性,甄别选择约束条件并剔除掉不必要的约束条件。良性的竞争会让协作更有效率。



腾讯很多优秀的产品诞生都是采用了内部竞争机制。比如说微信,传说微信最早在腾讯中有两个独立的研发团队,一个在广州,一个在深圳。广州的就是大家熟知的张小龙的Foxmail团队,两个团队在相同的目标下,同时独立的开始研发,最后张小龙凭借在foxmail的技术积累率先开发出微信应用。现在我们看到的微信就是广州张小龙团队的产品。



还有现在十分火爆和平精英和王者荣耀,腾讯内部都是采用了这种内部竞争的方式,推出了更好的产品。



7.4 评审



在协作工作中评审是必须的,而且最好是跨部门的评审,让不同部门和领域的专家一起参与到设计内容的评审中。让每个人都可以对评审的内容仔细思考,这样每个人都会带来独到的观点,并针对不同的内容进行提问找到不同的缺陷。



八、总结



随着现代化产品规模的扩大团队协作是必然产生。但个人英雄也并没有消失,反而愈发显得更加重要,原因就是商业模式的要求。并且也在软件工程的创新下,保证了个人英雄的工程质量。团队协作会产生额外的成本,为了让团队协作更加有效,需要高级的管理艺术保障团队协作的效率。



发布于: 2020 年 04 月 25 日 阅读数: 890
用户头像

王泰

关注

还未添加个人签名 2011.07.21 加入

Aladdin 项目创始人,AI自动改Bug

评论 (2 条评论)

发布
用户头像
不愧为上过TGO Talks的同学,能写能说,哈哈
2020 年 04 月 26 日 09:34
回复
校长过来回复,荣幸啊
2020 年 04 月 26 日 12:17
回复
没有更多了
软件世界中的个人英雄与团队协作