这些定义大致要求为将瀑布式开发流程转为多阶段小迭代,它本质是在保持时间、质量不变的情况下,通过投入经理人的管理成本降低复杂系统的空转成本,进而提高产能的方法,类似格鲁夫的经理人杠杆率理论。
它的实际运作过程大致如下,以一个月迭代为例
个人对敏捷的定义
结合实际工作经验,本人对敏捷定义如下
The agile methodology is a set of high-frequency policies that gains the certainty with trade-offs.
它最终的作用
个人在真实项目中更喜欢结合使用PERT的编排策略,曾经对关键复杂项目进行了高达半年的规划排期。
即使很多敏捷变革号称成功了,敏捷这种“高频操作”并不能证明其可以提高速度,原因如下
回到管理本身
多阶段小迭代本质上是充分提高Master的管理杠杆,要求ScrumMaster能在有限时间内,对事项的拆解、估算、解释与验收的过程进行高频管理,这种管理模式必然需要精英模式(meritocracy),才能产生高执行力。然而问题是在大厂,这种工作是“杂活”。
如果所有任务能够像燃尽图中那样理想地估算时间准确
带项目超过6个人后,就需要牺牲确定性或质量,来换取杠杆率了
事实上,根据我个人经验,就算H司是海归遍地的员工,能同时达到如下标准已经少之又少
很多工作多年的Leader,带领的项目仍然陷入在债务的泥潭中无法脱身,导致组员提桶跑路。
进度管理中需要工时与节奏来降低不确定性。
敏捷的工时管理本质上就是刻舟求剑的计件制度。
然而很多开发比较抗拒估算时间这个工作 ,认为项目总是领导拍脑袋,反正从来没有算准过,所以估计工时是没用的。这种习得性无助需要纠正,因为估算工时类似于分支预测中的cache,就算估算工时有偏向(命中失败),也会作为缓存为下次估算提供对比借鉴。通过后期改进总结就可以发现与理想估算间的GAP,进而持续改进。
此外,估算时间还可以协助发现任务不明确的问题,如果任务定义比较模糊,缺少验收标准,那么就会导致时间估算更加无从谈起,因此要求估算时间相当于提高了任务细化分解的细节规格。
最后,通过将所有工作进行估算,可以生成依赖有向图,就可以一定程度上解决"不可控"的紧张,也能每天对比计划反省是否达成目标。
我推荐的流程如下
那么如何估算成熟重复任务的时间呢?
我个人一般将具体的Task分解到1~2Day,并遵循SMART原则,避免估算出现较大偏差。比如,任务描述必须写"登录模块的前端菜单录入与对UI界面的实现",并指定某个前端开发人员;而不是"前端登陆模块"这种模糊的不可度量的任务。如果某个人长期都做不好分解,而且培训也没用的话,赶紧换。
至于具体的时间估算,比如静态网页这类指标,可以考虑用过去积累的EMA指标来预测,这可能是后续AI管理工具的热点。
虽然这种搞法本质与工厂中的“规划部”没有太大的区别,即使被复杂系统领域的专家批评,但是本处重点在于控制质量,做出来就行了。
(此章节不属于敏捷的贡献)
我们期望降低系统的方差,提高系统总体的效率,而非单个节点的高效。然而根据投资理论的“高收益、高流动性、低风险”不可能三角,我们不可能同时做到人力投资的最优点,况且找到系统编排的的最优解(排队论)成本非常高。
关于收益的度量标准,一般有如下
三者中最重要的是“总体交付吞吐量”,因为项目的效率提升并不是像机场航班那样的精益调度,而是风险排除。
由于风险永远不会消失,在收益保持不变的情况下,我们只能牺牲流动性去降低风险,其中最常见的近似解就是固化项目节奏,降低人力流动性,让系统步调一致地拉链式前进。
其主要方式为,如同央行调整准备金一样对速度进行间接控制,让供给与需求侧去适应承受。
假如人力出现空转是可接受的
此外,权力与责任是相等的,既然你对进度与质量负责,那么你有权拒绝供给侧的需求插队。
(此章节不属于敏捷的贡献)
How to program if you cannot?
我们以经典的“学游泳”为例,假如现在领导要求你“下周我们要进行游泳比赛,你评估下组员学游泳的时间”,你自己也不会游泳,那么应该如何解决呢?
这时那些画燃尽纸片的敏捷专家就没法教你了,因为他们只会照搬僵化的管理框架。这里本质上是形而上学 + 复杂系统 的问题,你无法精确估算未知内容的时间,但事实上,你拥有的解决方法是可以枚举的
我们要基于上述背景拍脑袋估算时间,拍脑袋也是有管理指标意义的,它可以帮你BinPacking排序时调整人员与任务的Mapping,人毕竟还是畏惧不确定性的。后续无论是否做出来,Burn down也对项目整体进展有决策作用。
至于如何三选一,假如你是为了创业而提高速度,选型上优先找外援,不要陷入到技术细节中,而要重点投入在用户场景的匹配与验收标准,因为业务侧需要反复试错才能找到真正方向。
其实再深入演绎的话,如果想投入更少的时间,做更多的事情,你将会进入“不确定与反脆弱”的领域,比如主动投资领域。
很多需求与方案可能在排期阶段都不清晰,然后拍脑袋估工时,最终产生延期。
当然作为工程商人,我们也可以使用更灵活抽象的“金字塔式承包制度”,但是它需要组员的高度密切配合。这种高杠杆的管理方法也曾经实操过,虽然效率高,但是管理太累。
经过多次失败尝试,我发现了一个二八定律:
读者看到这里可能会问,为啥招聘时不能提高员工的素质?客观大环境如此。针对员工熟练度较弱的情况,此刻就不得不花费你的管理时间了,你需要每天早上开会过进展,做起包工头监工的工作,才能降低风险,等到新的惯性形成后,再降低开会次数。
关于如何开会,我以前已经写过,不要围一圈依次说自己干了啥,而是让你作为主持人去按照KPT原则提问
stand-up meeting是手段,不是目的,ROI后期很低
在敏捷开发中,讲究的是"特种部队”式,“外科手术”式的全能开发团队,然而在现实,很多企业事实上并不重视自己IT团队的开发,比如波音请外包做飞行软件,日本创业/IT请外包做,某五百强请精英OD干实际的活。这类如果要达到“真敏捷”的水平,需要根据员工的“熟练度”进行管理
这样做下来后,软件开发犹如快餐一样,你作为维护需求与实现的桥梁将非常累,可能写代码都没时间了
由于你将自己的工作分给了他人,对方不一定了解你想要什么,这是质量可能就有问题。你的价值是收集与处理信息,要明确度量标准,降低反馈延迟。
总而言之,这些工具可以自动化或者量化项目的进展,但是不能代替核心管理能力与节奏能力。
在大型组织中,敏捷master就是大头兵,带着一群螺丝钉搬砖,坐在办公室,拿着比富士康里工厂领班高的工资,工作难度不一定高。
在创业组织中,敏捷master又啥都干,我认为更加接近经理人的角色
在POC阶段(比如验证项目可行性),由于高不确定性,还没有迭代的概念,因此作用不大。比如我在POC场景下,内部细节是不会采用敏捷工具链的,管理中只记录一个stub作为deadline/demo day,内部细节的整理是耗时的,暂时不会在工时维度上整理。
敏捷只能做确定性强的高周转任务,不确定性的任务需要一个hero来完成
敏捷是一种快餐式的经验框架,经验意味着重复且体力的劳动,它能够帮助team形成惯性。
然而,无论多么强大高效的管理手段,都需要基于本身能力就很强的基础。本文只能帮助存在效率瓶颈的技术团队引入敏捷进行改进,如果项目已经空心化,债务多,一将无能累死三军,那么敏捷也救不了。
总架构师,开发者和Master的边界分别是什么?
敏捷管理如何处理task间的依赖关系?
功能点到底是按照功能拆解、还是按照前后端代码拆解?
Backlog由于人员与需求变动必然会膨胀,最后是否会变成一个垃圾堆?