type
status
date
slug
summary
tags
category
icon
password

敏捷宣言

个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
 
这四句话是敏捷理念的核心,最重要的是通过及早持续不断地交付有价值的软件使用户满意。两个关键词:及早 和 持续不断。一切遵敏捷宣言的流程落地,都应该围绕这四句话。我越来越感受到敏捷在业务研发中的重要性。
敏捷宣言,并不是非此即彼的,“个体和互动 高于 流程和工具”,不是说流程和工具不重要,“工作的软件 高于 详尽的文档”更不是指文档不重要,流程和工具很重要,文档和知识库也非常重要,规划和roadmap也非常重要。
敏捷不是一种方法,而是一种理念,也是当你需要trade off时的决策依据。
 
敏捷开发十二原则
  1. 我们最重要的目标,是通过及早和持续不断地交付有价值的软件使客户满意。
  1. 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
  1. 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
  1. 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
  1. 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
  1. 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
  1. 可工作的软件是进度的首要度量标准。
  1. 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
  1. 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
  1. 以简洁为本,它是极力减少不必要工作量的艺术。
  1. 最好的架构、需求和设计出自自组织团队。
  1. 团队定期地反思如何能提高成效,并依此调整自身的行为表现。
  1. Kanban工作流,注重于持续的改进和交付,它不强制要求固定长度的迭代或冲刺,同时强调弹性规划,在项目进行中,可以灵活地添加或改变任务。对于上线时间,如果因为其他事情插入导致延期,其他人协作分担 或者 提前告知延期即可。
    1. 大多数公司的需求是倒排期,导致延期或者插入变得不太可能,甚至让Kanban工作流无法执行。认真想想,那么多需求都值得倒排期吗?很多事情拉长时间周期来看,都是不重要的,重要的事情总是那么少。

Scrum

敏捷(Agile)是一种理念,Scrum是完成工作的框架。敏捷开发理念侧重于通过小规模和频繁的发布进行持续的渐进改进。
一个“敏捷”团队,需要整个团队一致努力,达成小规模、快速向用户交付价值的思维理念。
敏捷除了Scrum一种框架之外,还有Kanban、极限编程、精益等。

EPIC

史诗,敏捷开发中用于管理大型需求和复杂业务的一种方式。
在Scrum中, EPIC,Feature,Requirement 都是需求层次的抽象,也通常会被混用。
到底是 Epic的scope更大 还是 Feature更大,没有绝对的定论,看大家的理解和使用。
在日常中,一个PRD(Product Requirement Document)可以简单认为是一个EPIC/Requirement,多个相关的PRD、或者是跨团队协作PRD组成了一个Theme。在Theme之上,也有更大的概念,version版本 等。
🚦
|–Theme
|-- Epic / Feature / Requirement
|-- User Story
|-- Task
|-- Sub-Task

User Story

是一种简洁、可理解、可验证的描述方式,用于表示软件系统的用户需求和期望行为。通常情况下,每个用户故事都包含一个简短的标题、用户角色、行为描述和验收条件等四个要素。
用户故事 可以按照一定的格式描述为:  作为xxxx用户,我需要做xxxx操作,实现xxxx结果。 As a xxx, I need xxx ,as than xxx
比如,词汇标签CRUD 就是一个技术语言的、技术方案自下而上的user story。严格意义上,不能称作story,而只能算Task。
正确的User Story写法可能是:
  1. 作为内容运营人员,可以在运营CRM设置搜索条件,查询到匹配条件的词汇列表
  1. 作为内容运营人员,可以在运营CRM通过Excel导入新词汇
  1. 作为用户,在C端产品点击词汇详情后,可以按照ID查询到词汇详细信息。

Task / Sub-Task

需求开发的任务粒度。任务拆解越细,时间预估越准确。

Story Points

故事点是一个度量单位,用于表示完成一个产品待办项或者其他任何某项工作所需的工作量的估算结果。
在Scrum中,使用 Story Point来对上面的代办事项做估时量化。Story Point拆解在Task上,然后往上聚合到 Story、Epic、Theme等。
💯
0分 = 很快  < 0.5h
1分 = 上午
2分 = 1个下午
3分 = 1天
5分=2天
8分=3天
 
不同公司和团队的Story Points定义可能不太一样。对于Task的拆解,建议不超过2分。超过2分的Task,需要拆解成多个Task 或者 拆解sub-task,更能保证拆解科学性和可落地性。2分还是3分为限,还是看团队节奏和习惯。

Backlog

