2009年1月7日

从另一个角度看敏捷实践(二)--Retro:忏悔与改进

题外话:我其实想说的是一个被人所忽视的问题。形式有没有价值?我承认,形式化是不好的。但是这个世界有个东西,叫做仪式。
举个例子,在国外,有种组织叫兄弟会,(电影里很常见)他们的有些会设置很多可笑的考察仪式来考察你够不够入会的资格。有些会有危险,有些只是纯粹搞出些恐怖气氛吓你看你会不会被吓退。这种东西有价值吗?心理学告诉我们,设置准入门槛可以提高组织成员的忠诚度。如果你觉得这玩艺太可笑了,给取消掉。你会莫名其妙的发现后来加入的人对组织的认可度忠诚度都不高。这就是仪式的价值。

今天说的是Retro,全名retrospective,中文名“回顾会议”,网上有很多相关文章,就不再这里赘述了。这里提到的Retro是最常见的一种模式,分Well, Less Well, Puzzle三个维度的模式。该模式的Retro的特点是会让我们更多的关注less well,关注我们做的不好的那些。这点有好有坏。本文只揭示它好的一面。做为补充,还有一种海星图的模式,感兴趣的人可以自己查询。

我个人认为retro是敏捷开发中很重要的一道防线。是团队健康度的晴雨表,是沟通的桥梁,是共识建立的契机,是改进的开始。

对于团队本身就存在大量问题,而这些问题可能都在敏捷方法的问题域里时。Retro是一个很好的发力点。他的效果可能没有持续集成那么立竿见影,往往是润物细无声。他可以帮我们把痛点暴露出来,但是不一定是根本问题。就像医生看病也得先问你哪不舒服。而Retro就能帮团队说出来哪不舒服并达成共识。某种意义上讲,它是个报警器。

如果已经采用了大量敏捷实践的团队呢?比如我们团队,在我们团队的开发中,我们一直推进着各种改进,期望让我们的工作更有效率,交付更多价值,同时也让我们的生活更美好一些,这是一件双赢的事情。 可是我们也要看到改进是需要成本的,而且也是有风险的,所以有的时候难以推动。对于客户( 有时是PM等内部角色)来说,他讨厌一切成本和风险,而更感兴趣的是新功能,当碰到短视的负责人,或者交付压力占了上风的时候,难以推动这点感觉尤为明显。不过商业社会里竞争如此激烈,这也无可厚非。虽然我们也知道出来混,欠下的迟早是要还的。

不过这不是我们今天讨论的角度。今天我们站在推动改进的角度来看这个问题,开发时,在开发第一线的我们往往是第一个了发现开发中的问题,然后我们会发现改进最困难的是沟通,明明这是个问题,但是让各方都接受这个问题并改进它需要证据,需要沟通,需要资源,最重要的需要时间。我曾眼睁睁得看着客户只是加几台机器提升持续集成的构建效率这件事竟然推动了近一年才成功,那么在这个问题被发现但不能改进的时间里,团队会怎样呢?首先士气会被打击,接着如果问题长期不能解决并影响了工作效率,一种不愿追求卓越的气氛会渐渐感染团队成员,进而使得大家会在其他实践上表现渐渐变差。( 相对于每个人自己,而不是团队其他成员)改进的意愿也会不同程度的变低。这符合破窗效应

这时候,很容易出现的一个倾向会是干脆我们不要retro了,反正也改进不了,完全是浪费时间。 这就成了自毁长城。不能干因为报警器老响就把报警器拆了的事。出来混欠下的始终要还,学鸵鸟是没用的。当retro不能给我们提供更多实际改进价值的时候,它还能提供最后一个价值:忏悔的仪式。
 
曾经一直不明白西方人为什么定期去教堂忏悔,周周去,周周都有值得忏悔的,甚至犯过的错还有很多类似的。看起来没什么用。但这就像房间,天天打扫天天都有的打扫的,心灵的房间也是一样。一位有信仰的朋友告诉我,定期经常向神忏悔会更愿意改进自己,如果一段时间不去对自己的要求就会放松。人的心理就是这么奇怪。这揭示了一个道理,人是会逐渐放松对自己的要求的,所以需要一种手段让我们保持对自己的高标准。

