前段时间参加了两天敏捷开发管理培训,收获挺大,在这里做一下总结。

理解敏捷

整个培训过程中一直穿插着敏捷软件开发的原则进行讲解,这里摘录给我感触最深的几个:

  • 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意,经常地交付可工作的软件,相隔几星期或一两个月,倾向于较短的周期。
  • 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
  • 团队定期反思如何能提高成效,并依此调整自身的举止表现。
  • 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。

敏捷流派主要有两个:Scrum 和 极限编程。Scrum侧重项目协作流程,极限编程侧重提高编程效率的技术实践。两者应该相辅相成。这里着重讲讲Scrum。

团队与角色

Scrum中有Product Owner、Team、Scrum Master三类角色。一个好的Scrum团队以下特点:

  • 通常5~9人;
  • 跨职能,跨模块人员构成;
  • 成员应全职投入;
  • 团队自组织管理;
  • 迭代内保持团队成员稳定。

做好一个Product Owner要点如下:

  • 定义产品功能;
  • 定义产品发布的日期和功能;
  • 对产品的投入产出比负责;
  • 根据市场情况对需求排列优先级;
  • 如果需要,在每个迭代合理调整产品特性及其优先级;
  • 介绍或拒绝开发团队的工作成果。

Scrum Master要引导团队自己去找答案,而不是做一个发号司令的人,做好一个Scrum Master要点如下:

  • Scrum正常运作的守护者;
  • 激发团队创造力;
  • 改善开发团队的外部环境;
  • 辅导团队提升运作效率;
  • 排除团队遇到的困难;
  • 保持团队紧密合作;

Team就是团队中的开发、测试或ui设计人员。

需求管理

Scrum通过编写用户故事来管理需求,好的用户故事的原则如下:

  • Independent独立的;
  • Negotiable:可讨论的;
  • Valuable:对用户或客户有价值的;
  • Estimatable:可估计的;
  • Small:小的;
  • Testable:可测试的。

之后要进行工作量估算,Product Owner(业务人员)必须在场梳理需求,每个项目成员针对用户故事的疑问向Product Owner提问,所有人弄清楚需求后开始。

大家先找一个参照需求,确定它的工作量,然后其他的需求就按照这个参照需求来估计,这种相对估计法确保每个人估计出来的工作量是一致的。

使用扑克牌,大家同时给出需求的估计值(而不是轮流进行),估值最高和最低的必须分别给出原因,这样做的好处让大家都独立思考。通过多轮估值让所有人了解需求,并估算出一个较为合理的工作量。

Scrum中的各项活动

简单来说,划分如下

项目计划|
Sprint0|
Sprint1|
Sprint2|
Sprint3|
项目总结|

按一个迭代周期来说,主要划分如下:迭代计划和评审一般要占用两个小时,而站立会议一般15分钟。

迭代计划1|
迭代计划2|
站立会议|
…|
站立会议|
迭代评审|
迭代回顾|

Spint0要做一些准备活动,如高层的业务流程图、初始的用户故事列表、测试策略、发布计划、团队建设、技术架构的选择、设计UI的风格等。

站立会议

晨会的要点:

  • 轮流发言,持Token者才可以发言;
  • 不讨论深入细节;
  • 不是对领导汇报,让团队中每个人都了解你的发言;
  • 不能单独讨论,自发的有序的进行发言;
  • 时间在15分钟以内。

站立晨会的三个经典问题:昨天我完成了哪些工作;明天我打算做什么;完成我的目标是否存在什么障碍。
站立晨会的目的不是为了让大家都回答那三个问题,而是让团队围绕这三个问题,制定当天的工作计划并暴露问题。

迭代验收和回顾

迭代验收会议,通过演示可工作的软件检查需求是否满足客户要求;迭代验收的好处:

  • 通过演示可工作的软件来确认项目的进度,具有真实性;
  • 能尽早获得用户对产品的反馈,使产品更贴近客户需求。
  • 收集反馈。

迭代回顾会议,目的是分享好的经验和发现改进点,促进团队不断进步,迭代回顾的好处:

  • 激励团队成员;
  • 帮助团队挖掘优秀经验并继承;
  • 避免团队犯重复的错误;
  • 营造团队自主改进的氛围。

利用敏捷改进现有工作

即使不使用敏捷方式开发,也可以利用它的一些好的想法和实践可以用来提升目前的工作效率。

  • 比如敏捷开发中如何调动团队积极性,让每个人看到的是团队目标,而不是个人目标。
  • 比如经常地交付可工作的软件:以此提高软件开发的质量和可交付性。
  • 比如借鉴敏捷中设定Sprint(冲刺)的开发过程,调动开发人员的积极性以及明确每个开发阶段的目的性。

其他问题

  • 需求文档 或者 使用说明文档 写了100多页,但是写完之后基本没人看,这样的问题应该很普遍,该如何解决?
    把Word文档迁移到Wiki上,大文档切细分成一个个独立的Wiki页面,Wiki可以统计页面的访问次数,有了足够的数据支撑之后就可以把访问次数少的页面去掉,以此来精简文档,这样留下来的文档内容就是真正有用的。
  • 业务部门的需求太多而且每个都非常紧急,怎么处理?
    业务部门拉一个人对需求按价值进行排序;需求收集例行化,主动收集,需求有一定的清晰度;回顾哪些需求不重要,做为武器。