14 KiB
第197讲 | 邱良军:做好研发管理的3个关键
你好,我是极智嘉研发总监邱良军,一个18年的IT老兵,其中有8年管理经验,包括研发管理、项目管理、运营管理。前三篇我们讲了对技术团队的基本认识、团队的招聘要点、以及团队管理的要诀,今天我们继续聊聊打造高效技术团队时如何做研发管理。
项目管理包括了5大过程、10个领域和42道管理过程,这边我们不展开细讲,有兴趣的可以看项目管理的相关介绍。
研发管理简单来说就是如何高效的写代码、做产品及做运维支持等。主要研究方向有软件开发生命周期管理和项目管理,包括项目管理PMP认证、瀑布开发主流模式CMMI软件成熟度模型、Agile敏捷开发(前有XP极限编程,后是主流Scrum)、DevOps(开发运维一体化)等。
过去个别大神一个人就可以开发一套系统,不需要分工、不需要团队协作,甚至不需要各种工具,研发管理就会变得非常简单。然而现实生活中,情况往往比较复杂。这里我们分析一个成功的IT创业公司在快速发展过程中,研发管理是如何伴随着组织扩大和组织架构演变进化的,我们一般可分为三个阶段或三个层次:
第一阶段是公司的创业初期,创始团队中往往有技术强人和产品牛人,大家齐心协力目标一致,就是把产品尽快做出来,推向市场或者寻找客户。研发管理主要关注技术和产品,其中产品(或业务)又是最主要的,这时候考虑的是客户的痛点需求,而研发效率是最关键的,用最少的钱办最重要的事情。
在这个阶段,团队规模小、目标一致,基本不需要管理,主要是个人技术能力+行业洞察能力的叠加。之后团队开始扩大发展,产品功能不断完善,研发管理关注的核心点主要在系统稳定性、产品系统不出现性能问题等方面上,团队的协作主要依赖于协同软件的使用,开发模式通常会选择敏捷开发、快速迭代的方式来做,团队加班加点是常态。
第二阶段是公司初具规模,一般到了A/B/C轮融资,研发团队接近或超上百人,甚至几百人。由于业务需求的急剧扩张,客户迅速增加,对于系统功能和性能的要求越来越高,还有安全性、高可用、稳定性等等要求,团队忙的应接不暇,而初期产品牛人和技术强人都做了团队管理者。
在这个阶段,研发团队通常处于混乱期,然后开始寻找解决方案,一般来讲,第一步是梳理流程,各种会议没完没了的开,最后基本是参考CMMI3/5模型来提升研发管理能力。再按照分工拆分为产品、开发、测试、运维、架构等团队,开发还要继续拆为前端开发、基础组建、中间件、架构等团队。各团队清晰地划分职责,加上各种关系、成员个体能力差异,各种争论互怼经常发生,慢慢的就形成了部门墙。到此为止,公司步入研发管理标准化阶段,同时伴随着更大的问题是研发效率不断下降,客户满意度和管理层的满意度急剧下降,公司出现危机。
第三阶段是公司达到几百甚至上千人的研发规模,各职能部门都建立起来了,研发效率却越来越低,做什么事情都特别难,客户抱怨员工也抱怨,危机四伏。创始人及核心骨干特别怀念创业之初金戈铁马,气吞万里如虎的潇洒自由。
在这个阶段,为了拆除厚厚的职能部门墙,研发管理的组织架构不得不再次做调整,增加PMO项目办公室,临时组建项目团队来打各种战役。开发模式演变为CMMI瀑布式+敏捷迭代模式相结合的方式来推进,并不断做精细化管理。我之前参加过软件精细化管理的一门课《Lean Six Sigma》,课程内容是参考丰田汽车的制造过程设计的,非常的不错。此外,在软件研发发布过程、测试及运维过程中,这个阶段的研发团队都在推自动化、智能化工具的使用,让有风险和重复性的工作变得快速而简单。
研发管理的成长就是技术积累、业务理解、研发效率和风险控制的平衡发展过程,我们应该从实际出发,根据公司和团队发展的不同阶段而灵活使用不同的方法。总得来说包括了对产品的理解(行业知识累计),还有技术水平(研发能力、含运维)、工程效能和流程管理等诸多方面。
产品和业务
一个段子说:CEO负责吹牛,销售负责让客户相信CEO吹的牛,CTO负责让CEO吹的牛变成真的。这个过程就是把CEO吹的天花乱坠的产品做出来,并且是在有限的时间和成本内把好的产品做出来。不过,业务类型的不同会产生很大的差异:对ToC业务,产品体验是至关重要的;对ToB业务,很多系统在签合同的时候还是个Demo,快速完成就非常关键。
不管公司是在初创阶段,还是在快速发展阶段,产品的好坏始终是最关键的,它决定着公司是否能赚到钱,决定着公司的生死。公司的一切必须围绕着产品来转,现在流行说人人都是产品经理,说的就是这个理。
研发管理的难点之一就是技术团队对业务的理解、对于产品的理解。在我的职业生涯中,做的都是ToB的业务(B是Business,指企业客户),并且主要是做的大B,有金融行业、半导体行业、仓储机器人行业等。对于技术管理者来说,如何做好对产品业务的理解是一个巨大的挑战。以下是我经历以及观察到的如何去理解产品和业务的一些实践:
- 培养具有程序员思维的产品经理,或具有产品思维的程序员,通常乐于沟通、勤于沟通的程序员经过1~2年的锻炼就可以对行业比较熟悉。我曾经花了一年的时间专注学习国际银行监管的巴塞尔协议,并组织团队内部做业务知识的普及讲解。每周通过邮件做一次业务知识的推送,给团队创造一个学习了解业务的氛围。如此,也可以让产品经理和研发团队之间形成一些共同的语言,提升团队之间的沟通效率,甚至于开发也可以给产品一些建设性的建议。
- 理解业务最好的方式就是从自己的生活出发,曾经我一个新加坡同事为一家银行研发一套银行开户系统。他想要快速地理解业务知识,并能及时了解系统上线后的运行情况。为此,他到此银行开了各种银行户头,并且存入少量的钱,自己掏钱来操作各种业务,包括线上和线下的操作。同时,他也到本地另外一家最大银行也做了相同的事情。通过在不同银行开户,了解了哪些是银行开户中的相同流程,哪些有差异;通过真实的开户及用卡体验,了解了银行开户的业务流程知识,并不断优化正在研发的系统。当这位同事到上海出差的时候,他也不忘这个事情,马上以外国人的身份到上海分行做开户体验,如此他既能了解中国分行的流程,又能进一步了解中国银行的一些监管要求。他把类似经验也分享给研发团队的其他人,整个团队对于产品业务的理解非常快速,开发出来的产品功能自然令客户满意了。
- 产品设计遵循MVP原则,在开始设计产品时不要追求一个完美的产品需求(实际上这样的完美需求也是不存在的),而是通过提供最小化可行产品获取用户反馈,并在这个最小化可行产品上持续快速迭代,直到产品到达一个相对稳定的阶段。这样可以快速验证团队的目标,快速试错。
业内很多厉害的产品经理也是出身程序员,最有名的要属微信之父张小龙,其他的还有雷军、马化腾等都是技术达人+产品经理,所以技术团队也可以有产品思维,甚至于可以打造一支技术与产品兼顾的复合型团队。
技术和架构
研发管理的核心能力就是技术能力,产品的需求要转换为产品,最终依靠的是系统架构、代码质量。对于研发管理,这里我们需要防止两个极端:
第一种,追求技术上的完美,在系统设计的时候一上来就是高可用、高活、分布式、并发上万、亿级数据等,等系统做出来时,黄花菜都凉了。**“好的架构不是设计出来的,而是进化出来的”,**这句话被很多人引用,并不是给糟糕的起步寻找借口。就像前面一节说的,技术是为产品服务的,系统设计之初,**速度是关键。**To C业务需要快速获得客户,取得收入或者融资;To B业务的客户通常更着急,恨不得签完合同就要上线,当然公司为了快速获得收入也是希望尽快上线验收。
第二种是完全不管架构技术,只要能做出来就好,系统的稳定性极差,体验也不好。这样的系统即便是交付上线了,用户也会失去耐心,产品也就失去了意义。
因此,在系统不断迭代的过程中,我们需要不断做架构调整演化,代码也需要不断做重构调整,以适应业务发展的需要。在预算许可的条件下,适当的做6~12个月的业务前瞻。
在做研发管理的时候,我们还必须做好质量管理,其中代码质量是非常重要又极其容易被忽略的,工期或者资源一紧张,或者团队发生入离职的时候,代码质量就很容易失控。由于人员变化、新的需求功能的增加及变更,废代码、垃圾代码、不规范代码、奇葩代码、天书一般的代码都会出现。这几乎是研发过程管理中绕不开的梗,甚至上升到了软件工程师人品的高度了。对付这个的问题可以加强代码精细化管理:一方面可以使用代码扫描工具(比如 Sonar),另一方面加强代码人工审查。
在代码的重构中,特别是系统到一定的复杂度后,我们需要对代码做一定的减法,包括删除废代码和注释掉不用的代码,还有详细看一下代码逻辑,避免重复代码,重复造轮子。还可以利用一些已有的开源代码来替换写得不理想的代码。利用一些设计模式来简化系统的复杂性,提升代码的复用率。
工程效能 - 研发流程及工具使用
工程效能是研发管理中非常重要的一环,研发团队不断发展,工程效能的重要性就会日益凸显。在团队规模超过100人,甚至达到1000人时,就需要专门的人或者团队来关注这块了。工程效能的核心是在符合公司流程要求(风险控制要求)的前提下,提升各团队协作的效率。现在比较流行的是敏捷开发和DevOps两套方法论的使用,两种方式都是大量地使用自动化工具来提升效率。
**敏捷开发是是软件研发团队管理的一种方式,**要求团队成员都是自我驱动、自我管理,从而达到敏捷团队的自管理组织,JIRA支持的Scrum是敏捷的方法之一。JIRA可以做需求管理(User Story)、缺陷跟踪、任务管理等等,JIRA还提供了专门的Scrum视图和Kanban视图等,特别适合敏捷开发团队使用。大型互联网公司如LinkedIn、Facebook、eBay等内部几乎都在使用JIRA,我们公司也是使用JIRA来管理整个软件生命周期,并且是敏捷的开发模式。
DevOps涵盖开发、测试、发布、部署以及运营、监控一体化的过程管理,通过自动化工具的使用,把持续集成、持续交付、自动化的部署发布和监控、持续反馈和优化过程勾连形成一体化,又叫开发运维一体化。通过IDE集成Git和Sonar,在代码提交时做自动扫描检查,再通过Jenkins把Maven、JIRA、Git、Jmeter集成起来做到自动化的部署发布,以及Docker镜像、zibbix自动监控等,最后通过短信、邮件、微信、Jira等系统可以实现报警监控的自动化。
总结一下研发管理所讲的主要几点:
1.从10人以下技术团队演化到几百上千人时,组织架构发生的裂变和团队分工,由此产生的乱弄和低效,再到部门墙的产生是无法避免的,最好要考虑好如何拆除部门墙,所谓分久必合合久必分。
2.和研发管理相关的项目管理的知识,包括软件过程管理(开发生命周期),以及瀑布开发(CMMI)和敏捷开发(Scrum)等。
3.研发管理的核心重点是产品、技术、工程效能。
在即将讲完团队管理及研发管理的时候,总结一下我对做事、管事及管人方面的理解和思考:
- 做事的本质是“高效自驱”,这样的员工谁都喜欢,并且这样的员工也会获得更多晋升和重用的机会。秘诀是勤学勤练,提升专业技能,做事靠谱、高效,有责任心。
- 管事的本质是“抓执行,勤反馈”,形成闭环,并不断通过总结和反思做提升。秘诀是思考问题的本质,找出根本的解决办法,最后形成流程和方法论。
- 管人的本质是“知人性,有人性”,每个人的个性都不同,然而人性却是相通的,学会换位思考,己所不欲勿施于人。秘诀是自我修养,知行合一,修炼自己的人品、口碑、心态最为重要。
作者简介
邱良军,极智嘉研发总监,TGO鲲鹏会会员,负责组建极智嘉苏州研发团队,以及筹建苏州研发中心, 4 个月将团队发展到 40 人,并承接两个系统开发,数条支持线的工作。曾在新电任职超 10 年,带领团队交付数个项目,团队峰值人员超 70 人。2014在文思海辉担任总监,从零开始将团队带至 300 人。18年IT老兵,管理经验丰富。