产品团队管理 - 统一研发环境,提效研发过程

(我本来计划将研发环境和管理流程分开来讲的,最后还是放在一起便于理解。)

软件研发最重要的场景就是在有限的时间和资源下把需求落地为产品/项目,也就是研发和项目管理,毫无疑问,这个阶段的主角是开发人员。

是不是应该多思考下怎么面向开发人员来优化整个研发过程和项目管理流程?

本文将介绍如何通过优化开发环境搭建、代码管理来提高研发过程中开发人员效率,并通过持续集成和交付让开发中的问题更早暴露,通过合理的测试反馈工具让开发人员更早定位和解决问题。

说到团队的研发和项目管理的实践,就逃不开先要说一下笔者所在公司研发和项目管理中的工具作为背景:

  • 即时交流和协作:QQ
  • 办公信息平台:诺明
  • 代码管理:SVN
  • Jar管理:Nexus
  • 项目管理:Redmine
  • 持续集成:Jenkins、ansible

切入正题,本篇分享涵盖的是在研发过程和项目管理流程,以及当中在DevOps上做的一些努力去优化开发人员的体验,就试着从各个环节总结一下:

  • 研发环境的搭建:包括如何kick off新开发者,如何搭建日常开发环境
  • 代码的管理:包括源码管理,Code Review和组织公共库
  • 需求在研发中的生命周期管理:包括功能需求清单,功能需求定义和其中的开发任务项分配和状态管理
  • 项目进度的管理:包括如何通过Redmine有效的执行敏捷开发
  • 研发阶段的产品测试和反馈:包括在产品测试和反馈中的一些经验和工具分享
  • 持续集成和持续发布:包括如何针对Web, Android和iOS分别搭建持续集成和发布

一、研发环境的搭建

如何让团队新的开发者尽快上手

对新的开发人员,一般都会有开账号,装系统,配环境,跑代码这些过程,我自己发现每次都低估这些工作的耗时,以前就发现有时候不小心就一两天过去了还没跑起来代码,一两周还没搞清楚目前产品的功能,我总结了几点加快这个进度的方法:

1.加快账户开通和权限分配的速度。

笔者公司的帐号包括OA,svn,nexus,redmine,ftp,jenkins,Sonar。这些系统的用户管理和权限无非基本都是通过数据库或者xml进行管理,那么是否可以梳理规则然后通过自动化来实现呢?

  • 整理各系统,角色、权限对应的sql表和字段或xml键值对
  • 开发同步小程序,建立OA同步至其他系统的相应场景(创建、禁用、密码修改、职位调整等等)

2.加快开发IDE环境搭建的速度

同一产品部门或同一工种日常所使用研发IDE环境,基本都是一样的,难道要每一个新入职的同事如果都自行去确认IDE,下载和安装?我们可以统一研发所需使用的IDE组件和版本组装成一键安装包。

  • 收集研发IDE工具及版本。如svn,Eclipse、maven、ant、xshell及其他
  • 统一组件安装目录。如:D:/develop
  • 编写环境插入bat文件
  • 编写环境检查,开发指引文件,开发标准规范配置说明
  • 通过Winrar创建自解压包,自动安装相应软件,执行bat配置环境变量

(注:环境插入的bat文件,部分windows系统版本无法插入,需手动添加)

3.加快能让代码跑起来的速度

有很多可以加速的环节,一个比较重要的就是自动构建代码,就是指开发人员checkout代码后通过简单的构建脚本就能完成代码依赖安装,代码编译,单元测试运行,也就是我们常说的跑起来。以Web为例,可以通过maven的pom完成依赖的安装、代码的构建和版本提交,这也是持续集成的基础。

4.对产品功能需求和目前进度的了解

保持尽量清晰的需求定义,新的开发人员可以通过浏览产品的需求文档来了解产品功能。

可以知道以前每个版本都做了什么功能,未来有什么功能正在排期中:

如何方便开发人员进行日常开发调试

目前对于Web开发来说,一般构建的过程中代码都会进行环境文件DLL/SO,CDN地址等替换、CSS Sprite生成等等操作,造成配置切换很不方便,我们采取的解决方法是在web的maven构建流程中分不同的Build Target,自动构建切换至对应环境配置,连接对应数据库,方便Web开发人员调试。

