【腾讯敏捷转型No.6】如何打造称手的敏捷工具
通常情况下,大家对于敏捷的感受就是:大家一起来开站立晨会啦!然后一大早,大家拿着早餐,围成一个圈,听一个人在讲话。
在很多公司,决定采用敏捷之后,都会从晨会开始,因为很多人觉得敏捷其它模块都很难学习,就先从最简单的晨会开始,试行简单的方法会不会有奇效,抱着这个想法,奇迹是不会发生的。
很多人不知道的是,许多公司都是从晨会中结束敏捷转型的,虽然开好晨会不简单,而且也有Know-how。
工具和管理方法实现价值最大化
大家会有一个问题:老布,既然只做晨会不行,那做敏捷有没有其他衡量指标呢?
我可以很肯定的回答你:有,如果有且只有一个的话,衡量团队的敏捷指标就是一个月内该团队写给自己团队的代码占总代码中的百分比。
为了解决团队目前工作质量或工作效率的问题而开发的一些工具的代码,占据所有代码的百分比,就是团队的敏捷指标。敏捷的本质是寻找价值,妨碍团队高效寻找价值的障碍都是“问题”,所以需要利用管理方法和工具来解决问题。通过不断发现团队的短板,用管理方法调整或者编写工具来解决短板,从而释放团队每个成员空间,实现个人价值最大化。
假设人工发布的时间需要2个小时,每四次发布有1次要回滚,每周发布一次,请问团队中谁愿意反复做这件事?再假设发布从每周改为每周两次呢?你会发现,这样的团队成员压力都很大,容易犯错,这里就是一个短板。所以团队很有必要花费两周的时间开发一个自动发布的系统,将以往每次发布两小时改为成两分钟而且支持回滚。
这部分的代码就是团队写给团队自己的代码,我们希望持续通过编写代码来改进团队短板。
(图一:腾讯敏捷工具模块)
如图一,为了发展敏捷研发,经过多年的建设,终于构建这么多工具来支撑敏捷实践。包括CE(Customer Engagement)、需求管理、代码管理、测试过程管理、发布管理、缺陷跟踪管理、持续集成管理、项目过程管理、任务管理等。
很多人会有误解,认为鹅厂规模这么大,人数这么多,随便挤出一些人都可以完善这些工具。其实这些工具的早期版本都不是专门团队来完成的,而是业务团队根据自己的需要逐步开发完善的。
例如,自动发布模块,就是网站业务团队最先做的,因为相比较公司内其他业务,网站业务的自动发布比较容易实现,按照版本发布到Server上,就可以对外提供服务了。在当时,绝大多数的客户端业务的自动发布就没有那么容易实现了,但是当网站业务团队的自动发布实践取得效果后,有了标杆,其它业务团队都敢于尝试了。
很快有团队将自动发布进化为灰度发布工具,自从有了灰度发布工具,很多团队就发现巨大的好处。在没有使用灰度发布工具前,当时的业务经常需要切换上线,为了不影响客户,都需要在凌晨四点左右完成切换。那时候,我还特意买了一个睡袋,在切换上线的时候,前一天晚上10点睡觉,凌晨3点起来操作脚本停掉旧版,然后编译,启动新版。观察一个小时的日志,看看业务是否正常运作。如果不正常就赶紧干掉新版,回复旧版,等第二天白天修改问题之后,晚上再次切换上线。
自从有了灰度发布后,可以在白天黑夜随时发布上线,逐步切换一小部分用户使用新版本,如果有任何问题,就可以立即切换所有用户用回旧版。同时开始查找问题,等修改调整好了以后,再次切换一小部分用户试用,然后持续观察用户的表现和反馈,直至成功所有用户成功切换使用新版本。
每个业务都会挑选合适自己的重要工具进行开发,取得一定成效后,公司就鼓励大家互相分享工具,经过三年时间“发酵”,这些工具已经逐步完备,最终腾讯公司敏捷实践的效率在这些工具的支撑下越来越高。
很多学员会问我,老布你有没有好的工具直接推荐给我们用啊?我认为,因为每个团队的性质不一样,用的工具和脚上穿的鞋子一样,别人穿着很舒服,但是不一定适合你,只有合适才是最好的。
所以我始终建议团队根据自己切身情况开发的工具是最好的,但是现在大家比十年前的我们幸福多了,现在Github上有很多Open Source工程,都是用来加强敏捷实践的工具(如图二)。
(图二:开源敏捷实践工具)
所以现在大家只需要找到一个合适的好工具,觉得适合自己团队就持续使用,发现问题就自己动手修改,这样的工具才是最适合团队所在的行业、业务和团队特点的,效率才是最高的。
【案例】CPD检查你的代码
十年前,我和我的团队想做静态代码扫描的时候,当时只能使用价格昂贵的Pclint工具,非常郁闷的是它只能扫描C语言的代码,C++代码暂时还不支持。当时我们通过缺陷审计,发现一个现象——很多程序员每日提交到SVN的代码占比相当高,都是从其他代码里Copy-paste过来的,根本没有修改,直接编译运行了。只要功能正常,就提交。在面向对象语言的时候,Code高度抽象,就算只有5行代码都可能新建了某个对象然后这个对象初始化的代码里还启动一个线程池,被Copy的代码在某个地方关闭了线程池。他们在抄代码的时候根本没有分析清楚,所以这样的代码隐患非常大。
于是我的团队使用静态扫描功能就最先开发了一个“CPD”功能(Copy-Paste·Detector)。每天晚上把当天提交的代码以人为单位进行分析,第二天早上8点前会有一封邮件发送给所有人,邮件标题为《TOP10·CPD·Programmer》,邮件的内容是人名、CPD率、上榜时长。把昨天的代码里Copy-Paste后并不修改源代码,CPD率Top10的人列出来,提醒他们当天必须把代码逐行检查调整后再提交。如果有人连续两天上榜,就会额外有一份邮件发送给那个人的直属Leader,请他帮助解决这个entity,通过这个简单的方式,团队千行Bug率大大下降。CPD工具的原理说出来简单得不能再简单,但是效果非常好,所以建议敏捷工具根据需要自己开发,这样才是称手的敏捷工具。
系列文章#
第一辑:我亲历的鹅厂敏捷转型
NO.6 如何打造称手的武器
NO.7 QQ邮箱怎么成为行业第一的
NO.8 你爱上手机QQ么
NO.9 天天系列天天见哟
文章来源:微信公众号“老布谈敏捷”(ID:bootagile)
作者:薛军/Boots,现任:深圳市一起六企业管理有限公司创始人,腾讯大学外聘高级讲师,业问特聘腾讯之道讲师。曾任腾讯项目管理通道委员会会长,腾讯项目管理P4专家,敏捷教练,腾讯LBS总监
本文由@薛军 原创发布于博客园,未经许可禁止转载。
【腾讯敏捷转型No.6】如何打造称手的敏捷工具的更多相关文章
- 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
摘要:数字化转型是一号位工程,数字化的工具本身就是企业的核心竞争力. 本文分享自华为云社区<华为云Stack首席架构师:打造"称手"的数字化工具,答好政企IT数字化转型这道必 ...
- 【腾讯敏捷转型No.7】QQ邮箱如何通过敏捷成为行业第一
前几篇文章讲到2006年的腾讯是如何开始敏捷转型的,接下来这篇文章,我将向大家讲述,腾讯开始敏捷转型之后,QQ邮箱是如何通过敏捷成为行业第一. 众所周知,张小龙是“微信之父”,对他熟悉的人,应该也知道 ...
- 【 腾讯敏捷转型No.4 】为什么敏捷团队不要超过15人
早期,腾讯公司的架构是比较简单的.从上至下分别是:公司——商业单元(BU)——部门——组——员工,每个部门基本上就是负责一个大的产品,每个组都是按照专业进行分工和管理,例如:产品组.终端组.后台组.设 ...
- 【腾讯敏捷转型NO.1】敏捷是什么鬼?
“敏捷是什么鬼” 最近对外进行<腾讯产品敏捷研发体系>授课的时候,我经常可以从参课学员的眼睛里找到这句话. 通常我会鼓励大家,说:“告诉大家一个好消息,你们今天所有的疑问都是有答案的,唯一 ...
- 【腾讯敏捷转型No.2】帅哥,来多少敏捷?
上回腾讯敏捷转型系列第一篇文章<敏捷到底是什么鬼?>讲到公司铁了心要推进敏捷,这是战略层面的决定,为什么呢? 当时的我们并不知道公司为什么一定要推行敏捷的新概念,但是后来公司的变化帮助我们 ...
- 【腾讯敏捷转型No.3】Scrum有什么好?
在敏捷转型的过程中,除了敏捷宣言中的四个价值观和十二条原则以外,并没有太多比较权威的理论实践. 如图一,敏捷宣言中的四个价值观: (图一) 四条敏捷核心价值观指出了敏捷的核心思想,但是并没有仔细说明具 ...
- 【腾讯敏捷转型No.8】你爱上手机QQ了么?
上一篇文章<QQ邮箱如何利用敏捷做到中国第一>,“QQ邮箱之母”马化腾带领QQ邮箱团队,从流量思维向产品思维转变,“QQ邮箱之父”张小龙也是在这个敏捷转型过程中,剔除固有的成见,激发对优秀 ...
- 【腾讯敏捷转型No.5】需求没做完可以发布嘛
很多人对于敏捷的第一直觉就是“快”,开发快,测试快,发布快,并不知道如何把这个“快”应用到敏捷实践中,下面我们来分析一下导致工作效率低的核心原因.没有使用敏捷之前,在大多数情况下,项目管理都需要开各种 ...
- 敏捷转型谁先动:老总,项目经理or团队
摘要: 敏捷转型成功的企业究竟是从老总开始?还是从项目经理开始?还是团队本身具有这种意识?相信还有很多想要转型敏捷的公司都存在这样的疑问. 从06年首届敏捷中国开发者大会召开到现在,敏捷方法在国内的应 ...
随机推荐
- [JSOI2008]最大数 线段树解法
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- js原生日历
突然发现日期对象可以进行 加减 , 利用这个特性写了一个可以说是对只要会JavaScript 的就可以写的日历:没有各种算法,只有一些逻辑相信只要懂javascript就差不多看俩眼就会的日历. & ...
- 【es6】Generator 函数
1. 基本概念 状态机,封装了多个内部状态 2. 应用 返回一个遍历器对象. 3. 代码形式 function* helloWorldGenertor() { yield 'hello'; yield ...
- MapReduce两种执行环境介绍:本地测试环境,服务器环境
本地测试环境(windows):1.在windows下配置hadoop的环境变量2.拷贝debug工具(winutils.exe)到hadoop目录中的bin目录,注意winutils.exe的版本要 ...
- android 原生 MediaPlayer 和 MediaCodec 的区别和联系(三)
目录: (4)Android 官方网站 对 MediaCodec的介绍 注:编解码器特定数据(Code-specific Data,简写为csd) 部分结合网上资料加入了补充和个人理解.请悉知 ...
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.gaiay.business.helper.dao.LiveRegenrationRecordMapper.insert
原因分析: 字段名称.报名.类名 对应不上 ,比如colomn和property属性 反了.. 按以下步骤一一执行: 1:检查xml文件所在的package名称是否和interface对应的packa ...
- Lua 5.3 参考手册
转自:http://www.runoob.com/manual/lua53doc/manual.html 1 – 简介 Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设 ...
- 模型层(template)
错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...
- [翻译] VBPieChart
VBPieChart https://github.com/sakrist/VBPieChart Pie Chart iOS control with different animations to ...
- Python初学者第二十一天 函数(4)-内置函数
21day 内置函数: 1.abs()绝对值函数 2.dict()创建一个字典 3.help()获取帮助信息 4.min()从一个列表中取出最小的数 5.max()从一个列表中取出最大值 6.bool ...