我个人认为retro就是一个很好的手段。尤其我前面说过了,这里讨论的这种Retro的模式的特点就是让我们更关注于Less Well。定期,经常,回顾,反思。当我们无法变得更好的时候可以帮助我们反观团队自身,不要变得更差。让破窗效应难以发生。

(本来只是想写一个敏捷团队碰到让人沮丧的情况时Retro提供的价值,结果越写越多,有点跑题了⋯⋯)

posted @ 2011-11-13 16:14 咖啡屋的鼠标 阅读(3642) | 评论 (0)编辑 收藏

从另一个角度看敏捷实践(一)--IPM:承诺的仪式

在我们的开发中,有些实践的价值是容易感受到的,比如重构,比如TDD,比如持续集成。
有些实践的价值则不容易感受到,比如Retro(回顾会议),比如IPM(迭代计划会议)。
以IPM为例,在我们的IPM上我们一般会做两件事Kick off cards和Estimation。也就是选择下个迭代要做的卡和评估每张卡的点数。这两件事情似乎第一件事没必要所有人都参与,第二件事感觉一定程度上是瞎蒙,尤其是一群人来蒙,显得尤为的不靠铺。而且似乎我们IPM就是为了选出下个迭代能做完的卡,就是为了知识传递,就是为了给客户可视的数据和计划,让他们心理好过。
假设说我们不必所有人都参与就能保证选出适合下个迭代做的卡,我们通过每日Code Review等实践使得每个人都不会缺少相关卡的知识,而客户也不特别在意我们的进度(或者说我们的进度他们总是满意),是不是我们就不需要IPM了?是不是我们就不需要集体Estimation不需要集体Kick off了?
实际上,我们的项目就符合前面的假设,在项目的最后,我们真的取消了IPM。这时,才感觉出来IPM的价值。
整个团队的效率慢慢开始下降。对于目标的理解开始不一致。虽然团队整体的表现并不差,虽然没有出现任何实质的问题,但容忍度低的人开始不舒服。跟团队自己以前的状态比,确实有点退化的感觉。怎么会这样呢?
每当说到这种状态出现在敏捷团队中的时候,我最常听到就是人的问题,态度问题等等说法。其实我一直觉得,如果追究态度,空谈人的问题有用的话,我朝应该是世界第一而不是那个人人自我的美帝。人一直是有问题的,不然要管理学干什么?敏捷里提倡自组织团队,自我管理。但决不是松散组织,不管理。自组织它也需要组织,自我管理它也是管理。像IPM这样的活动,就是管理的一部分。
IPM上做的两件事,看起来完全不靠铺,实际上却非常有价值。整个IPM活动就是一个承诺的仪式。像古代行军打仗前的誓师大会一样,可以调动起团队在下一个迭代中的士气。通过集体参与评估和制定计划,通过各个角色的共同作用,使得每个人都参与到整个计划制定中来。自然而然的对下一个迭代许下承诺。而承诺一旦许下,就会像一个耳语的恶魔,暗中催促着人们的行为与其保持一致。
生活在我朝的人们,似乎对承诺这个东西的效果是完全不相信的。这也难怪,不过出于众所周知的原因,咱不谈我们为啥不信任承诺。从心理学的角度,承诺是有实际意义的。《影响力》“第三章 承诺和一致”中就讲了这个极为简单却极为有用的心理学原理:人人都有一种言行一致(同时也显得言行一致)的愿望。 其中有很多很有趣的实验,揭示了承诺的力量。 感兴趣的人推荐读一读。里面有个小例子提到,两个星期前一个愿意在自家的草地上插一个小牌子为交通安全做点贡献的小承诺,使得该社区76%的人都在两个星期后接受了在自家草地上插一个挡风景的大牌子的请求。而对照社区只有17%。巨大的反差可以让我们看到承诺的力量。
当然我们对承诺的不信任也是有道理的,当承诺真的难以完成的时候,几乎所有人都会违背承诺。在传统的瀑布式开发过程中,使得计划这种承诺难度大大上升,而可信度也就大大下降。这也是为什么我们需要迭代的原因。

posted @ 2011-09-15 23:25 咖啡屋的鼠标 阅读(2920) | 评论 (2)编辑 收藏

