迭代
程序员听到产品经理常说的话之一大概是——“这个需求很紧急,需要马上处理!”,当初刚成为一名程序员小白的我,惊慌失措。当然我算是比较幸运,有导师替我顶住一切,“他的排期满了,这个需求我们先放到下个迭代再实现吧!”
后面自己慢慢熟悉了这样的工作模式之后,再遇到产品经理类似的场景的时候,也不会再惊慌了。因为总能听到一个声音在耳边响起,“...,这个需求我们先放到下个迭代再实现吧!”
什么是迭代?为什么需要迭代?迭代有什么好处?迭代就在那里,知道它的存在,但是我却无法用恰当的词汇来描述它。
后来,后来~,我总算学会了什么是迭代,可惜你早已~~~(不好意思,情不自禁)。
后来在自己好奇心的驱使下,慢慢了解了一些项目管理的知识,所有的困惑便不再是困惑了。所以作为一名程序员,了解一些项目管理的知识,很正常吧!
其实前面描述的是敏捷开发模式下一个很常见的场景。
敏捷的价值观和原则
这里的敏捷(Agile),指的是一种软件开发模式,是一种以人为核心、迭代、循序渐进的开发方法,是拥抱变化的开发流程。
敏捷运动的推行者们根据自己的实践,在价值观和原则上达成了共识并发发布了敏捷宣言:
我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
- 个体和互动高于流程和工具
- 工作的软件高于详尽的文档
- 客户合作高于合同谈判
- 响应变化高于遵循计划
也就是说,尽管右项有其价值,我们更重视左项的价值。
同时也确定了敏捷开发的判定标准,即敏捷的12大原则:
1. 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
2. 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
3. 经常地交付可工作的软,相隔几星期或一两个月,倾向于采取较短的周期。
4. 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
5. 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
6. 不论团队内外,传递信息效果最好、效率最高的方式是面对面的交谈
7. 可工作的软件是进度的首要度量标准。
8. 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持步调稳定延续。
9. 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
10. 以简洁为本,它是极力减少不必要工作量的艺术。
11. 最好的架构、需求和设计出自自组织团队。
12. 团队定期地反思如何能提高成效,并依此调整自身举止表现。
迭代与敏捷
上面提到的迭代其实只是敏捷实践中SCRUM开发流程中的一个很小的环节。
通常一个迭代中,在迭代开始的时候,会进行一个迭代计划会。
(1) 迭代计划会上,产品负责人(Product Owner)和团队会从具有优先级顺序的产品待办事项列表中,选择优先级高的用户故事,并进行任务拆分,并创建迭代待办事项列表。团队成员领取任务,并进行任务排期故事点估算,画出任务燃尽图。
迭代冲刺(Sprint)过程中,团队再更新相应的任务板,并召开每日站会,沟通进度以及遇到的问题(昨天做了什么?今天要做什么?遇到了哪些问题?)
迭代完成则会召开迭代评审会和回顾会。
(2) 迭代评审会上,团队成员演示所完成的工作成果,产品负责人(PO)则决定是否接受用户故事。对产品关注的相关方则可以提出意见或建议,项目经理则将相关意见和建议记录下来,并在后续的回顾会或下一迭代的计划会中讨论和处理。
(3) 迭代回顾会上,则需要总结工作中的经验教训,找到可以改进的工作,并调整将来的工作,将可改进的工作纳入到产品待办事项列表,一遍后续的过程中执行。
整个过程中,Scrum Master则承担者教练的角色,指导敏捷实践,并帮助团队解决困难、清楚障碍。
在敏捷团队中,团队的成员都是通才型人才,合作更加紧密,具有良好的自组织能力。
总结
在现在的软件开发中,为了应对快速变化的市场需求,并向客户尽早交付有价值的产品,很多项目团队都会采用敏捷的开发方法。
敏捷开发的SCRUM实践中,项目团队成员具有更好的自组织能力,是通才型人才。产品负责人和团队紧密合作,Scrum Master为团队提供敏捷实践的指导,帮助团队解决问题、清除障碍。