二、代码管理

首先最重要的就是代码必须用源码管理工具,我们一直用的SVN。代码的查看和管理都在SVN服务器上,可以查看代码,code review,合并分支,打版本tag之类的。

有两点我觉得需要关注的:

1.怎么让开发人员高效的使用第三方库

项目开发的过程中去抽象公共组件,使用第三方库或开发工具都可以提高开发效率,但需要做好模块和版本管理,有时候碰到一个开发人员引入了一个不合理的依赖,或者学习成本陡峭的组件,每个参与开发人员都要增加学习成本。这个一般都是根据不同的技术栈有相应的一套工具可以使用,在java开发上我们使用的是Nexus来管理, iOS、Android上面也有自己习惯的选择,需要加新的组件或者替换正在使用的通过专家小组评审讨论之后加入,以免发生重复或者后期的分歧。

2.如何做新功能开发的代码管理

只要多人开发,而且多功能并行开发都避免不了要考虑如何管理代码。一般有Brunch和Trunk开发两种

传送门:SVN版本管理

三、需求在研发中的生命周期管理

对于开发人员来说,开发工作一般是围绕着具体的功能需求进行的,而 "清晰的需求定义"就是研发的主要输入,由负责的PM来主导需求(User Story)的状态更新,本节以一个功能需求(User Story)为例,先上一个时序图来说明单个功能在研发中的生命周期是什么样的:

从功能需求(User Story)的时间线上可以看出来其分为下面几个状态:

可以划分为需求确认,需求开发,需求测试和上线三个阶段:


PM创建后协作编写需求文档(New) ->

需求确认(Confirmed) ->

开发中(In Progress) ->

待测试(Wait for test) ->

已完成,可以上线(Finished) ->

完成,可以关闭(Closed)

1. 需求确认

对于需求文档的编写和确认,不同团队方式不一样,我的理解是包括功能需求的前置条件和后置条件,用户流程和规则,完整的产品交互原型,评审确认的设计稿。

2. 需求开发

在需求定义清晰后,开发前需要整个开发团队的参与确认任务的分配。任务分配的原则就是将功能需求对应的任务按树形结构分解,敏捷开发里的学名是"Work Breakdown Structure (WBS)",保证其中每个任务都是可以开发,并且是可以测试的。

具体到其中一个单独的任务项(Task),里面会有它所属的功能需求(User Story),当前的状态,优先级,任务指派的开发者,任务所属的产品线,一个简单的任务描述的,所属的里程碑,预计开发时间和结束时间,任务当前的状态和进度等等。

从上文中"需求在研发中的生命周期"的时序图上可以看出其对应的任务的生命周期是如何管理的,包括前端和后台之间的任务协作是如何完成的,简单来总结的话Task有下面几种状态:


新建 ->

开发中 ->

待代码复查(目前仅junior developer需要被code review) ->

待测试 ->

反馈 ->

完成(可以上线) ->

关闭(上线以后可以关闭)

开发人员主要负责的就是开发的同时更新自己任务的状态,状态蛮多,如果开发需要每次登录redmine来改也确实蛮累,在实践的过程中我们可以引入一些优化的方法:

3. 需求测试和上线

当单个功能需求下面对应的所有任务都开发完成后,由PM进行测试和反馈,在确认与PRD一致后可以由PM更新为"待测试(Wait for test)"。这里"待测试(Wait for test)"的意义就是该功能需求可以在发布到测试服务器(Test Server),由业务及测试团队参与测试。当测试没有问题后,如果是Web功能则根据上线计划上线到Production Server;如果是Native App,则按照版本计划,可能需要固定时间发布或者等待几个功能完成后一起发布上架(部分公司可能会有灰度发布的过程)。

由于这里讲的是单个功能需求的研发周期,而测试和上线更多是在整个项目这个 范围 上来讨论,所以针对测试和上线的部分在后面持续集成和发布的部分会来细说。

四、项目进度的管理

顺着上面的思路,当你有单个需求研发的流程后,整个项目的管理就是管理所有的需求,安排优先级和迭代计划,然后对所有需求进行同样的研发流程管理。敏捷开发里把一个迭代周期称为一个Sprint,每个Sprint做一次产品发布,然后回顾Sprint内的问题,规划下一个Sprint的开发任务,如下图:

笔者公司的的实践并非Scrum,但比较接近,我们的迭代比较频繁,通常每周至少都往Production上做一次同步。项目的进度管理推荐参考Scrum的实践里的三个Meeting:

在这三个Meeting上PM会和开发人员或者产品负责人进行接触,如果这里体验不好就会影响项目的管理。其实我们试点的优化方案也比较简单,就是通过项目管理工具Redmine去实现的功能需求和开发任务的"看板":

关于redmine的实践后面我单独写一篇文档来介绍。

五、研发阶段的产品测试和反馈

产品发布到测试渠道后的反馈

当产品发布到测试渠道就是希望在正式发布前得到业务和测试团队的反馈,对比开发人员的测试反馈,业务和测试团队的反馈会更专业、清晰、充分,这些反馈需要通过相应的工具来进行管理:

六、持续集成和持续发布

Native App因本身业务和市场占有的需求,一个重要的痛点就是不停迭代业务、发测试版、进行测试,但对于移动app来讲之前每次打包都需要打断开发人员,等待编译,改文件名加版本号,上传等一系列繁琐的过程,然后还经常因为客户没有装最新版而造成沟通时间的浪费,所以早期我们就开始着手建立持续集成和持续发布体系来避免这些问题。

一个完善的持续集成应该包括代码提交后的构建->部署->测试->发布几个阶段,两张图对比应用持续集成和持续集成之后的研发过程:

然后这张图是我们目前实现的持续集成过程:

自动构建

Jenkins支持定期检测SVN代码更新,会在代码提交成功后能在持续集成服务端(CI Server)触发相应的Server,Web,iOS或android端的自动构建。

持续部署

部署分为客户端部署和服务端部署两种,就是构建以后要把可运行的代码发布到相应的服务器和手机端。

持续测试

分为单元测试和集成测试,理论上来说能在持续集成的过程中执行测试,是对产品质量极大的提升,不过对团队的规模和时间要求比较高,一般还是按自己的实际情况来,非长期维护产品慎用,建议做产出分析。

持续交付

持续集成后的持续发布是我们主要需要解决的痛点,发布的对象分别是给开发和测试人员的Dev版,给测试团队的Test版和给最终线上用户的Production版,发布的渠道又分为Web端和Mobile端,需要分别来考虑:

将发布的dev,test和production分为三个不同的服务器:

原文地址:https://www.cnblogs.com/YatHo/p/8715847.html

时间: 2024-10-25 10:59:36

产品团队管理 - 统一研发环境,提效研发过程的相关文章

研发环境容器化实施过程(docker + docker-compose + jenkins)

目录 背景介绍 改造思路 容器构建 基础准备 中间件容器 外部依赖容器 业务应用容器 容器整合 自动构建容器 Maven相关 非Maven项目 总结 背景介绍 目前公司内部系统(代号GMS)研发团队,项目整体微服务规模大概是4+9+3的规模,4个内部业务微服务,9个是外部平台或者基础服务(文件资源/用户中心/网关/加密等),3个中间件服务(数据库/Redis/Nacos). 分为2个组,迭代周期为2周.需求和排期都是会有交叉,会保证每周都有迭代内容交付,另外技术部门也在进行性能优化以及代码规约的

如何成为一名研发主管--关于个人、过程、工具和团队之一

当一个研发或产品线团队人员数量达到几十人规模时,点对点的平面式沟通管理模式势必成为产品研发和团队发展的瓶颈,这时候就需要从人员组织架构上做出调整,即从点对点的平面式管理转换为金字塔型的梯队式管理.作为一个研发团队,技术研发主管作为梯队式管理中的基层主管在技术人员管理以及产品开发过程把握上发挥其核心作用.本文从团队管理角度出发,从技术研发主管的定位开始展开,对如何培养和建设技术主管队伍从以下几个方面进行阐述: 个人 过程 工具 团队 我举一张龙舟图对研发主管的定位进行描述,见下图.图中除了坐在船体

腾讯资深产品经理谈团队管理心得

