我心中的敏捷(6)----SCRUM之如何规划每一天

发布时间:2014-10-25 2:24:01
来源:分享查询网

引言:上一篇文章中,我谈到了SCRUM方式下对项目的逐层分解概念,而其实,我们的目的并不在于分解本身,我们的目的是在于加强对项目的控制力度,是想让一个比较大的项目,能按一个比较可控的进度进行研发。逐层分解后,落实在实实在在的研发中时,那就要看具体到每一天的工作来如何安排了。其实,有很多其它的开发方式有比SCRUM更好的项目分解方法,但为什么那些方式都很容易陷入进度不可控的泥潭呢?我想,其中一个很重要的原因就是,每一天的具体控制没有作好。OK,那就让我们一起来看看如何在SCRUM的开发方式下,作好每一天的工作。正文:从上一篇文章中,我们可以看到,SCRUM把一个完整的项目研发逐层分解成每2~3个月、每2周,乃至细到每一天的控制粒度,而在每一天的开发实践中,又会具体到今天准备要完成什么内容。所以,问题的最终,都归结于:每一个团队成员,如何合理规划自己每一天的工作,如何高效率的完成每一天的工作,如何在每一天的工作中都获得成长和进步,从而每一天都能获得成就感、推动产品前进?作规划,我们每个人可能每天都在作,但其实,对于很多人来说,“合理、准确的规划”本身,就不是一件轻松的事:无论我们计划的多周全,总会有各种各样意外事件出现,从而影响我们原本的计划,无法在预定的时间内完成。所以,从某种意义上可以这样说:不存在绝对准确的规划控制,我们只能从各自的实践出发,预估到尽可能多的意外情况,提前预留出时间作好处理意外的准备,把在意外事件上消耗的时间尽可能控制在一个可控的范围内。总结下来,对于程序员而言,我们日常所面临的工作,大致可以分为:自己单独完成的工作,以及与别人协同的工作。而具体到每一个人每一天的工作内容上,我的大致体验是,可以按这样的顺序来提高我们处理事情、以及有效控制事情执行的能力:从简单到复杂,从单线到多线,从个体到群体,从眼前到长远。把事情按轻重缓急列出三个优先级:紧急、重要、一般,然后按优先级处理这些事情。限于每个人的技术水平,每个开发者在成长过程中,对自己所面临的开发任务,都必然要经历从生疏到熟练的过程,在技术上,也必然都要经历从探索到使用既有框架的过程。对于一个新手,刚刚开始在一个新领域的开发过程时,总会在这个新领域里遇到新的问题,有经验的人,会从自己的经验库里找到针对于新问题的类似求解方案,而没有经验的人,只能从头开始逐渐积累自己的经验,这是个人成长所必须经历的一个自然而然的过程。我们需要作的是,要积极思考、积极实践,如何更快速的去让新人获得这种经验,同时,尽可能减少新人由于缺乏经验而给项目本身带来的损失。再回到新人的每日规划本身,最主要面临的困难可能是,由于个人经验不足无法预估出自己作某功能开发所需要的具体时间。这同样不是一件可以轻易解决的事,我的建议是:在决定今天准备完成的内容之前,先尽可能细致的分析这个功能本身所涉及到的数据结构、流程、接口,甚至相关的资源,比如美术资源,策划文档的配置资源等。有了对于此功能相关内容的完整分析,再来初步评估每一方面的大致耗时,可控点和不可控点。刚开始作时,可能你的时间预估非常不准确,但是没关系,只要你坚持这样细致分析的作法,随着个人经验的不断积累,你对时间的预估就会越来越准确,你对一件事情的分析和执行也会越来越到位。对于有条件的团队,如果能有老同事在这个阶段辅导、帮助一下新人,协助他们确定每日的工作目标是再好不过的了,当然,这个 “老同事”的角色不见得非要是团队中的一员,在人手紧张的情况下,项目经理或者其他技术较为深厚、对项目了解深入的同事也可以协助新人来完成这件事,不论是谁来充当这个角色,其目的都是如何更好的帮助新人确定好他今天要作的事。大体上说,规划自己每天工作内容的方法,也仍然是:细致分析、逐层分解。但是,为了保证目标的达成,你需要在每日工作目标的设定里,额外考虑有没有哪些不可控点,这些不可控点可能会产生哪些问题,如何消除或者更进一步的确认这些不可控点?有没有什么方法可以把这些不可控点变成可控的?“把事情作出来”,“更好的把事情作出来”,以及“又快又好的把事情作出来”,是作事的三个境界。这是一个永无止境,不断精益求精的过程,只要你坚持关注“如何把事情作好”这一个根本问题,你就会找到各种各样可以把事情作得更好的方法和途径。而,“把每一天的事情都尽可能可控的完成”,是SCRUM开发方式下,提高开发者素质最基本、最有效,同时也是最务实和最根本的要求。当然,这种方式,对于开发者的自律精神要求很高,即使是我们非常专注于“完成”,不同的开发者也会有不同的想法和作法。懒一点或者不负责任一点的开发者,可能即使自己能在每一天作得更多一点,也会有意的把目标订得少一点,以达到每日都能完成的状态。我想说,出现这种情况,都是正常的,但无论开发者如何“偷懒”,不耽误单个Sprint(每2周)的开发目标是最低限度,不管你如何平衡自己的开发时间,属于这个Sprint的内容,你都要尽可能按期完成。从另一方面来说,我们应该鼓励、嘉奖那些总是每日完成得更多一点的同事,应该努力在团队中形成你追我赶的气氛,对于超前完成或者超额完成的人,可以给予不同形式的奖励,这个奖励可以是物质上的(奖金),也可以是精神上的(完成状态通报邮件),或者可以是时间上的(提前完成的,剩下的时间可以休息、放假或安排跟项目相关的自己的计划,比如看看书,找找资料,了解一些本行业的最新信息等)。也就是说,从团队成员个人而言,我们可以通过细致分析目标需求,逐层分解自己的工作目标,从而制定出更加符合自己实际情况的开发时间计划。对于团队而言,则可以通过惩戒后进、奖励先进的方式来鞭策大家形成一个你追我赶的研发氛围。从对项目的控制上来说,我个人非常反对那种慵懒的工作作风,作事情不紧不慢,作规划不明不白,整天糊里糊涂混日子。富有激情的开发状态,来源于你给自己设定的开发目标以及为此目标所作的各项努力,在这些努力里,准确规划是第一件需要作的事。作规划,刚开始时,不用把目标设定的太高、太远,要尽可能近、尽可能容易实现,这样,你就会在“不断按期完成开发任务”的成就感里不断追求新的更高的目标。而同时,SCRUM开发方式本身,也给开发者提供了最好的自律手段:晨会。在这个会上,你要当着团队里所有成员的面公开讲出来你昨天具体作了哪些工作,完成了哪些工作,哪些工作没完成。当你未身临其境时,可能还无法体会到这种公开讲演的方式带给讲演者自己的压力:如果你每一天总是都在混日子,其他的团队成员很容易从你所说的内容里看出来你是否真正在用心作事,真正在付出努力。我们说,人要脸树要皮,我相信,尤其对于作技术的人而言,总是有些羞耻之心的,也总是有些自尊的,这样长时间公开袒露自己混日子的状态,总会给他一定的压力,鞭策他用心作事。根据习惯的不同,每个人作规划的方式可能都不一样,我是这样来作的:1.每天下班前,想一想明天准备作哪些事,考虑一下作这件事大致需要的步骤、环节、所涉及的人与资源,理出衔接关系和先后顺序;2.使用google calendar记录下明天准备完成的所有事情;3.第二天来上班时,按google calendar上记录的内容参加晨会以及驱动自己今天的工作。除google calendar外,用于记录每日工作内容的软件,还有一个用得比较多的Rainlendar,它与google calendar相比,优点是可以把今天的工作目标直接显示在桌面上,可以时时看到,缺点是,不象google calendar那样,在任何地点都可以知道哪一天我具体完成了哪些工作,甚至,google calendar可以让你向别人共享你的规划内容并设定访问权限,这一点特别适用于团队开发,很便于团队成员之间互相了解彼此每日的工作内容。大家可以根据自己的喜好来选择一款软件记录自己每天的工作内容,当然,如果你只用纸和笔来记录也可以,但那样你就无法方便的回顾历史,反思教训,总结经验了。下一篇文章,我会继续与大家分享我的敏捷和SCRUM体会,主题将是:SCRUM之信息共享。

返回顶部
查看电脑版