浅谈云效中的开发任务拆分

使用云效公有云版本三个多月,对于任务拆分的一点心得,现在这里分享一下。

任务的定义

任务是从产品到开发到测试一个可以贯穿的概念,在Jira、github 等项目管理软件中,叫做 Issue,Issue 在不同的项目、项目中不同的环节都不太一样。称之为任务的确也没啥太多问题。

开发中过的任务,简单的来说,要完成的一个定义明确的功能项,不依赖内部别的功能,需要的时间根据难易度在两小时到一天左右,且一个人可以独立完成。

我们看到有些项目组的任务会定义为一个人完成的一个大的功能点,可能需要 2-3 天完成,这也是可以的。任务的重要边界是完成本身不依赖其他任务 ( 和定义好的接口通讯不属于此 )。

在开发过程中的任务大部分就是从产品需求而来,

下面这些都可以是一个独立的任务:

  • 一个 40 行代码左右的函数
  • 一个有三个方法的独立的类的定义和实现
  • 一个 3 屏幕高的网页视觉设计
  • 5 个表,每个表大约 20 个字段的数据库设计
  • 增加一个接口函数
  • 为了测试一个接口准备 50 个 test case
  • 某种 SAAS 服务的一种功能的接口对接

开发任务的详细设计具体怎么进行,这里就不展开了,因事而异。

任务的基本属性

在云效中新建一个任务会看到下面这些属性,有很多。

浅谈云效中的开发任务拆分

建议下面这些属性是必须要输入的,如下图中蓝色框出的:

浅谈云效中的开发任务拆分

  • 标题
  • 描述
  • 指派给
  • 优先级
  • 迭代
  • 归属项目
  • 版本
  • 标签
  • 预计工时
  • 实际工时

任务标题和描述

任务的标题非常重要,我们建议任务标题按照如下规则来进行:

  • 颗粒度一致
  • 字数不要太多
  • 句式尽量一致
  • 不要有歧义

好的任务标题如下:

  • 机具底层,回写发卡行脚本
  • 刷卡收款,完成交易轮询
  • 外部调用,提供获取商户的收款方式接口
  • SDK 初始化,完成统一初始化入口

写的不太好的任务标题如下:

  • 创建 jsp
  • 用户信息查询(商户)
  • 控台功能修复-交易查询
  • 单笔交易查询接口返回状态优化

推荐使用在以一个项目中: AAA,BBBBB。这样的句式。其中AAA 是某个大模块的名称,一个项目中的模块划分可以由项目经理确认,一般也不会超过5个,如果每个标题中的 AAA 都不太相关,说明颗粒度太细了。这样的描述还有个好处就是视觉上比较整齐。在有的项目中我也会建议 AAA 这里试用新增、修改、删除这样的描述,特别是一些底层的支持类的项目,变化也比较频繁的,可以用这类描述方式。

任务描述是对这个任务的详细描述,可以对这个任务更好的理解。很多程序员不太愿意写文档,经常看到一些程序员详细设计写的简单,项目评审流于形式,有些程序员急于想编码。这样的风险很大,使用尽量标准的项目开发流程可以约束这样的行为。任务的描述并不能替代详细设计,但是也是不可缺少的,因为对任务的标题的字数等有一定要求,不能太啰嗦,所以在描述这里可以尽量将当前任务的内容描述清楚,解决什么问题,可能会碰到的技术问题,包括一些业务和程序流程,甚至是伪代码。

云效系统的描述是支持 Markdown 格式的,所以在表现形式上完全不用担心,可以节约很多排版时间。

任务标签

任务标签也是重要的,对比 jira 这样强大的自定义工作流来说,基于公有云的云效的项目体系相对比较简单,状态有限(私有云版本的云效也可以做比较复杂的定义),至少我们可以通过标签来区分任务的属性。另外目前也是在尝试从产品需求到开发测试的全流程管理,所以用标签可以来区分不同的种类。

任务标签会显示在:

  • 迭代管理的任务项

浅谈云效中的开发任务拆分

  • 任务管理的任务项

浅谈云效中的开发任务拆分

  • 任务明细页

浅谈云效中的开发任务拆分

我们建议在开发项目的时候用下面这些标签,标签在一个项目或者最好在一个公司的所有项目中,保持一致,标签不要颗粒度太小:

  • 数据库
  • 控台
  • server
  • api
  • h5
  • app

任务的完成时间

任务的属性中有一个任务时间,有如下建议:

  • 一般情况下,不要小于两小时,或者大于三天,这个和前面说的任务的分拆原则要一致
  • 一天按照六小时有效开发时间计算,如果是加班的话,可以增加三小时左右;时间不要排的太满,因为一天之中总会有些开会、电子邮件回复、各种局部讨论等,时间排得太满,会影响项目进度控制

浅谈云效中的开发任务拆分

拆分任务的颗粒度一致性

分拆任务时候并不是颗粒度越小越好,在一个项目中,注意颗粒度的一致性非常重要。

在一个纯开发的项目里,可以把任务分拆成都是需要 20-80 行代码实现,按照一个函数一个类为最小颗粒度,也可以是按照源文件,比如所有的基于一个源文件的增加修改代码,还可以按照产品功能点来拆分,或许一个功能点也会涉及到好几个源文件,这种拆法在有些项目中也会有好处。