积累

        一个成功的企业需要积累。当你坐在电脑旁,看着一个运行达十年之久的软件的源码时,相信我,你一定会更深刻的感受到积累这个词,确确实实是个中性词。

        软件多种多样的功能支撑着一个企业帝国的运转,它源源不断的在为这个帝国创造着财富,毫无疑问它随着时间积累了很多挣钱的能力。可是如 同历史上其 他的帝国一样,在繁华的背后,很多黑暗的东西同样随着时间积累了下来,临时性的策略被固化在核心流程中,为扩展留下的空白成了每次扩展必须绕行的弯路,精妙的手法随着时间的变迁显得复杂过时,分工协作使得同样事情得处理方式大不相同,预先的设计又使得本不相同的东西硬造成了相同的样子,管理的疏忽使得简单的功能用了复杂的模式实现。

        坐在代码面前,仿佛在读一本被囚禁了灵魂的魔书,你能在注释中读出兴奋与痛苦,你能在代码中看到骄傲与彷徨。每当完成一次重构就像解救了一个被困的灵魂。那代码又仿佛一个人的脸,你可以看到各个技术历史阶段在它脸上留下的岁月痕迹。畅游在代码中,有些时候我们好像穿梭在时光的河流中,你能看到一个愚昧的风格是如何从一个有价值的需求中演变而来。如今再看,仿佛一群羊在不断的跳过一个早已不存在的栅栏一样诡异。而有些时候,我们只能看到一些遗迹,原野中矗立的大石柱根本无法自己告诉我们他们到底是为何矗立在那里的。以及移动他们会不会带来什么灾难。

        能力很强,问题很多。是任何一个已经有历史的公司都会有的。软件不过是公司的一个表现方面。就像一个拥有完整公司基因的细胞。准确的说,任何时候,任何公司都不可能没有问题的。但是何时解决?这个问题就跟什么时候重构一样,答案也是一样,随时。解决问题的时机会影响解决问题的难度。越晚解决,就越难解决。说起来容易,做起来谈何容易。是的,解决问题总是需要鼓励的,但是谈何容易四个字却很容易瓦解我们前进的意志。低下头埋到土里,是可以让一切都清静了。但不管我们做不做,甚至于即便我们在做,问题也永远不会停止它产生并进化的脚步。面对问题,只有应战,没有第二条路可以走。经济危机教会了很多企业只顾赚钱而忽略企业的问题会有什么后果。我相信有很多人会选择遗忘并在遥远的未来继续重犯同样的错误,但是我也相信,也会有很多人会选择记住并把教训提炼成一种知识或制度,让后世人学会警惕。

posted @ 2010-10-17 15:52 咖啡屋的鼠标 阅读(1545) | 评论 (1)编辑 收藏

敏捷将亡

        进来听闻最大的CMM堡垒DNV要搞敏捷。大票的猎头纷纷出动,四处搜罗敏捷咨询师。使敏捷这个本来只有小众在实践的一类开发方法陡然变得要大众化了。本来以为是件好事。却在昨天看到z叔大喊,敏捷要倒。当时只是觉得有点道理。晚些时候却切身体会到了。
        收到某非知名公司举办的scrum培训的邮件。顿时心里一紧。在这个时间,用这个操作手法有点可怕,各培训公司都找到了敏捷里面最好切入的一个点---Scrum。
        Scrum是个筐,什么都能往里装啊。为什么这么说呢,他并不能算是一个完整的开发方法。只是一个框架。不领会敏捷的精神,没有其他具体的开发方法,他只能是一个大面的东西,如果用上这种东西就号称敏捷了。那真是可怕。而且,scrum证书也在这波浪潮中量产。一个人,花几千块钱,上两天的课,拿着一张纸就号称敏捷了。没办法,谁让咱们崇拜证书这种看得见摸得着的东西呢。但这样大量量产出来的敏捷项目经理。一实践肯定不对劲,就会用自己的理解去曲解敏捷。然后大家认为敏捷就是早晨开个会,月末开个会。最后的结果就是你在骂敏捷,我在夸敏捷,可是你嘴里的敏捷和我嘴里的敏捷根本就不是一个东西。
        记得曾经见过一个CMMI的咨询师,张口闭口卡耐基梅隆,一付兄弟当年在英国的时候的样子。生搬硬套的CMMI流程。最后搞的那套流程根本不可操作,大家都为流程凑数据。当下如果大家都从CMMI倒向Scrum,这种人咋生存呢?会挂掉?错,摇身一变,举起敏捷大旗开始摇旗呐喊。没这两下子怎么能在忽悠界纵横这么多年呢。像这样的人都来搞敏捷了。敏捷不臭,那除非老天开眼了。那原来搞敏捷的人呢?本来就是小众,在这大浪里面,估计很快就看不见了。。。。从今开始,我还是少说两句敏捷了。。。

