身为产品经理,你懂开发团队的交付过程吗?

7 评论 18280 浏览 84 收藏 10 分钟

持续交付是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。本文作者仅希望通过通俗的语言,来分享自己一点关于“持续交付”的认识。

我们都知道,产品交付,是需求实现的“最后一公里”路,但交付不仅仅只是“将代码部署到测试环境,测试通过后,即可上线”一句话这么简单,交付过程涉及到复杂的流程、团队协作和交付工具等等,任何一点都会影响到产品的整个生命周期。

一般来说,产品经理极少会参与到最后代码交付过程中去,因为交付主要是由研发、测试和运维等角色在负责,产品经理最多参与进测试阶段。

事实上,所有的产品团队成员,都应该对我们的产品目标负责。一名合格的产品经理,切勿从心理上,就将产品、测试甚至是研发、运维的职责都完全割离开来,从需求的诞生到实现,产品经理应该尽可能的了解和知悉每一个过程,才能让需求实现更加的顺畅,促使自己能够换位思考,掌握全局。

本文主要来讨论一个概念——持续交付,我并非技术出身的产品经理,仅希望通过通俗的语言来分享自己一点关于“持续交付”的认识。

持续交付是什么?

百度百科上的定义:持续交付是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。

光看这句话是不是一脸懵逼?

关于持续交付的定义,其实早有前人给出了很通俗的解释:

持续交付是软件研发人员,如何将一个好点子,以最快的速度交付给用户的方法。

感觉还是有点抽象?

没关系,我们来解读一下这句话:上句中、好点子,就是需求;交付给用户,就是需求上线,这是一个众所周知的过程。其实这句话强调的是:最快的速度,也就是说交付过程的重点是效率。

这和敏捷开发的概念是不是有点类似?

什么是敏捷开发呢?

提到敏捷开发,不得不提到与之相对的一种开发流程:瀑布流开发——即严格地将开发分隔成各个阶段:需求分析、要件定义、基本设计、详细设计、编码、单体测试、结合测试、系统测试等。有点像工厂流水线,前一阶段的完成才能开始下一个阶段的工作,意味着没有回头路,返工代价很大,用户对需求无法反馈,十分不适应。

这样的开发方式已经无法适应当前的易变、模糊、不确定的互联网环境了

就像斯宾塞·约翰逊说过的:

唯一不变的,就是变化本身。

所以敏捷开发方法像净化空气的春雨般出现了,敏捷开发方法的核心是迭代,也就是通过2-4周的迭代时间,不断的交付客户的需求。每一次迭代都包含需求分析、设计、实现和测试等多个环节,每一次迭代都可以生成一个稳定和被验证过的软件版本。

敏捷开发是强调敏捷的软件开发项目管理方式,而持续交付是强调效率和灵活的一种软件工程手法,持续交付就可以定义为敏捷开发管理的一个子集。

怎么看待持续交付?

经过了以上定义,大部分人对持续交付究竟是做什么的,还很茫然。接下来将结合其他概念,让大家更深入理解持续交付。

提到持续交付,不得不提到持续集成、持续部署,也就是我们常说的CI/CD。

  • 持续集成:我所理解的持续集成是,在进入开发阶段前,会将研发工作进行拆解,可能是拆分成不同的功能模块,也可能是拆分成若干个任务由不同人员来进行开发。拆分之后,就一定需要将代码合并起来,形成完整、有效、正常运行的代码,这个过程叫做集成,反复持续,就叫持续集成。
  • 持续部署:持续部署是持续交付的最高阶段,代码在经过自动化测试、单元测试或者评审后,自动的部署到正式(目标)环境中,快速安全的交付给用户使用。

持续交付则是一个承上启下的过程,它是在持续集成后,通过测试、产品的使用和验证和反馈后,不断地对产品进行优化。

我们再回顾前面提到的定义:

持续交付是软件研发人员,如何将一个好点子,以最快的速度交付给用户的方法。

产品、测试就是所谓的第一个用户,所以这个定义还是很贴切易懂的。

持续交付,从业务层面来说,其实是存在着决策的过程的,因为它是在部署到正式环境之前,产品经理或领导者需要做业务判断,判断代码是否可正常交付?是否解决业务问题?是否满足业务需求等等?

