前言

网易杭州研究院 · 叶锋

当一个产品或项目变得比较大的时候,开发效率就会提上议程。如果项目管理混乱或者某个环节脱节,往往会让项目进展缓慢,走弯路,甚至失败。

一个大的产品开发往往包含了项目经理,产品经理,架构师,开发工程师,测试,前端等多种角色。如何提升各个角色的效率,让产品在保证质量的基础上,快速上线,很值得研究。本文根据哨兵系统中开发的实际情况,做一些实际经验总结。

1

产品先行,机动提升

在产品立项之前的一个月或者更长,产品的规划就应该开始了,首先需要在目标用户中做充分的调研,形成产品规划的初稿,然后带着初稿与用户继续沟通提炼,形成最终的可行方案。在项目组的内部也需要充分讨论,通过讨论相互理解需求,也可以发现产品中存在的问题和不足,利于下一步工作开展。

即使在项目进行中,如果发现原先方案没有很好地满足用户需求,那么不要犹豫,及时做出调整,甚至可以考虑对项目进行大的重构。因为如果为了掩盖一些设计上的缺陷而做一些特殊适配,往往坑会越埋越大,到时更改的成本会更高。行动的迅速性和机动性,对于项目至关重要。

2

开发高效,多维提升

当项目进入技术的设计开发阶段,合理的规划对于效率的提升十分重要。结合哨兵的开发的实际过程,这里提出一些看法。

1. 开发人员带着自己思路设计

在这个环节,所有的开发人员都需要参与,通过对需求和功能的理解,开发人员可以构思自己的技术方案,然后跟大家一起讨论,最后总结出合理的可执行的方案。每个开发人员都是设计者。

2.  开发、测试、预发环境搭建

项目进入开发阶段,需要搭建和组织高效的开发环境。首先选用业界流行的maven工具管理代码,将代码工程模块化。一般将工程分为common 模块,业务逻辑模块,具体应用模块等等。common模块封装总体依赖,内部通信框架,验证规则,通用数据结构,通用util类等。业务逻辑方面,可以将关系数据或者其他中间件的操作独立模块,每个模块独立于应用,建立有自己的独立的单元测试,提升业务层与应用层的耦合效率。具体应用模块,采用合适的开发插件来提升效率。比如我们应用模块以web应用为主,采用jetty插件,它具有轻量,内置,高效的特点。可以在一个eclipse容器里面启动多个实例,并发调试。工程模块之间建立运行时依赖的关联关系,如果一个模块改动,比如业务层,无需build这个模块,减少调试时间。

在项目开发完成后,合理规划测试环境,上线之前规划预发环境。项目复杂度不一样,环境规划复杂度不一样,但是都值得多投入规划。

3. 代码层次化,可扩充的设计理念

将代码分为多个模块,比如dao层,service层,权限验证层,controller层,视图层等等。同时将一些通用的处理方式集成在统一的基础模块之中,比如我们的api应用,组件异常处理,api监控等功能集成在入口filter组件,这样有利于功能开发人员专注业务逻辑的处理,提升效率。

在系统设计的时候要考虑未来的可扩充性。比如哨兵系统中的设备类型前期主要以服务器为主,后期可能会引入网络设备等多种。那么前期表的设计就可以采用面向对象特性的方式来实现,公有部分放在基础表当中,扩展属性放在各自独立表当中。当增加新的类型时只需要建立新类型独立表就可以了。

4. 尽量用成熟技术框架

在技术方案的选取上,尽量采用业界比较成熟的,并且支持性比较好的方案。这样出现问题的时候,可以在互联网上找到一些解决方案。当然在功能受到限制必须选取一些不常用方案的时候,需要提早进行调研,并且尽早进行性能方面的压力测试,防止在项目真正上线的时候出现问题。比如我们项目中引入aviator作为表达式的求值引擎,在实际使用的过程中,由于缓存配置不合理,在上线的时候才发现,方法区每过一段时间会满,造成full gc。调整参数后,问题解决。

5. 良好的版本管理方式