Backlog 翻译成中文就是 代办列表,或者 积压。 主要分成两种:product backlog(产品backlog)、sprint backlog(研发backlog)。
从Epic拆解出来的 Story、Task等 都会先进入到Backlog中。
Scrum流程的话, 在sprint会议上,会决定哪些backlog进入到下一个sprint。
Kanban流程的话,有明确时间安排的(比如按周计划)的,则放入 已选中。

Sprint

冲刺。代表一个研发周期,此研发周期包括测试时间。一般一周 或者 两周一个sprint。
单个完整的sprint 需要交付 可work的产品
如果一个需求需要拆分成多个sprint,理想情况下 每个需求 都需要在此sprint拆出来可单独上线的Story,这些增量组合成可work的产品,所有的增量完成整个Epic。
Sprint定一周还是两周,并不是严格的,看团队的平均需求大小、稳定性要求、发布速率、测试周期等等。比如在过年前,只有四天的工作时间,那这四天也是可以作为一个sprint;某个项目周期时间比较长,可以按照两周拆sprint。这里按两周拆sprint,每个sprint都有承诺交付的增量,这里的sprint拆解 和 项目管理中的里程碑拆解是相通的,完全不冲突。

其他

三个角色: scrum master/ product owner / developer
五个事件:Sprint、Sprint planning、daily scrum、sprint review、Sprint Retrospective
三个工件:Product Backlog、Sprint Backlog、Increment
 

敏捷流程和技术质量

敏捷/scrum 是不是和设计技术方案相冲突?在流程中加入技术设计和技术评审,会不会导致不够敏捷?

  1. 敏捷强调的是快速迭代和适应性,这并不意味着忽视了技术设计。相反,良好的技术设计是支持敏捷的关键因素。敏捷原则中有一条“坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强”。
  1. 流程中加入技术设计和技术评审有助于确保设计质量,并且可以避免未来的返工。你有可能会觉得技术方案评审需要挺长时间甚至研发会等评审完再开始开发,而导致流程本身的不敏捷。关键在于将这些活动与敏捷流程融合,使其快速且高效。
  1. 在敏捷流程中,如何在保证敏捷的基础上,加入技术评审,同时保障技术质量?两个关键节点,一是技术设计评审,二是code review
    1. 技术评审:不是所有的需求都需要写技术设计文档,超过8分(3pd)的持续开发,需要写技术设计文档
      1. 如果8分(3pd)的开发,需要额外多3分来写技术设计文档和技术评审,是不是就得不偿失了?技术设计文档是为了讲明白我要怎么设计,而不是需要花很多时间去写一个详细的文档。8分的开发,如果多2分来写文档和拆解task,是合理的。甚至说,技术设计写完之后,开发效率理论上是提高的,总体时间可能还是8分。
      2. 技术评审,按需直接文档评审,或者线下约会议室评审。
      3. 技术评审不block开发进程。在做技术设计时,把握“至少两种方法”这一关键点,就可以保障技术设计大概率没有问题。
    2. code review 是保障质量非常重要的一环
      1. 对于没有技术方案评审的代码,需要通过code review来保障质量
      2. 敏捷流程 强调代码的共享所有权(Collective Code Ownership),代码属于整个团队,质量是所有人的共同责任。不能有的心态是“这块儿不是我开发的,我就不需要去关注了”。
      3. 代码是共享的,就意味着,A提交的代码,其他人是很有可能以后会去改的。敏捷中是要求研发之间互相code review,除了保证设计质量,同时也会促进知识共享、增强协作,提高敏捷和灵活性。
      4. Code Review,参考 一张图解Code review怎么做。一言总结:by design & by code

各个方向需求的重要紧急程度不同,需求大小不同,如何避免出现 有些人很忙,有些人很闲的情况?

  1. 缩小协作单位,以用户故事为研发单位。用户故事帮助团队聚焦于最终用户的需求,使得开发过程更加目标明确。敏捷team通常在迭代开始时就确定一组用户故事,以此为基础进行开发工作。
  1. 代码共享。在敏捷流程中,研发领走的是User Story,而不是Requirement/Epic,协作上依赖抽象不依赖实现
  1. 代码共享也不意味着哪里有砖搬哪里,而是在一个相对稳定的敏捷team中相互补位。理想中的状态是:每个人专注在自己的做的事情上,同时又对其他的需求有一定的了解。