那么持续交付从技术层面,是怎么实现呢?

持续交付的实现方向

持续交付的具体实现方式要从配置管理、环境管理、构建集成和测试管理等几个方面入手,仅仅通过一篇文章是无法讲述清楚的,并且更适合由研发人员去研究和实践,感兴趣的话可以阅读《持续交付-发布可靠软件的系统方法》这本专业书籍来具体学习。

这里我仅仅从宏观的产品角度,来总结持续交付的实现方向:

为令人痛苦的手动步骤,建立起可重复、可靠的自动化过程。每一次的修改都能够经过一次构建、测试、部署、发布完整高效的自动化验证过程,实现高速频繁验证,快速解决问题的闭环。

最后的结果就是:小批量/小粒度频繁的进行持续部署或发布,从而得以实现持续交付。

当然,在前往这个方向的道路上, 一定要有猛药去疴的决心,如:

(1)技术层面

  1. 改变dev/ops团队在PaaS层面所使用的工具和应用方式;
  2. 改变系统架构、部署架构等。

(2)组织层面

  1. 优化调整人员结构;
  2. 打破耗时、完全人工的流程束缚;
  3. ……

产品经理能享受持续交付带来的好处吗?

持续交付所带来的收益和价值是能覆盖整个产品团队,而不仅仅是开发人员。

  1. 产品的灵活交付、发布可控,随时有一个稳定可发布的版本,产品人员身为产品前进方向上的主导者,可以有效把控版本发布节奏。而且,计划是赶不上变化的,代码交付、功能点部署,是可以根据业务要求可灵活变换的。
  2. 产品人员是曝光在大众、用户目光底下的人,是出现问题故障,要首当其冲化解内外矛盾的人,产品人员对整个产品上线能否正常运行负有重要责任。同时,产品人员还是“产品的第一个用户”,我们可以享有持续交付的保护,因为持续交付可以保证在迭代中的每个阶段或需求变化时,都能够及时测试验证,获得问题反馈。
  3. 因为持续交付,需要持续构建和集成代码,并且及时部署到测试环境去验证,产品经理以此可知悉当前开发的进度和质量,及时决策或调整,避免开发人员无故拖延工期所导致的扯皮现象。
  4. 在实施持续交付后,可以做到在保证交付质量的前提下,加快交付速度,从而更快地得到市场的反馈,产品经理就可以尽快做出判断,更好的引领产品的方向,最终达到扩大收益、提高价值的终极目的。

 

本文由 @有馅儿的丸子 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自 Pexels,基于 CC0 协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 瀑布流开发或者说螺旋开发 都是可以经过【需求分析、要件定义、基本设计、详细设计、编码、单体测试、结合测试、系统测试 的】持续迭代。
    敏捷开发核心并不是【迭代,也就是通过2-4周的迭代时间,不断的交付客户的需求。每一次迭代都包含需求分析、设计、实现和测试等多个环节,每一次迭代都可以生成一个稳定和被验证过的软件版本】。敏捷开发重点是在于业务人员和技术人员的相互信任,省去复杂计划和成熟设计(比如只勾勒草图),减少书面文字通过直接人与人沟通来节省文档时间和成本,不断的通过测试和试错来迭代版本。

    来自浙江 回复
    1. 您所说的减少书面文字的沟通时间和成本我赞同,但也只是敏捷开发的理念之一,当然我所说的也不是全部。另外,我对瀑布流开发在文中的解释也不是局限在您上面复制的那句话里。我个人认为,随着时间推移,技术、方式上的进步,以及团队工作的侧重点不同,对这些项目管理方式都会得出不同的见解和感受,不是你我三言两语能说清的。文章篇幅有限,重点不能偏倚,所以不能做太多持续交付概念外的解释。谢谢您对我文章的阅读,还提出了不同意见,互相学习 😉

      来自福建 回复
    2. 谢谢回复。我只是描述我参与过的多个项目开发模式下自己的理解。可能与你想法会不一样。多多见谅。

      来自浙江 回复
    3. 木有木有,应该有不同想法的碰撞,何来见谅一说 😆

      来自福建 回复
  2. silvia931031 互相学习 😉

    来自福建 回复
  3. 收藏了

    回复