作者介绍: 蒋宁,腾讯资深产品经理;手机腾讯网产品总监;侧重在无线互联网产品战略规划及产品经理团队培养工作 做团队管理和做业务不同,特别是面对一群高智商高素质的产品经理,需要一些策略和耐心:这期间也有一些感悟,也简单整理沉淀一下,有8个点吧,在内部团队经常讲,这里简单删减处理后分享一下 : 1. 将员工个人能力成长与团队业绩发展紧密结合 记得当年担任Leader之初,我就给自己的职责定位做了个分配,原则上,50%关注业务:50%关注团队:包括团队流程建设沉淀及团队人员的成长,根据不同的阶段可调整

Lyft高管的技术团队管理实战

Lyft 的技术总监沈思维分享了他对于管理技术团队和打造工程文化的经验,也欢迎添加他的微信公众号"人家的屋顶"了解更多(微信公众号ID: othersroof).沈思维毕业于密歇根大学和卡内基梅隆大学.他早年在 Google 任软件开发工程师 (2005 - 2011),2011年加入 Twitter,后任产品安全部高级研发经理,负责反垃圾及帐号安全方面的工作.2015年底至今在 Lyft 担任研发总监,负责包括支付平台,风控平台.开放平台在内的多个团队.工作之外,沈思维关注并致力于提

转:几个软件研发团队管理的小问题

几个软件研发团队管理的小问题 最近在与一位总经理交流的时候,他谈到他们公司的软件研发管理,说:"我们公司最大的问题是项目不能按时完成,总要一拖再拖."他问我有什么办法能改变这个境况.从这样一个问题开始,在随后的交谈中,又引出他一连串在软件研发管理中的遇到的问题,包括: . 现有代码质量不高,新来的开发人员接手时宁愿重写,也不愿意看别人留下的"烂"代码,怎么办? . 重构会造成回退,怎样避免? . 有些开发人员水平相对不高,如何保证他们的代码质量? . 软件研发到底需

几个软件研发团队管理的小问题

最近在与一位总经理交流的时候,他谈到他们公司的软件研发管理,说:"我们公司最大的问题是项目不能按时完成,总要一拖再拖."他问我有什么办法能改变这个境况.从这样一个问题开始,在随后的交谈中,又引出他一连串在软件研发管理中的遇到的问题,包括: . 现有代码质量不高,新来的开发人员接手时宁愿重写,也不愿意看别人留下的"烂"代码,怎么办? . 重构会造成回退,怎样避免? . 有些开发人员水平相对不高,如何保证他们的代码质量? . 软件研发到底需不需要文档? . 要求提交代码

products(3)产品&团队

这一篇,来聊聊产品设计以及和产品有关的各个团队... 一.大产品,大设计,大团队 1.产品之大 产品之大,可以从时间和空间两个角度来说.时间指的是产品的生命周期:空间呢,则是做产品必须考虑的三大方面:商业.产品.技术,缺一不可. 时间之大:产品生命周期 记得今年五月份时候,当时为了整理一份微服务框架的培训文档,看了很多资料,当时有看到这样一句话:要做有生命力的产品. 前面的博客也讲到了,产品是一个长期的过程,需要不断迭代不断维护更新,而项目,则是一次性的一个任务,完成即结束. 空间之大:商业.产

小谈学生团队管理

我是觉得我想创业的话,最好就是从校园开始.刚开始我只是认为,在学校创业,各种风险低,压力小:往后点觉得学校创业的最大优势是人力资源:后来发现,其实学校创业需要的其他资源也很充足.当然无论在哪创业,成功率都是居下不高,我们需要做的,是持久的规划and坚强地执行. 我本身并不属于管理控,但没办法,需要有人站出来,并且喊一句:"兄弟,我想这样这样,一起干怎么样?",然后拉起一小支队伍,为革命事业,为改变世界,抱团前进. 如何拉起学生团队 俗话说得好,"兵马未动,粮草先行"

IT技术团队管理之成长

------------------------------------------------------------------ 今天先到这儿,希望对您技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,团队建设 有参考作用 , 您可能感兴趣的文章: 领导人怎样带领好团队构建创业公司突击小团队国际化环境下系统架构演化微服务架构设计视频直播平台的系统架构演化微服务与Docker介绍Docker与CI持续集成/CD互联网电商购物车架构演变案例互联网业务场景下消息队列架构