posted @ 2010-06-11 17:44 咖啡屋的鼠标 阅读(2358) | 评论 (10)编辑 收藏

夏天办公室注意防寒

我习惯于在午饭后午睡一下。上班时午睡,只能是趴着睡。最近才注意到,写字楼的空调大多是从上往下吹得,所以这个时候整个后背是暴露给空调的。从中医上讲,背上主要是两条经络。督脉和膀胱经。其中膀胱经主人体一身之阳气。号称人体最大的排毒通道。膀胱经不通的人可能会怕风怕冷,容易得湿疹等病,常年排毒不畅,可能会导致更多疾病。
体的经络不管哪一条,都怕六邪,风湿热火燥寒。对于处处空调的现代人,火燥热远不如风湿寒需要担心。比如像这样天天把后背暴露给空调,而且是在睡觉这种放松状态下。就等于天天让空调的风寒入侵膀胱经。加上很多办公室都有加湿器。那湿也是跑不了。当然,人体自身有防御的能力,肯定不会马上出问题的。但是天天这么搞,难免不出问题。上个礼拜加了几天班觉得左肋靠近腋窝的地方疼。周末好一点了,今天下班前又痛了。引起我一点警惕。所谓猝死,大概就是这么一点点演变来的。干咱们这行撑不死可也别累死。
温热可以驱寒,我想把背紧靠一会靠背取暖。这时发觉我的椅子后背只到肩胛骨中部。好像很多公司的椅子都是这样的,不能很好的护住背部(除了老板椅。老板椅上面似乎还要往前多出一块来,连后脖颈子都能护住。倒是很养生。)
所以,办公室可以放一件外衣,睡觉的时候披上来防风防寒。另外,可以偶尔的去做一些保健。比如拔罐,刮痧等。基本上背部拔罐就是在疏通膀胱经。背部刮痧也是。不过要注意的是:
        一,拔罐的话,频率不宜过高,拔罐是排毒比较猛的一种方式,体内毒多的时候倒是在排毒,毒少了以后,排的就不只是毒了。有一种说法,拔得太频繁反而会有损阳气。我比较认可这种说法。一个月一次或者隔一个月一次为宜。拔罐后六个小时不能洗澡。
       二,刮痧倒是可以频繁点,但最好找干净的地方或让自己家人做。肉少的地方尽量少刮。最近发现一种叫魔蝎刷的东西,个人感觉比刮痧板好用,可以替代刮痧板刷背。刮痧后半小时不能洗澡。从时间上也能看出哪个比较猛。

最后,多多运动是最好的保健方法。自我锻炼总是要胜过别人伺候。愿程序员们都能度过一个健康的夏天。

     

posted @ 2010-06-08 12:33 咖啡屋的鼠标 阅读(421) | 评论 (1)编辑 收藏

转载一篇文章:没贡献的田鼠

没“贡 献”的田鼠
在田野里,住着三只田鼠。
 秋天到了,三只 田鼠开始准备过冬的东西。
 第一只田鼠每天都到田野上运粮食,准备冬天食用。
第二只田鼠每天都到田野上运野草,准备冬天取 暖。
 而第三只田鼠每天都跑出去游玩,对粮食和野草一点儿也不关心,好像冬天永远也不会到来一样。