在产品开发初期,由于还没有上线或者使用人少,功能迭代少,团队采用一个统一的开发分支,这样效率会提升。随着项目正式上线,用户逐渐增加,功能迭代也会慢慢增加,这样采用多个分支并发进行比较合适。在多分支开发的时候需要注意需要一次发布的功能在相同的分支内进行,要发布之前进行分支的合并,冲突解决。良好的分支管理方式会让项目快速迭代,减少错误的发生。

6. 及时有效沟通,及时代码重构

在项目的进行中,由于各个开发人员的风格不统一,导致代码跟规范不一致,同时编码中一些特殊逻辑处理的不够优雅,很想进行重构,但是又怕影响进度。这种情况通常建议及时进行,虽然开始的时候效率下降,但是长远来讲可以大大提升效率,并且可以让后续的开发人员快速理解业务,也不会被误导使用不合理的模式。重构需要团队内部进行及时有效沟通,形成规范,并且如果重构对开发进度造成影响,重构负责人应该考虑加班,这对于长远效率的提升十分重要。

7. 适当功能上的放弃,留下接口利于下一步提升

当项目上线比较紧张的时候,对于技术方案又没有明确定论,或者完美方案需要耗费太多资源的时候,可以暴露统一接口,实现上采用临时方案进行。比如哨兵配置下发,前期采用定时器方式进行,虽然对系统资源消耗多,有延时,但是简单实现方式快,适合初期赶进度,后期等项目缓解后再用新的实时下发方案。

3

管理跟进,多方提升

1. PM

项目管理中,项目经理PM,要定时跟踪项目的进展情况,找出系统瓶颈,协调与其他团队或者项目的关系,争取到必要的资源。PM要协调的目标方有开发、测试、产品经理、运维、部门负责人以及外部资源等,协调方式包括定期发送项目进度报告,定期召开相关方会议,与重点人员点对点沟通,取得他们的支持和配合。开发人员可以将一些协调的事情交给PM来解决,这样就可以专注于开发。

2. 产品经理,架构师

产品经理及时把握上线的执行偏移,上线后做实际测试,有问题马上向开发提出,确保线上产品的最后质量。架构师要及早对方案的可行性进行验证,编写示例代码,形成规范。

3. 测试

测试人员先期就参与方案的评审,尽快了解需求和产品。测试人员不单纯的是功能上的测试,对于技术架构也参与讨论,提出自己的意见,这样更能发挥测试对于全局的总体质量的把控,测试更深入。

效率的提升本质上是人的提升。团队团结一致,相互支持,遵循规范,这样才具有机动性和战斗力。人才是效率之根本。

4

平台集成,自动提升

在产品开发的实际进行中,自动化和平台化的引入,可以将我们的开发效率大大提升,这需要未来平台建设的完善。

1. 发布工具来实现代码分支的自动管理。用户需要分支的时候可以根据平台自动创建分支,在测试的时候可以直接利用分支集成测试,支持多个分支并行的测试。在发布的时候工具自动进行冲突检测,代码合并,tag创建等。这样可以大大降低由于人工误操作导致的效率降低。

2. 配置管理工具。开发,测试,预发,线上环境的配置需要一个集中的管理平台,防止配置变更导致的错误。

3. 代码review 工具的完善。有助于开发人员相互review代码,找出错误,形成规范,比如可以采用开源的Gerrit等。

 · END ·

【推荐阅读】

后端Java工程师如何将编码速度提升10倍?

一场开发与视觉的对话引发的思考

项望烽:移动IM开发那些事儿

网易云信|APP聊天功能1天开发

http://netease.im   果断关注,精彩不断