相对来说,建议按照下面方式来拆分:

  • 按照技术的详细设计的功能划分,基本基于单个文件的修改,由一个人完成
  • 更细颗粒度的,可以按照一个函数的拆分
    浅谈云效中的开发任务拆分

任务颗粒度和合并代码的复杂度

对于目前大部分项目基于版本代码分支的管理来说,任务的颗粒度到一个源文件,在代码合并时候比较容易,相对冲突会比较少。

如果任务影响到几个文件,并且这几个文件同时也被别人编辑的话,我们是推荐使用 git ,并进行每日合并,这样包括代码评审的过程一并进行,这部分在 git flow 流程中进行详细解释。

任务的生命周期

任务从建立开始,有一个生命周期,并且任务在这个生命周期里面,内容是可以修改的,有些属性是可以变化的。这也是我们强烈推荐使用系统来进行任务管理的原因之一,要达到同样的效果,可以减少大量的人工工作量。

任务的生命周期分为:

  • 待处理
  • 处理中
  • 已完成
  • 已取消

在看板中,可以通过拖放来调整任务所处的生命周期,并且云效工具支持对看板进行配置。

浅谈云效中的开发任务拆分

看板

看板管理是一个从工业管理中移植过来的管理名词:

来自于*的定义:看板管理,常作“Kanban管理”(来自日语“看板”,カンバン,日语罗马拼写:Kanban),是丰田生产模式中的重要概念,指为了达到及时生产(JIT)方式控制现场生产流程的工具。及时生产方式中的拉式生产系统可以使信息的流程缩短,并配合定量、固定装货容器等方式,而使生产过程中的物料流动顺畅。

在看板标示系统中常将塑料或纸制成薄板,将产品名称及数量写于其上,故此得名。及时生产方式的看板在生产线上分为两类:领取看板生产看板,旨在传达的信息是:“何物,何时,生产多少数量,以何方式生产、搬运”。

敏捷中的看板管理大家都熟悉了,现在已经不需要小贴纸在白板上了。非常建议使用本文中的看板模式,虽然看板模式从显示信息数量来说并不太有效率,但是对于产品经理、项目经理等来说,对于进度的控制的一目了然是最重要的。

图表

图表可以给团队和管理层提供一个可视化工具,有助于定义过程中的障碍,并且让每个人持续关注交付有价值的产品。

图表的作用:

  • 信息传递可视化
  • 真实反映(或者至少部分反映)团队正在进行的过程
  • 描述工作过程的情况
  • 用于控制工作过程
  • 任何人均可查看

浅谈云效中的开发任务拆分

浅谈云效中的开发任务拆分

浅谈云效中的开发任务拆分

任务的评论功能

我们觉得这是现代项目管理软件非常有特色一个地方,不管是 jira、github 以及云效,都可以很容易的进行对任务的评论。有时候我们在详细设计的时候,并不能真正的考虑周全,或者因为时间的关系,有些内容先简单的写一下。项目开发的组长、其他开发人员、在准备测试的测试同事以及产品经理,都可以在一个任务下面进行评论,提出自己的问题。开发人员可以在这个小小的讨论区进行针对性的讨论。我们称这样的过程可以看到一些变化的过程,对于项目后期评审以及其他新加入项目组的同事学习有很大的好处,你看到的不光是结果,还有所有相关人讨论的过程。

云效的任务评论功能可以像微信等,用@符号在评论中指定需要额外看到的人,除了任务的创建者以外。并且通过邮件来发送到和这个任务相关的同事。

浅谈云效中的开发任务拆分

任务拆分的注意事项

不要把任务拆分为:立项、详细设计、开发、测试等这样,这是项目的流程环节,而不是项目中的任务。

需求中的任务可以是任务的功能,有点像我们平时说的 feature list 中的项目。
开发中的任务就是技术的详细设计的拆分,有些比如时序图等文档可以以附件形式存放。

每个任务有一个 ID,就像是 Issue number,这是一个唯一的 ID。

浅谈云效中的开发任务拆分

需求池管理

在敏捷开发中,我们称之为 Backlog,我们观察到,大部分项目其实开发总是来不及在指定的版本完成的,而需求每天会因为各种情况层出不穷,所以需要一个需求池来存放这些不能马上开发的需求。

需求池中的需求的走向:

  • 因为紧急程度,成为目前版本中需要开发的需求;这样的话,需要重新评估需求影响、开发、测试等细节,这也是会造成项目延误的原因;
  • 需求池中的需求最好的走向是成为之后上线版本的需求,这样既不影响这个版本的开发,也可以让各方面同事对整个项目有更好的理解,比如为某些优化、某些分级在设计数据表、设计类结构等的时候留好足够的余地;
  • 需求取消;
  • 需求合并,不管是产品需求、功能优化等都可以在需求池中先列出来,然后产品经理、项目经理等经常检查审视的话,就可以进行一些合并,抽象出一些共通的内容等,所以这也是我们一直觉得要有一个需求池的好处;

既然是需求池,所以其中的任务可以是比较简单的,前面说过,在任务的标题这里需要说明清楚,但是具体的详细设计、关联影响等可以暂且省略。

上一篇:Python多线程与多进程浅析之一


下一篇:新挑战、新效能,2019阿里巴巴研发效能峰会完美收官