前两只田鼠劝它为即将到 来的冬天多准备一些必要的东西,但它只是笑笑,仍然每天都出去游玩,经常玩到天黑才回来。
寒冷的冬天很快到来了,三只田鼠住在洞里,饿了 就吃第一只田鼠运回来的粮食,冷了就用第二只田鼠运回来的野草取暖,而毫无贡献的第三只田鼠自然也得到了前两只田鼠的嘲笑。
然而日子一 天天地过去,每天都无所事事地待在洞里,做着同样的游戏,吃着同样的粮食,三只田鼠渐渐厌烦起来,感觉到了无聊的空虚。
这时,第三只田鼠 开始为前两只田鼠讲故事,讲它在秋天出去游玩的时候见到的许多新鲜有趣的故事,前两只田鼠听得津津有味,生活开始重新变得充实而有意义。
作 为感谢和报答,前两只田鼠经常把自己的粮食和野草挑出一些送给第三只田鼠。
原来,有些贡献并不是从一开始就能看得出来的,然而我们却经常 因为暂时看不到它的“用处”就舍弃了它。

posted @ 2010-06-04 17:32 咖啡屋的鼠标 阅读(330) | 评论 (1)编辑 收藏

我眼中的软件开发

这篇文章是受启发于要求我写一些设计和spec的文档的面试要求。趁这个机会整理整理自己的思路。

什么是软件开发呢,最常见的一种说法是,软件开发是一门艺术。我觉得更现实的讲,软件开发应该是一种生产。跟其他所有的生产一样。要考虑成本和收益。收益这块,跟其他很多外部因素相关,对开发者或者说开发者的管理者来说无法控制,开发者从职业的角度出发更多需要考虑的是成本。这也是我们职业的目标。

软件这种产品的生产,材料本身的损耗也就是电脑,电费,基本属于沉没成本。不会因为咱们任何努力而改变。(也不是完全不能改变,只能是变多。。。。)那么,最大的成本损耗在时间上。一方面,程序员都属于高薪人士(相对,相对)。每一天的损耗都意味着大量的钱打水漂了。另一方面,随着时间的推移,商业价值在降低,风险却在增加。

对软件开发来说,需求实现速度,应该说是很重要的,但是实现速度本身并不是考量的标准单位。作为最大成本考量标准的时间,从对她的消耗来看:除去简单的功能点实现需要,需求的变化浪费的时间则更客观。而无数实例证明,我们在需求分析阶段投入时间诚然可以减少需求的变化,但是并不能达到我们满意的高度,所以对需求变化的反应也是我们的重要标准。

敏捷这个词,我觉得非常好。做为一门方法学,从名字上就说明了软件开发需要关注的两个重要的点:需求实现速度和对于需求的反应速度。当然,说到这里有点虚了。我想,回归到不太实际的本质,能更好的指导我们的实践。Rails框架为什么这么火热,恰恰因为它做到了这两点。我们想想,为什么要设计?我读过让人舒爽的代码,也读过看着让人想吐的代码。抛掉个人的感情因素,这两种代码有什么区别呢?大部分让我想吐的代码里出现的是一些重复的代码,看起来稍有不同,却不肯费点心思除掉这些“坏味道”。重复代码的问题在哪里呢?最大的问题就是随着代码量的增多,工作量的与日剧增。维护量也会增大。而且,复杂度绝对不是O(n)。其实我常常觉得,我们最早学程序的时候要学算法与数据结构。其实这个课程很早就告诉了我们编程最重要的两块:算法,结构。好的设计就是好的结构。可扩展,可维护,最起码,可以分工。

好的设计可以大量的减少代码。减少代码就意味着成本的降低。也就是文初说的,我们职业的目标达到了。但是现实往往不是那么美好,虽然我们有很多OO的设计模式,我们有很多最佳实践。但是在现实中,我们往往需要妥协。一般是三个原因:性能、稳定性、各种接口,在左右着我们。其实,很多时候,这也是最考验一个程序员的功力的地方。如何在这三个沼泽上跳舞,才是软件开发真正可以被称之为艺术的地方。而怎么做,则只能靠一行一行的代码锻炼,一篇一篇文章和文档整理经验,没法一句半句说得清楚的了。

posted @ 2010-04-15 16:38 咖啡屋的鼠标 阅读(2076) | 评论 (3)编辑 收藏

看另一种晨会的杂感

晨会是Scrum里的一个实践。

