gitbook/技术领导力实战笔记/docs/88532.md
2022-09-03 22:05:03 +08:00

14 KiB
Raw Permalink Blame History

第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. 培养具有程序员思维的产品经理或具有产品思维的程序员通常乐于沟通、勤于沟通的程序员经过1~2年的锻炼就可以对行业比较熟悉。我曾经花了一年的时间专注学习国际银行监管的巴塞尔协议并组织团队内部做业务知识的普及讲解。每周通过邮件做一次业务知识的推送给团队创造一个学习了解业务的氛围。如此也可以让产品经理和研发团队之间形成一些共同的语言提升团队之间的沟通效率甚至于开发也可以给产品一些建设性的建议。
  2. 理解业务最好的方式就是从自己的生活出发,曾经我一个新加坡同事为一家银行研发一套银行开户系统。他想要快速地理解业务知识,并能及时了解系统上线后的运行情况。为此,他到此银行开了各种银行户头,并且存入少量的钱,自己掏钱来操作各种业务,包括线上和线下的操作。同时,他也到本地另外一家最大银行也做了相同的事情。通过在不同银行开户,了解了哪些是银行开户中的相同流程,哪些有差异;通过真实的开户及用卡体验,了解了银行开户的业务流程知识,并不断优化正在研发的系统。当这位同事到上海出差的时候,他也不忘这个事情,马上以外国人的身份到上海分行做开户体验,如此他既能了解中国分行的流程,又能进一步了解中国银行的一些监管要求。他把类似经验也分享给研发团队的其他人,整个团队对于产品业务的理解非常快速,开发出来的产品功能自然令客户满意了。
  3. 产品设计遵循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老兵管理经验丰富。