如何提升各开发角色效率,既保证产品质量又能快速上线?相关推荐

  1. 如何提升本地开发联调效率|阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十 ...

  2. 低代码:降低技术能力要求,提升软件开发效率

    出品 | CSDN云原生 在云原生及数字化转型的浪潮下,软件研发需求不断增加,由Forrester于2014年提出的"低代码/零代码"的概念不断发酵,并成为技术社区的宠儿.国内不仅 ...

  3. CIO访谈实录丨渤海人寿携手SmartX超融合大幅提升开发测试效率

    客户访谈:金融/保险业 新金融科技时代,数据的可靠性及平台计算性能是核心要义:新业务上线拓展的迅捷性,更是激烈竞争中重要的取胜之匙.在创新技术驱动业务发展理念的指引下,保险行业新兴寿险企业渤海人寿选择 ...

  4. 微信小程序开发05 研发加速:使用 Webpack 提升小程序研发效率

    你好,我是俊鹏.从今天开始,我会用四节课的时间带你学习微信小程序在工程化方面的实践方案. 小程序发展到今天已经成为很多产品的重要流量入口,随着用户量的增加,功能不断复杂化,小程序的体量不断增长,原始的 ...

  5. 如何提升团队开发效率

    前言   无论是哪家企业无论哪个行业可能都避不开效率问题,可能这也是大部分管理.老板最为看重的地方.原因就不多说了,相信都明白,我在这里讨论的特指软件团队开发效率的问题.   有时候看到现在各种996 ...

  6. Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

    Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓  O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...

  7. 腾讯再开源三项技术,提升企业开发及运营效率

    (2019年4月11日,深圳)在腾讯内部,工程师文化依然是主流,鼓励用代码.用技术说话--"talk is cheap, show me the code."而其中优质的技术,也正 ...

  8. linux物联网项目,6个开源项目提升物联网开发效率

    有数据显示,目前物联网端口数量预计在200亿个左右.到2035年,这个数字会扩大到1万亿,平均每个人会拥有超过100台端口设备,它们将涉及穿戴.家居.交通.教育.通信等人类生活的各个领域. 毫无疑问, ...

  9. python js 效率_巧用 db.system.js 提升20% 开发效率

    开门见山,20%是我造的,哈哈,为的就是让各位mongoer能够对db.system.js collection 引起注意. 这个也是在我最近浏览InfoQ 的时候,看到一篇关于MongoDB 文章 ...

最新文章

  1. Websocket总结
  2. 在Linux中远程通过ip和端口号以及密码登录redis的命令
  3. 对scala函数总结
  4. JAVA---MYSQL 基本知识点 第一部分
  5. 「leetcode」C++题解:20. 有效的括号,括号匹配是使用栈解决的经典问题
  6. Linux系统kill端口占用简书,MAC/Linux解决端口占用
  7. YDOOK:STM32: 最新版选型手册下载 2021
  8. 台式机装苹果系统_关于最近折腾黑苹果的一些心得分享
  9. 计算机组装物料清单,物料清单
  10. MISC:基本思路 · 常用命令
  11. erp采购总监个人总结_ERP沙盘实训采购总监总结,学到了很多知识,受益匪浅
  12. unity5.6.5_5.6现在可用并完成了Unity 5周期
  13. 联想V310笔记本装win7系统不能打开无线网卡 无线网卡一把红叉
  14. XiunoBBS ax_date 插件 日期显示不正确 修复
  15. php窗帘excel,各种办公室窗帘的用途及优缺点 办公窗帘安装讲
  16. 0基础学MySQL数据库—从小白到大牛(23)逻辑架构
  17. html调用 另存为,:将html另存为文本
  18. 模型损失函数变化曲线图_第3章 第6节 模型融合和提升的算法
  19. cups共享linux打印机_利用CUPS为linux安装打印服务并局域网共享
  20. webstorm项目上传git遇到的坑

热门文章

  1. Linux 重新挂载分区的方法
  2. 分析unix系统日期析取ftp登陆和断开信息
  3. mysql5.6 pt-query-digest,分析pt-query-digest输出信息
  4. python实现函数ifodd_09-Python笔记整理(函数)
  5. 安装 | Android studio连接不上真机解决办法(电脑安装虚拟机不成功的情况下)
  6. 人工智能 | 自然语言处理(NLP)研究团队
  7. 数据结构二:排序(快速排序和堆排序)
  8. 数字语音信号处理学习笔记——语音信号的数字模型(2)
  9. InvalidateRect()、UpdateWindow()、RedrawWindow()区别
  10. java有什么字符串_Java 中操作字符串都有哪些类?它们之间有什么区别