最近才意识到,这种东西一点都不时髦。很多理发店,饭店,他们早晨都有这个。今天在大鸭梨看到他们的晨会,颇有感觉。看着他们都站在那里,觉得跟站立式晨会差不多。不同的是他们的员工,年龄层比较低,处于还比较毛糙的年龄。也就是说,不仅需要教育怎么做事,还得教他们怎么做人。所以在这个晨会上,经理教育他们说,不要混日子,十年后,你们如果没做出什么来,一生就这么过去了。跟他们说,要当面说坏话,背后说好话。也就是进行人性和行事风格上的教育,也可以说是一种文化上的教育。经理教育完,几个像老员工的来说加单要写名字,不要怕写了名字会怎么着等等。虽然是端茶倒水送饭,但是需要注意的还真是不少。前台,服务员,后厨,这之间也是需要沟通规范,任何一个沟通不符合规范,就会出乱子。

比较起来,敏捷的实践只是要求个人说自己做过什么,要做什么,有什么问题。不过我发觉,有些话,其实是应该在晨会的时候应该强化与灌输,不见得是每天,但是隔三差五的就该讲讲。关于工作态度,配合。这是员工培训的最好时机。在这里用力,虽然不会有奇迹般的效果,但每隔一段时间肯定会有一点切实的进步。企业与企业都是不同的,有自己的氛围,那所谓的文化,就是企业的性格。员工与员工更是不同。但是企业喜欢的员工其实都很相似。不喜欢的员工却各有各的不同。所以企业经常培训员工。但我是不相信给员工搞一两次课可以改变一个人的。有天在快餐店,听到一个老销售教育一个新销售说,鸭子听鹰讲怎么飞。上完课,鹰飞回家了,鸭子还是走回家的。不能飞的鸭子又不缺什么,野鸭就能飞。所以,仅仅几天的员工培训能改变什么呢?不能指望着几天就能给公司制造出好用的员工来。公司对教育的重视不够说小了是不把自己的钱当回事,说大了其实是社会责任的缺失。

你们10年后还一事无成,这是给员工灌输的一种危机意识。要当面说坏话,背后说好话,这是对员工进行人性的教育。这像是领导说的话,有人说,领导两个字是领袖+导师。身为导师不引导人光明磊落,就不能怪人言可畏。有喜欢以流言御人的领导才有大量到处嚼舌头的下属。现代企业不是古代的官僚衙门。该专心搞的是经营而不是政治。

散会后,员工继续去工作了。你说这个晨会有什么作用吗?不知道,就像一颗石头扔进了平静的水里。一阵激荡过后我们什么都看不到了。但是,我想,日积月累,石头扔得多了。在你不注意的时候,水面会悄悄上升的。

posted @ 2010-02-06 14:02 咖啡屋的鼠标 阅读(407) | 评论 (0)编辑 收藏

敏捷还得是人敏捷

敏捷作为方法学,其实还是比较虚的。哪怕是其中比较实的最佳实践,也是非常难以掌握运用的。原因其实很简单。人要想通过敏捷偷懒是绝对不可能的。敏捷的实施,在最初肯定是非常累的。因为改变总是痛苦的。回顾丰田的历史,他们在创造TPS的时候,工人们也是想把大野耐一的那些破烂东西都给砸咯。
不过很多时候,痛苦是幸福的开始。一个人完成很多人合作完成的工作,咋看起来是非常劳累的。但是习惯了,也就那样了。TPS里面基础就是让一个工人具备两项以上的技能。程序员也是一样。不能为自己的懒惰找理由。大家都是人,都想懒,但是今天懒了,总会有一天被逼着勤快。就好像没有时间锻炼,就有时间生病一样。只有每个团队成员都变得敏捷了,敏捷的方法才有意义。


posted @ 2010-02-02 23:59 咖啡屋的鼠标 阅读(315) | 评论 (0)编辑 收藏

时间

时间。。。曾经是我最害怕的东西。。。如今却变成了最喜欢的东西。。。
这个世界纷纷扰扰有那么多的真实与虚假
只有时间能把它们分离开来。
时间,跟所有自然的伟力一样,从来都是缓缓的,慢慢的显示着自己的力量。
人可能等不及看到它的效果,可它却一直履行着自己的职责
一切浮于表面的虚幻,终会在时间的侵蚀下消逝,只留下最真实的东西。

posted @ 2009-01-07 16:24 咖啡屋的鼠标 阅读(292) | 评论 (0)编辑 收藏

<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(15)

随笔分类(52)

随笔档案(76)

文章分类(3)

文章档案(4)

新闻档案(1)

收藏夹

Flex

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