互相改代码的情况下,如何保证代码整体质量 和 系统的架构演进?

  1. 代码共享,也是俗称的“互相改代码”,一定程度上会导致owner意识问题(流程导致的而不是个人问题)
  1. 重构。《重构:改善既有代码的设计》说的是,渐进式重构(小步前进、逐步改进、重构和新功能开发分离),不是定期重构更不是重写。需求总是会变化的,代码语义也是需要变化的,如果每个人在看到历史代码的bad smell时,都fix smell,那质量就能得到保障
  1. 定期的架构review和技术债务管理
    1. 对于大的需求、新的theme需要走技术设计评审。
    2. 定期review系统架构优化的必要性,特别是需求多 迭代快 issue多的系统。
    3. 对于技术债务,遵循“识别和记录 → 评估影响和优先级排序 → 大债务立项偿还 & 小债务持续偿还”的流程。技术债务的分类记录 是改进的前置环节,只有先记录下来优化点,并真切地安排时间去做优化,才能偿还技术债务。没有计划到日程中的任务,就不可能得到执行。

如何做到“每个人专注在自己的做的事情上,同时又对其他的需求有一定的了解”?

  1. 如果团队小,比如4-7人,大概率大家是一起协作来完成一个需求。这种情况下,需求评审一起参与即可。
  1. 如果团队大了,比如超过8人,可能需要拆分成多个敏捷team。在拆分敏捷team的情况下,可能的方法:
    1. 同一个scrum team,需求评审一起参与。不同scrum team定期组织分享,需求问答和技术讨论会
    2. 用好需求管理工具,比如Jira board,所有的需求、研发进展都在上面可见,保证信息的易得性
    3. 鼓励自主了解。每个prd都会提前发出来,供所有人查阅。鼓励团队成员主动查阅文档和会议记录,并在有疑问时主动寻求答案
    4. 团队知识库建设。文档分门别类,分类整理,所有需求、技术设计、分享等资料 都放在团队知识库中,方便查阅和索引

在研发流程中,有新的任务/bug fix等任务插入 怎么办

  1. Scrum工作流,有固定的迭代周期,强调了每个sprint交付一个可增量的、可交付的产品。在sprint的规划中,默认需要预留足够的时间,来应对插入任务/bug fix等。如果你本周onCall,就需要多预留时间,否则一般预留20%时间不排。
  1. Scrum更适合于大型项目,按周/两周 规划拆解里程碑sprint,更保障承诺和交付。Kanban更适合于中小型需求和迭代,Kanban更强调弹性,可以灵活添加和改变任务。
  1. 不论什么研发流程,周计划都需要预留20%的时间 来应对突发事件/会议等。

敏捷开发是不是等于Scrum?

  1. 不是的。Scrum只是敏捷落地的框架之一,除此之外还有Kanban、极限编程、精益等等思想和框架。所有的框架和流程都是为了实现落地敏捷宣言。
  1. 按照我的经验,敏捷落地过程中,不要限制自己只使用scrum和sprint,特别是当团队大了之后,一个scrum board是不能解决所有问题的,可能需要拆分敏捷team,有的team适合scrum、有的适合kanban,同一团队的不同阶段甚至同一阶段的不同Epic都可以选择使用不同的工具和流程。如果你只有4-7个人,使用同一个scrum或者kanban board是比较合适的。如果人更多,可能需要拆敏捷team。可以只用Scrum board或者Kanban board,也可以都用,甚至可以使用文档来管理story和task,取决于团队自己的文化、协作方式、自驱力自主性等。我的经验,Scrum因为有sprint这种承诺的阶段性交付,可能敏捷性不如kanban,但是交付的承诺性会更好。

怎么在团队中成功落地敏捷文化?

  1. 需要整个团队一致努力,达成小规模、快速向用户交付价值的思维理念。统一认知,用好工具(推荐jira),积极主动,小步快跑,持续优化。
  1. 以好处换动机。研发同学大部分是不太乐意去在jira上拆解一个又一个的task,然后还要按照流程和规则去拖动的。但是如果通过拆解和敏捷流程,能够让大家更好的协作、更少的加班、更有成就感,这件事就会更容易落地。亦或者,用board上的task状态,来换取每天晨会的无聊陈述,可能研发也会更乐意。B=MAP,只有可以简单做到的、快乐的、可以得到正向激励的群体行为 才能顺利执行下去。
  1. 工具和流程 重要 也不重要。无论是Scrum还是Kanban或者其他框架,都是为了落地敏捷理念,切不能因为流程和工具本身而导致不敏捷,一切的基准都是敏捷宣言。
 
敏捷流程中,如何应对需求变更乔哈里视窗|基于公开象限的有效沟通、开放式提问、反馈工具和团队文化培养