进入汽车时代,拥堵成为日常生活的一部分,上图中拥堵的过桥场景,相信每个人都经历过,各个方向的来车拥塞在狭窄的大桥上,彼此争夺,互不相让,结果是大家都寸步难行,那么,生活中我们的交警蜀黍怎么解决这个问题?
1.识别堵塞点,及时疏通,比如有两个车发生擦挂了,堵在桥上吵架,警察蜀黍第一件事情肯定是要求事故车辆快速撤离现场,让车流正常走起来;
2.限制车的总流量,尾号限行,单双号限行,外地车牌限行,交通高峰期限行,某些特殊路段限行,总之一句话,限制道路承载的车流总量,让在路上的车能走好,避免大家都上路,但是都堵着的情况;
3.分类管理,价值优先,公交专用道就是一个典型的例子,公交车的价值最大,给予专用的快速通道,保证高价值的工作能优先完成。
万物相通,类比软件项目,其实存在着相当多类似的问题
1.需求过载,感觉永远做不完,苦逼的码农们过着朝九晚九每周六天的生活,加班到深夜两三点也不是什么稀罕事,即使如此,软件项目延期也是非常普通的事情,不延期的项目能有几个?
2.工作过程中,经常存在彼此等待的问题,比如搭建一个测试环境要好多天,所有团队都在等待,某个组件的代码已经写完了,但你依赖的某个组件还没出来,只有等待,有多少时间我们浪费在等待当中?
3.高价值的需求和低价值需求搅合在一起,一方面码农们辛辛苦苦堆出来的功能上线后无人问津,另一方面用户们急需的特性迟迟不能实现,客户心里骂工程师都是傻缺,工程师们欲哭无泪啊!
精益看板就是帮助我们解决这些问题的,其实原理和交警蜀黍解决交通问题并无不同,让我们来看几个关键点:
1.价值流识别和可视化,其作用就是识别堵塞点:
软件开发可以大概分为,需求分析、设计、编码、Review、构建、集成验证、系统验证、部署、上线发布等多个阶段,每个公司流程都有差别,但目的都是向用户交付一个有价值的应用,把整个交付流程梳理出来,并进行可视化,看板(Kanban)一词来自日文,本义就是可视化卡片。把当前进行的工作通过卡片进行表示,作用很快就会出来,哪个环节耗时最多?哪个环节堆积的工作对多,造成合作的伙伴都在等待?通过看板可视化可以很快的呈现出来,笔者以前带的一个项目,编译出包及其复杂,每次修改后都要耗时2-3个小时才能把包出出来,如果出点问题,一两天就过去了,所有相关的人都在等待,以前大家习以为常,觉得系统复杂,网状依赖关系等,不断地暗示自己这是合理的、正常的。通过看板呈现后,意识到这是典型一个堵塞点,下决心解决,投入精兵后,通过依赖解耦、并行编译等综合手段解决,后来每次出包都在十分钟左右,效率大幅提升。
2.限制WIP数量,其作用相当于限行
限制在制品数量,也是一个精益看板的核心实践,道理和交警通过各种限行的手段保证上路的车能正常行驶是一样的,如果软件开发过程中需求过载的情况严重,其结果是所有的需求都做不好,交不出,实验表明,人能同时关注的事情不超过七件,买房、买车、夫妻吵架等生活内容就已经占了一大半了,你如果同时交好几项工作给一个工程师,结果是一项都做不好,或者是几项工作都很慢,这个就是限制WIP的道理,和敏捷开发的思想也相通,绝不过载,但承诺的需求保证按时交付,通过快速迭代提升整体效率。
3.价值优先,消除浪费,类比公交优先道
精益看板的另外一个核心思想就是消除浪费,聚焦于高价值的工作,软件开发最大的浪费就是做了很多没有用的功能,统计数据表明,百分之五十以上的需求都是伪需求,开发出来根本没有用,回到生活中,每个人的手机上都装了好几十个APP,但有多少是我们装了就从来没打开过的?因此一定要体现价值优先的理念,设立软件开发的公交专用道,首先是正确的评估需求,避免技术优先的思维,觉得这个技术很牛叉就一定要做,首先想想有没有用户价值,正确的识别需求价值后,高价值的需求享受专用道,优先交付,快速满足客户,这样才有能让码农们也享受下朝九晚五,周末还有时间撩撩妹的生活。