分享人:胡鲲鹏
1.朋友,你听说过敏捷么?
2.离开敏捷工具,我们怎么敏?p>
3.设计也要介入敏捷流程?
4.敏捷跟文档是对立的?
5.我这有个几百亿的大项目,怎么敏?
程序员说,要有敏捷,便有了敏捷
从敏捷的滥觞看去,比起方法,这玩意貌似更像一个宗教
千禧之初,美国在计算机行业已经走了几十年,瀑布流、螺旋模型、快速迭代...各种各样的软件开发流程雨后春笋各领风骚一段时间。虽然不断变化和完善,但互联网的加速发展让传统方法显得笨重,难以快速适应变化。有十七个程序员(程序员改变世界)在美国犹他州的一个风景区开了个碰头会,找到了一个团队耦合度高,流程极其灵活的方法,他们把它称为agile program development。
这十七个人如同开宗立派的长老,在会议之后给自己起了个名字“敏捷联盟”,他们不仅赋予了新方法名字,还有宣言,甚至纲领。
盐湖城- snowbird(敏捷联盟成立地——雪鸟滑雪场)。
中文版的“敏捷宣言”。在建立于2002年3月的 《Manifesto for Agile Software Development》里你可以找到几十种语言的“敏捷宣言”。
另外,长老们还制定了12原则,作为福音传播。
显而易见,敏捷是绝对的结果导向,去文档化,去流程化,高效沟通和合作是究极奥义。
看起来是个很不错的方法,文档不重要了,流程不重要了,大家聚在一起说一说就可以了不是吗?太棒了,感觉可以从繁重的文书工作中解脱出来了呢。
失之东隅收之桑榆。一处的方便一定意味着另外什么地方以其他方式运行着简化掉的部分。
去文档,敏捷管理者需要维护更为精细的需求池;去流程,口头沟通成为常态,对团队的耦合度要求更高。
初识敏捷,有一些概念需要了解
agile:迅速,敏捷。这是敏捷的理念也是精髓:迅速响应需求,快速反馈结果。agile 的引入像一股活水冲击着老气横秋的瀑布流模型,速度上跑赢几条街。
sprint:字面意思是短跑冲刺,一个开发阶段被认为是一次冲刺,一个个 sprint 首位相连,构成一个项目。
Scrum:指的是英式橄榄球中一股脑争球这一战术或行为,scrum 即为这样一种方式,大家一拥而上,团队是球员,球是产品目标,人员环环相扣,围绕着产品目标进行工作。这里面多少有点“统筹法”的影子,人员深入协作以达到最优化效果。
Product Backlog:backlog 即需求池。待办事项列表。Backlog 里面写什么:1.待开发任务,2.任务优先级。
敏捷需要维护一份详尽的需求列表。这份列表常常要求 scrum 持有人(一般是产品经理)对所有待开发事项有深入了解,并且能够把待开发事项分解成更为细致的任务(或者跟敏捷教练一起,后面我们会再次提到敏捷教练)
story board:很多领域都有故事板的概念,交互领域里,用故事板表述用户场景、电影领域里故事板用来更具体地描述分镜。在开发领域,故事版是任务流转的可视化窗口,一般有“待开发”“开发中”“待测试”“返工”“待发布”几个区块,所有任务由任务操作者负责流转至于下一个步骤,这样任何一个人项目成员都能看到任务的完成情况。
burn down chart:燃尽图。一个 sprint 内,人/时是一个比较固定的值。在这个时间框架充分安排开发任务,每天进行时间结算,绘制时间燃尽图。项目成员通过燃尽图获知时间进展,若项目燃尽所用时间与预期时间契合,则需求时间预估和安排合理,若不契合则需要在下一个 sprint 进行调整
这些概念定义了敏捷各个环节的工作,这些流程和节点是敏捷开展的基础和保障。
一个误区:我们用了敏捷管理工具,就敏捷了
随着敏捷在行业内的不断融入,各种工具产品层出不穷。国外jira、redmine,Axosoft ,国内的leangoo 、禅道,三大家则都有自研的工具,百度的icafe,阿里的aone,鹅厂自研tapd
(数据来源:“2016中国开发者白皮书”)
我们在敏捷软件 上建迭代,建需求,研发、测试等着收到需求流转的邮件之后开始干活...任务在测试和研发之间流转,bug 提给研发,研发解决 bug .....我们宣称:我们敏捷化了!
我们习惯于敏捷软件的便利,拉群解决一切,然而却丧失了敏捷的初衷,scrum 的本意。
设定一个环境,现在没有任何协同工具可用,但是所有人都坐在一起。有人站起来说,既然这样,我们不如敏捷吧!
敏捷工具消失了
敏捷路径里必须有一个项目持有者,制定规划并把握项目走向。这位产品汪我看你骨骼惊奇,你就担负起这个责任吧。
另外还有一个关键人物 SM。SM 全称 scrum master,中文称敏捷教练。一般说来,SM 需要由对技术开发以及当前项目明晰的技术经理担任。
虽然缺少线上工具,但至少要准备一些简单材料:一卷双面胶+白纸或一沓便利贴;笔,一面平坦的墙或一块黑板。
如果还有电脑可用,excel 或者 word,甚至写字板都可以,没有电脑那就白纸好了,总之你得找个地方写下你的需求池(backlog)
需求池示例(任务名称、平台、详细描述、优先级按照P0-PX逐渐递减)。
确定一个 sprint 周期的自然天。可以用月/旬/周等时间概念作为周期,我们选择一周(五个工作日)作为一个 sprint 周期。按照优先级,从需求池中拉出你认为应该加入你们一穷二白的第一个 sprint 里面去的需求,别太贪心,大概觉得差不多一周左右的开发量就够了。拉上SM桑单独开一次小会。
当然不是让你俩傻站着,你俩要开会
你们一起通览需求,SM 桑根据经验对需求先行分解一遍,比如某需求在开发层面需要分解为 ABC 三部分,这三部分就形成三个开发任务。
分解完成后,你得到了一个比较详细的待开发列表。
正式开始一个 sprint 开始之前,产品、研发、测试需要一同开一次 scrum 会议,共同讨论本次 sprint 的功能点。会上讨论什么:1.需求讨论或技术讨论;2.成员预估需求所需开发时间;3.需求是否match人力时间,需求排入sprint;4.交流一下感情。
每个任务的预估时间在最后由敏捷教练综合判定。scrum 会后你的工作:1.整理这个 sprint 内的需求列表;2.整理每个需求的预期开发时间;3.撰写故事版上的小纸条;4.把小纸条贴到故事版上;5.制作一个燃尽图。
一个改良版的小纸条,写明开发者、任务描述、预估时间和每日燃尽时间。
故事版布局如下:
一个标准的故事版:最开始所有的小纸条都在“待开发”一栏
到此为止,你可以开始 run 起一个 sprint 。
接下来你必须来参加每日举行的项目短会。这个环节在 agile 中非常关键,是 agile 的日常修炼。为了缩减会议时间,我们一般站着开——所以也叫“站会”,早上上班后或晚上下班前,抽出十到十五分钟时间,完成它。
每日站会
站会都有什么人参加:1.你(项目持有者)2.SM 3.其他 scrum 成员
站会干什么:2.昨天任务的完成状态,剩余多少时间,是否需要进行时间修正(增加时间或减少时间),把已完成的任务流转到下一环节(把纸条从一个item内撕下,贴到下一个item里去);
1.昨天大家分别做了什么事,遇到了什么问题,如何解决或寻求解决方案;;
任务进行中,小纸条的示例
3.功能测试后是否有返工;
4.交流一下感情。
站会之后你的工作:绘制燃尽图。
一个燃尽图的示例:正常的 sprint 的任务时间是随着 sprint 的进程逐渐减少的周而复始,完成了一个 sprint 后,你们开了第二次 scrum 会。这时议题多了一项:复盘上一个 sprint
任务未能燃尽;研发返工过多;测试需求淤积.....针对问题讨论解决方案,根据实际情况进行下一个 sprint 的任务安排。
一种思路是,设计拥有自己的敏捷流程。设计师作为一个 scrum 存在,以从上游获取的需求进行 sprint。
另一种思路,是把设计和测试完全纳入到团队中来,一起进行 scrum 的合作。
这样的话,UI工作至少要比开发工作前移至少半个 sprint。
很好,我们有了一个设计师,项目持有者将需求分为“ UI 支持”和“非 UI 支持”两类。我们将小纸条扩展一下。
多出来 UI 前置部分的小纸条,U I设计师参与到 scrum 会中。对于需要 UI 支持的需求,设计师给出一个 UI 制作的时间预估。项目持有者将这部分时间加到扩展小纸条上去。在一个 sprint 中,设计师的工作跟研发的工作分别进行
当设计师将某一需求完成时,将小纸条的 UI 部分撕下,汇入到“”待开发”中去
一切为快服务的敏捷特别适合初创团队使用。它能把团队人员紧密结合在一起,高效而有序地输出产能。而常规高效的版本输出往往是初创团队高速发展的第一要务。
从短期收益上看,文档对于敏捷开发是非必须品,并且很有可能会拖慢进度。在一个 sprint 中,口头沟通显然效率更高,每个人都有精确到工时的任务,没人有等待文档更新的时间。强调文档就等于放弃灵活性。
从长期和宏观上看,文 档对于敏捷团队和敏捷的实施利大于弊——节省在一些常规问题上的沟通成本,同时降低错误的发生概率。对于一个将要长期实施敏捷的 团队来讲,文档让后续的工作效率更高。
谁来维护文档,怎么维护?
我们挑选几个重要的文档:产品文档、概要设计、接口文档。
产品文档:不好意思内个产品经理你过来下。虽然你要维护 backlog 、跟 SM 分解需求、开 scrum 会、写小纸条、开站会、画燃尽图、还有什么外部沟通啊,写 PPT 啊,绞尽脑汁想规划啊......你还得认真把这个文档维护好。
产品文档包括:1.需求;2.加入日期;3.开发版本;4.呈现和详细方案
在非敏捷开发流程中,文档在评审会后完善并更新,形成一个给研发参考的实现目标。在敏捷中,需求本身在 sprint 周期内不断完善,你可以在一个 sprint 之后将文档补全。
概要设计:敏捷的常规迭代中,概要设计不是一个必须的文档。但全新项目、重构以及重大新功能则必须输出概要设计文档。研发 leader 责无旁贷,这个落你身上了。
接口文档:必要且重要。包括接口说明、字段定义、字段类型、值定义、数据上报、错误码等。一般来说约定之后由接口开发者更新文档,如果你们没有云端存储的能力,至少咱们人手一份,定期更新。
参考资料来自于:https://www.qcloud.com/community/article/766331。
感谢观看,如有出错,恳请指正
BY : 胡鲲鹏