今天你敏捷了没有?"敏捷" 在互联网和软件开发领域从涓涓细流逐渐演变为行业潮流,往小了说是改进了开发方法,往大了说是革了瀑布流式的命——把产品开发引向了快速迭代,小步快跑的路线上.
我们使用 tapd 写 feature,流转,跟踪任务,言必谈敏捷,然而我们是否真的走对了敏捷?(注:tapd 是腾讯内部的敏捷项目管理系统) .
1. 朋友,你听说过敏捷么?
2. 离开敏捷工具,我们怎么敏?
3. 设计也要介入敏捷流程?
4. 敏捷跟文档是对立的?
5. 我这有个几百亿的大项目,怎么敏?
6. 尽信书,不如无书.
一,朋友,你听说过敏捷么?
程序员说,要有敏捷
从敏捷的滥觞看去,比起方法,这玩意貌似更像一个宗教(笑).
千禧之初,美国在计算机行业已经走了几十年,瀑布流,螺旋模型,快速迭代... 各种各样的软件开发流程雨后春笋各领风骚一段时间.虽然不断变化和完善,但互联网的加速发展让传统方法显得笨重,难以快速适应变化.有十七个程序员(程序员改变世界)在美国犹他州的一个风景区开了个碰头会,找到了一个团队耦合度高,流程极其灵活的方法,他们把它称为 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:
很多领域都有故事板的概念,交互领域里,用故事板表述用户场景,电影领域里故事板用来更具体地描述分镜.在开发领域,故事版是任务流转的可视化窗口,一般有 "待开发"" 开发中 ""待测试"" 返工 ""待发布" 几个区块,所有任务由任务操作者负责流转至于下一个步骤,这样任何一个人项目成员都能看到任务的完成情况.
一个 app 使用情景故事版
在开发中,故事板展现所有需求的工作流
burn down chart:
燃尽图
一个 sprint 内,人 / 时是一个比较固定的值.在这个时间框架充分安排开发任务,每天进行时间结算,绘制时间燃尽图.项目成员通过燃尽图获知时间进展,若项目燃尽所用时间与预期时间契合,则需求时间预估和安排合理,若不契合则需要在下一个 sprint 进行调整.
名词听起来都玄乎乎的,很符合开宗立派的气质.这些概念定义了敏捷各个环节的工作,这些流程和节点是敏捷开展的基础和保障.
二,离开敏捷工具,我们怎么敏?
一个误区:我们用了敏捷管理工具,就敏捷了
随着敏捷在行业内的不断融入,各种工具产品层出不穷.国外 jira,redmine,Axosoft ,国内的 leangoo ,禅道,三大家则都有自研的工具,百度的 icafe,阿里的 aone,我鹅自研 tapd.
我们在 tapd 上建迭代,建需求,研发,测试等着收到需求流转的邮件之后开始干活... 任务在测试和研发之间流转,bug 提给研发,研发解决 bug ..... 我们宣称:我们敏捷化了!
我们习惯于敏捷软件的便利,拉群解决一切,然而却丧失了敏捷的初衷,scrum 的本意.
Jira 的名字来自于哥斯拉
假设我们没有任何项目协同软件,敏捷怎么实施?
设定一个环境,现在没有任何协同工具可用,但是所有人都坐在一起.有人站起来说,既然这样,我们不如敏捷吧!
敏捷工具消失了
敏捷路径里必须有一个项目持有者,制定规划并把握项目走向.这位产品汪我看你骨骼惊奇,你就担负起这个责任吧.
另外还有一个关键人物 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 成员
站会干什么:
1. 昨天大家分别做了什么事,遇到了什么问题,如何解决或寻求解决方案;
2. 昨天任务的完成状态,剩余多少时间,是否需要进行时间修正(增加时间或减少时间),把已完成的任务流转到下一环节(把纸条从一个 item 内撕下,贴到下一个 item 里去);
任务进行中,小纸条的示例
3. 功能测试后是否有返工;
4. 交流一下感情.
站会之后你的工作:
绘制燃尽图.
一个燃尽图的示例:正常的 sprint 的任务时间是随着 sprint 的进程逐渐减少的
周而复始,完成了一个 sprint 后,你们开了第二次 scrum 会.这时议题多了一项: 复盘上一个 sprint.
任务未能燃尽;研发返工过多;测试需求淤积.....
针对问题讨论解决方案,根据实际情况进行下一个 sprint 的任务安排.
自此,我们在没有任何敏捷工具的帮助下,开始了敏捷的旅程.
说起来 agile developing 本来就是排斥文档的作业方式,为一个小轻快的方法制作一套严谨庞大的工具,基本也算违背了元老们的初衷了吧,科科.
三,设计师在敏捷中如何介入?
我们正在使用或者听过的一些流程方法——不单敏捷,瀑布流,迭代式,结对开发,精益开发.... 似乎都不关设计师什么事.既然开发团队抱团敏捷了,设计,这个在产品流程中必不可少而工作内容相对独立的角色,要怎么介入敏捷呢?
一种思路是,设计拥有自己的敏捷流程.设计师作为一个 scrum 存在,以从上游获取的需求进行 sprint .
另一种思路,是把设计和测试完全纳入到团队中来,一起进行 scrum 的合作.
这样的话,UI 工作至少要比开发工作前移至少半个 sprint .
有请产品经理(项目持有者)出场.
很好,我们有了一个设计师
项目持有者将需求分为 "UI 支持" 和 "非 UI 支持" 两类.我们将小纸条扩展一下.
多出来 UI 前置部分的小纸条
U I 设计师参与到 scrum 会中.对于需要 UI 支持的需求,设计师给出一个 UI 制作的时间预估.项目持有者将这部分时间加到扩展小纸条上去.在一个 sprint 中,设计师的工作跟研发的工作分别进行.
当设计师将某一需求完成时,将小纸条的 UI 部分撕下,汇入到 ""待开发" 中去.
一个已经完成了 UI 设计的小纸条示例
四,敏捷不需要文档吗?
一切为快服务的敏捷特别适合初创团队使用.它能把团队人员紧密结合在一起,高效而有序地输出产能.而常规高效的版本输出往往是初创团队高速发展的第一要务.
敏捷了一段时间之后,产品进入正轨,项目拿到拨款,公司拿到投资,你们要扩大团队规模,新入职的同事想了解下产品和技术细节,你告诉 TA:
你要不翻下 backlog 看看?这个实现你要不看一下代码?这个字段我也不记得有没有了.... 你抓包看下?
新同事一脸懵逼,难道咱们没有文档吗?你自豪地指出:
"我们是敏捷团队."
十几个人八九条枪的阶段之后,产品趋于稳定,团队逐步扩大.无论从内部协调还是外部沟通上对产品流程的正规化和文档化要求与日俱增.
从短期收益上看,文档对于敏捷开发是非必须品,并且很有可能会拖慢进度.在一个 sprint 中,口头沟通显然效率更高,每个人都有精确到工时的任务,没人有等待文档更新的时间.强调文档就等于放弃灵活性.
从长期和宏观上看,文档对于敏捷团队和敏捷的实施利大于弊——节省在一些常规问题上的沟通成本,同时降低错误的发生概率.对于一个将要长期实施敏捷的 团队来讲,文档让后续的工作效率更高.
一个以讹传讹的过程
这样一个功在当代利在千秋的好事,当然要做.那么——
谁来维护文档,怎么维护?
我们挑选几个重要的文档:产品文档,概要设计,接口文档
产品文档:不好意思内个产品经理你过来下.虽然你要维护 backlog ,跟 SM 分解需求,开 scrum 会,写小纸条,开站会,画燃尽图,还有什么外部沟通啊,写 PPT 啊,绞尽脑汁想规划啊...... 你还得认真把这个文档维护好.
对又是你
产品文档包括:
1. 需求;
2. 加入日期;
3. 开发版本;
4. 呈现和详细方案
在非敏捷开发流程中,文档在评审会后完善并更新,形成一个给研发参考的实现目标.在敏捷中,需求本身在 sprint 周期内不断完善,你可以在一个 sprint 之后将文档补全.
概要设计:敏捷的常规迭代中,概要设计不是一个必须的文档.但全新项目,重构以及重大新功能则必须输出概要设计文档.研发 leader 责无旁贷,这个落你身上了.
接口文档:必要且重要.包括接口说明,字段定义,字段类型,值定义,数据上报,错误码等.一般来说约定之后由接口开发者更新文档,如果你们没有云端存储的能力,至少咱们人手一份,定期更新.
长久来看,文档是提高效率的一大利器
虽然《宣言》中明确地放低了文档的地位("工作的软件大于详尽的文档"),敏捷强调互动和变化,以及对变化的及时响应.诚然文档恰恰做不到如此灵活.但敏捷真的完全排斥文档吗?
文档的时效性和灵活性远低于口头沟通,但却有它实在的好处.
1. 空间上,文档传播范围更广.规范化和常规化的内容形成文档可以大大减少沟通成本.尤其在多个系统协作的情况下,跨 scrum ,跨团队甚至跨部门的沟通时有发生,文档的重要性和便捷性不言而喻.
2. 时间上,文档流传性更好.团队不是一成不变的,有人离开有人加入.更新换代中,新人快速了解系统,老兵传承研发理念;在更大的时间跨度上,团队可能成为忒修斯之船,文档的存在就是对产品历程的完整追溯,你将不用他人帮助就可以了解到产品的大部分面貌甚至全貌.
五,大项目怎么引入敏捷?
看起来敏捷方法特别适合产品常规迭代.有一种可能性是,你的产品需要插入一个巨无霸模块,与其说是模块倒不如说它几乎可以成为一个产品了.你想了想,这么大个项目怎么说产品,设计,研发,测试全情投入也得个一两个月.
还能走敏捷吗?
注意你的项目时间.有 deadline 的 scrum 是带着镣铐跳迪斯科,时间节点关乎 sprint 的大小.
大项目敏捷之前,先得不敏捷几步.
可能会发生一到多次需求讨论会.
团队必须不厌其烦地理解需求或修正产品经理 "天真的幻想",产品经理使用不断完善的原型同团队进(tao)行 (jia) 沟(huan)通(jia).在最后的产品评审之前,至少敲定产品框架和大部分细节.这次评审邀请项目成员和所有协同团队,除了敲定的产品功能,技术上需要得到一些初步结论(比如 "能不能做".事实上,产品经理应该在产品规划阶段就知会协同团队将要做什么).接下来进行概要设计(新产品,重构,重大新功能必须进行概要设计).技术评审邀请除设计以外的项目成员和协同团队参会.
大项目敏捷中:
1. 将 deadline 之前的时间分解为多个 sprint .(deadline 之前必须留出一定 "出血时间" 用以解决时间预估不足的任务,返工任务以及 bug )
2. 将所有需求分解成任务,开一次全局 scrum 会.预估时间之后,分散任务到各个 sprint 中.在时间较紧的情况下,sprint 的容量就要相应增加.
一个需要加班的 sprint
3. 进入敏捷流程,常规 scrum 会,站会,燃尽图,故事版.未完成任务在 scrum 会上重新预估时间,滚入新 sprint 内,以此类推(按时完成 sprint 内的任务是目标.实在不行我们还有 "出血时间" 呢)
4. 别忘了文档.
虽然被推崇备至,但敏捷并不是完美的开发方法.敏捷的最大的优势是灵活,而造成敏捷问题的根源也正是灵活.
文末再总结本文重点:
1. 敏捷是一种流程,方法,理念,甚至信仰.
2 用了敏捷管理软件不一定就是敏捷.敏捷的初衷是团队成员能够更加紧密地配合完成工作,线上的的流转如果削弱了这种配合性,反倒背离了敏捷的本意.实际上只要有白板纸张和笔,你的团队就能开始敏捷.
4. 我们敏捷了,不是不要文档了.在外部交流多,世代跨度长的情况下,文档的必要性显而易见.长期的面对面沟通最终会导致低效,这也是敏捷缺陷的根源.
5. 设计师可以完全介入到敏捷流程中,只需要做一些细心的安排.
6. 大项目开发中可以走敏捷,具体问题具体分析,需要根据项目特点制定敏捷计划.
(文章所有插图为笔者手绘,版权所有)
来源: https://www.qcloud.com/developer/article/1004881