﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-josson.jin-随笔分类-项目管理</title><link>http://www.blogjava.net/josson/category/41769.html</link><description>天地生人,有一人应有一人之业;人生在世,生一日当尽一日之勤!</description><language>zh-cn</language><lastBuildDate>Tue, 14 Jun 2011 05:38:51 GMT</lastBuildDate><pubDate>Tue, 14 Jun 2011 05:38:51 GMT</pubDate><ttl>60</ttl><item><title>关于互联网产品开发最佳实践探讨</title><link>http://www.blogjava.net/josson/archive/2011/06/13/351998.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Mon, 13 Jun 2011 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2011/06/13/351998.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/351998.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2011/06/13/351998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/351998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/351998.html</trackback:ping><description><![CDATA[<div>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">互联网的产品大都是面向海量用户的服务，且用户分布区域广泛，其教育水平、习惯也大多不同，具有高度不确定性，我们必须非常关注用户的行为和反馈。因而，在互联网产品服务的整个用户研究，需求分析、产品研发及交付服务的过程中，都采用探索式、适应性的研发理念进行产品的研发。通常，会把整个产品研发周期划分为若干个迭代，采用迭代式的演进过程，不断的去交付新的产品特性，并通过观察用户的行为和反馈获取，进而随时调整产品的思路和方向。一切以用户价值为核心是互联网产品最核心的特点，而以价值驱动的敏捷开发方法非常符合这一特点。</span></p><span style="font-size: 9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">一、敏捷项目管理实践</span>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black"><img alt="" src="http://www.blogjava.net/images/blogjava_net/josson/agile.png" width="520" height="280" /><br /></span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">从阿里软件开始，内贸团队就一直在实行着敏捷项目管理实践，</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">通过小步快跑，快速迭代、增量交付用户价值，不断获取用户反馈，持续、快速的调整产品，验证并适合用户价值。正是通过这些实践活动，我们以迭代的、增量的交付用户价值，最大限度的保证产品朝着符合用户实际需求方向发展。目前，在内贸团队应用较成熟的敏捷实践活动有：</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">1)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">、迭代计划(Sprint Planning Meeting)</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">2)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">、每日晨会(Daily Scrum Meeting) &amp; 任务墙(Task Wall)</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">3)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">、功能预演(Spring Review)</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">4)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">、项目总结(Retrospect Meeting)</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">5)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">、结对编程(Pair Programming)</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">6)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">、其他技术实践活动等</span></p>  <p style="text-align:left" align="left">&nbsp;<span style="font-size: 9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">二、敏捷团队</span></p>  <p style="text-align:left" align="left"><span style="font-size: 9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">１)、自组织文化</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">如google、facebook等互联网企业，他们很少甚至没有特定的项目流程，通常怎么敏捷怎么做，具有浓厚的工程师驱动文化。我们则有较完整的开发流程指导和规范我们的项目研发工作，相比而言，丧失了一些灵活性和积极性，不利于我们工程师自我管理、自我驱动意识的培养。臃肿、缺乏灵活性的流程同互联网产品快速更新、快速发展是不相适应的，同时也弱化我们的责任心意识。除了遵守详尽的流程，我们是否可以换个角度、换种方法，提倡和营造一种自我管理、自我驱动的开发文化，省却一些并不能给我们带来帮助却影响效率的流程呢？</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black">敏捷团队的自组织特性弱化了团队技术领导这个角色，强调自我管理和自我驱动。</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">虽然这对工程师的素质要求更高，相对技术能力更难提高。但是，团队导向很重要，我们努力营造这样的氛围，从小团队做起，逐渐锻炼和培养自组织团队。相信在这样的开发氛围下，会让我们做的更高效、更敏捷，可以走的更稳、更远。</span></p>  <p style="text-align:left" align="left"><span style="font-size: 9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">２）、追求一体化</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">一体化团队作为敏捷开发方法中最具精益思想基因的实践，是指每个项目团队包括分析，开发，测试等角色，使团队满足一个需求从设计，开发到测试各个阶段顺利完成，达到符合质量标准并满足需求的软件。这种以项目/产品为单位的虚拟团队，坐在一起，全身心的为共同的目标而努力，可以更好的凝聚项目组中的各种角色，消除部门墙。&nbsp;</span></p>  <p style="text-align:left" align="left">&nbsp;<span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">3</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">）、追求全功能</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">这里所指的全功能是希望项目团队能打破工程师角色之间的边界，如研发、测试和前端工程师的界线，消除开发、测试流程中一些潜在浪费，提高效率。在项目团队内部通过角色互换，不限角色的结对工作，加强不同角色，不同模块间的知识传递，打破技术壁垒，帮助员工从不同视角理解项目，锻炼技能，进而增加团队均衡生产的能力。</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">为什么要提倡打破边界？项目整体效率依赖于项目过程中各环节的工作效率，而整体效率的优化往往依赖于均衡生产(精益思想的按需生产)，即消除生产的波峰(过度生产)和波谷(生产不足)，只有局部效率的增加无法直接转换为整体效率的增加(就象桶能装多少水，决定于最短的那块板)。整体效率的优化要求IT团队消除技能壁垒，培养多面手，根据计划的的变动，弹性地调整任务，达到各角色和流程之间的平衡。</span></p>    <p style="text-align:left" align="left"><span style="font-size: 9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">三、质量保证</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">我们追求开发效率，同时也注重项目质量。如何去保证质量？就象美国的一位教授爱德化.戴明（W.Edwards Deming）所说：&#8220;我们应该停止依靠大量检验来保证质量，而是要改进工艺流程，从一开始就生产出优质的产品&#8221;。我们要在整个开发过程中多个环节去保证质量。同时，质量保证是整个团队的责任，就如同前面所说的追求全功能团队，打破边界。</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">至于在哪些环节采用哪些实践，我们先做个分类，按是否能被系统用户感知将质量问题区分内部质量和外部质量。外部质量指能直接被系统用户感知，如运行缓慢，不可操作或是操作复杂就属于外部质量低劣。而不能直接为系统用户所直接感知的要素，对产品键壮性、可维护性有深远影响的问题就属于外部质量，如系统设计的一致性、代码可读性、逻辑完整性等。内部质量对用户的影响比较间接，但比外部质量意义更深远。一般来说，系统内部质量优秀，外部质量仍有可能很差。而内部质量差的系统，外部质量肯定也不怎么样。</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">1</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">）、外部质量保证</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">在外部质量保证上，大部分会在开发后期介入，可以通过性能测试、自动化测试及工程师的功能测试来保证，通过这些实践活动发现并保证例如运行缓慢、不可操作等质量问题不会存在。针对交互特别复杂的web应用，可以更多的考虑采用webui自动化测试工具，如selenium、pwaitr(b2b)、automan(淘宝)等，可以很好的完成那些简单、重复的TC用例，可以大大提高测试效率，解决测试工程师的资源瓶颈。</span></p>  <p style="text-align:left" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">2)</span><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">、内部质量保证</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">相对于外部质量，内部质量问题影响更为深远，在开发开始阶段就应该去保证。如通过单元测试、静态代码扫描(PMD\findbugs)、持续集成、重构、结对编程、code review等多种实践活动来保证项目代码的健康。</span></p>  <p style="text-align:left;text-indent:18.0pt" align="left"><span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">除了一些实践活动去检查代码质量外，更为重要的是研发工程师对内部质量的重视，如果工程师没有形成良好的质量意识，很可能这些实践也只是停留于形式，并不能带来较好的结果。如我们在开发过程中的编码规范、单元测试的质量及覆盖率，code review的及时性及问题是否持续跟进等等。此外，有选择的采用结对编程实践，有助于质量的提高。</span></p>      <span style="font-size:9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:black;">本文以敏捷、精益（消除浪费、按需生产）思想的角度</span><span style="font-size: 9.0pt;font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;">试图<span style="color:black">去探讨一种适合互联网公司的产品开发体系，上述概要的介绍了项目管理、团队、质量方面的一些敏捷实践活动，主要涉及了我们对敏捷方面的经验分享或者是些正在研究探讨的课题。</span>文中涉及的实践活动，后续我将逐一展开详细介绍，帮助大家更好的理解和认识。希望本文的分享能成为一个引子，引起大家对敏捷开发的思考和讨论，或者更好的了解敏捷和精益思想。 </span></div><img src ="http://www.blogjava.net/josson/aggbug/351998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2011-06-13 15:53 <a href="http://www.blogjava.net/josson/archive/2011/06/13/351998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈项目管理中质量及效率</title><link>http://www.blogjava.net/josson/archive/2011/05/20/350701.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 20 May 2011 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2011/05/20/350701.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/350701.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2011/05/20/350701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/350701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/350701.html</trackback:ping><description><![CDATA[<div>  <p style="margin-left: 18pt; text-indent: -18pt;"><span style="font-family: &quot;微软雅黑&quot;,&quot;sans-serif&quot;; color: #1f497d;">以下为本人在公司内部关于项目质量和工作效率邮件回复的一此意见和想法。<br /></span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">1、 </span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">谈流程</span></p>  <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">不可否认流程的重要性，但<strong>我们需要根据具合格情况分析，不断的梳理和优化我们的流程，让流程更好的指导我们工作，而不是束缚。</strong>目前，我们的流程慢慢多了起来，感觉不如以前敏捷了。经过rpm改造后，无论在测试环节还是发布阶段，较之前失去了很大的灵活性。测试阶段，开发bugfix后想在测试环境验证，每次必须重走aone的流程及打包布署，相比之前的build效率真的差了好多。当然，也许是我们项目组对这个流程熟练度、方法还不够，很多环节有待改进。</span></p>  <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">发布阶段，目前统一由SCM来发布，必然会导致开发对线上环境及发流程更加陌生，同我们提倡的打破边界，敏捷响应有些相背。再者，SCM资源有限的原因，要支持ITU众多产品线，能否应付的过来，始终是个问题。发布统一管理有好处，同样也带来了弊端，ITU不同于网站，大多数的技术团队共同在维护在几个应用，而itu的应用多、规模相对小、环境各异，这样的产品线采用统一管理性价比不高。<strong>希望相应的owner，能不定期的搜集各产品线的意见和反馈，不断的优化，让我们的流程更合理。</strong></span></p>    <p style="margin-left:18.0pt;text-indent:-18.0pt;"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">2、 </span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">谈自测</span></p>  <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">我们团队一直在强调自测意识，也在这方面不断的总结和改进。我觉的要提高自测，<strong>首先应让每位开发同学形成较好的自测意识</strong>，而不是自上而下的命令式管理，只有自己有这方面的意，才会去思考、去想办法，去实践。<strong>再者，需要PM或技术经理去思考，目前阶段实行自测会有什么困难</strong>，如没有系统的自测方法、时间不充足（需要熟悉下阶段的UC、下迭代的设计、单元测试补写等），找到这些困难或问题，就容易对症下药了。<strong>最后，不断总结和积累自测方式，优化项目流程。</strong>自测不是一种形式，而要追求效果，开发自测同样需要计划和方法，所以我们需要向QA同学请教，总结过去 bug常犯的错误，整理自己的check项。相信通过这样的一些自测方法，能真正提高我们的项目质量，打破同QA的界线，我们的开发、测试资源比例可以得到更大的优化，将以前开发阶段紧，测试阶段松的状况加以改善，使整个项目过程中的紧张度趋于平缓。</span></p>    <p style="margin-left:18.0pt;text-indent:-18.0pt;"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">3、 </span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">谈故障分</span></p>  <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">&#8220;尽量不要让故障分成为大家包袱，可以考虑被实施产品对事故级和A类才对个人计故障分，B和C类故障分记在主管头上！&#8221;，个人也比较支持骆驼的观点。目前大家对线上故障都小心翼翼，大家对质量的意识很高，这当然是好事，但同时带来的影响是效率低了。我的观点是，作为增值服务的互联网产品，我们更需要快速迭代增量提供用户价值，尽快获取用户反馈并改善产品，产品推出的迟早，不仅影响获得回报的时间，还影响到获得价值的多少，错过了一个时间窗口，产品可能就不再有任何价值。所以，<strong>我们需要找到一个平衡量点，可接受的质量状况达到最大的效率。</strong></span></p>  <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">从客户第一角度谈质量，某些时候，客户可以接受服务偶而不可用重启下，却不能接受产品没价值、交互性太差，操作太复杂。所以，对于客户来说什么对他们更重要，就需要我们每个人去分析和评估。所以，我们一味只注重质量，而忽略客户真实需求，那就太悲哀。<strong>我的观点是，case by case，带着这样的观点去思考和解决问题。</strong></span></p>    <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;; color:#1F497D">4</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">、谈敏捷项目团队</span></p>  <p><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;;color:#1F497D">从打破边界，我想到了一体化的敏捷项目管理团队，<strong>一个目标一致、自我管理的团队，应该具备良好的目标意识和执行力，不仅能管好自己的一亩三分地，同时也能站在项目、团队的角度看待问题。</strong>PD出现了问题，开发积极去弥补；开发出现了问题，QA积极去弥补，项目团队的目标非常一致。每位项目组成员一定要把好每一关，万不可把问题向下抛，因为还有开发或QA会把关，所以差不多就行了，这样往往就是灾难的开始。</span></p>  </div><img src ="http://www.blogjava.net/josson/aggbug/350701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2011-05-20 16:39 <a href="http://www.blogjava.net/josson/archive/2011/05/20/350701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈敏捷开发之稳定迭代周期的重要性</title><link>http://www.blogjava.net/josson/archive/2011/01/31/341341.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Mon, 31 Jan 2011 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2011/01/31/341341.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/341341.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2011/01/31/341341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/341341.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/341341.html</trackback:ping><description><![CDATA[<span style="font-family: 微软雅黑;"><strong>1、什么是iteration和release？<br />
</strong>iteration和release是两个不同的概念，但在敏捷实践活动中，我们往往认识的比较模糊，一个Iteration就是一次release，其实不然。那么，具体有什么区别和联系呢？<br />
<strong>Iteration（迭代）</strong>：在固定的周期内，经过需求分析、设计、实现、测试等活动，完成计划的的业务需求，迭代结束提供一个可工作的产品。计划的业务需求，可能是一个完整的User Story，也可能是一个Story中的若干task。<br />
<strong>Release(发布)</strong>：经过一个或若干个iteration后，完成计划中的所有User Story，经过测试后才release，最终真正交付给客户使用。<br />
在我们的实践活动中，一个User Story所需的工作量超过我们的有效资源，无法安排在一个iteration内。我们就会想当然的会去延长迭代周期，增加有效资源以适应所需工作量。殊不知，这更象是形式上的迭代开发，无异于瀑布式项目开发过程。<br />
<br />
<strong>2、建立固定的迭代周期，保持稳定的开发节奏</strong><br />
Scurm方法也非常强调稳定的迭代节奏，一个稳定的迭代节奏就如同项目的的心跳。Simon Baker描述说："就像心脏有规律地跳动来保持身体运行，固定的迭代长度提供了一个恒量，有助于建立开发和交付的节奏。根据我的经验，节奏是帮助取得不变的步幅的重要因素"（2004）。对于敏捷开发的团队而言，稳定的迭代节奏可以让产品保持更稳定的交付。<br />
<br />
<strong>3、如何保持稳定的开发节奏？</strong><br />
当一个迭代期内可提供的有效资源无法实现一个User Story时，我们如何按排呢？ 在 <a href="../archive/2011/01/13/342927.html">谈迭代周期控制的困惑</a> 中已谈到，这里不在细述。<br />
<br />
<strong>4、如何选择适合自己团队的迭代周期？</strong><br />
一般需要考虑以下因素：<br />
1）、整个项目周期长度（完成计划的商业需求所需时间）<br />
较短的迭代周期将会有以下一些好处：更频繁的向客户展示/交付可用的软件；更频繁的度量开发进度；更频繁的取得反馈并改进；一般大的项目最好有多次(3次或以上)获取反馈、修正的机会，根据项目周期调整迭代周期长度。<br />
2）、不确定性的多少<br />
不确定性有多种形式，客户到底想要的是什么？小组的工作效率，时间？技术门槛等都不存在不确定性，不确定性越多，迭代就应该越短。<br />
3）、获得反馈的难易程度<br />
指小组获取反馈数量、频度和及时性，视所处的环境不同，选择合适的迭代长度；<br />
4）、优先级要以多久保持不变<br />
开发小组承诺在一次迭代中完成一组特定的功能，重要的是不要改变他们的目标方向，</span><span style="font-family: 微软雅黑;">优先级不会被改变的时间长度是选择迭代长度时需要考虑的因素。</span><br />
<span style="font-family: 微软雅黑;">
5）、迭代的系统开销<br />
每次迭代的成本（时间），如迭代中进行的完整回归测试。最佳迭代周期的目标之一就是减少或近似消除每次迭代的系统开销。如每次回归时间成本很高，那决定周期长度时更倾向于长一些。<br />
6）、团队成员的紧迫感<br />
Niels Malotaux指出："只要项目的结束日期还在遥远的将来，我们就不会感到任何压力，并从容不迫的工作。当结束日期逼近时，我们才会开始更努力的工作"。意思指项目开始大家比较放松，而越临近结束，工作越忙压力越大。因此，选择一个合适的迭代周期长度，让团队成员在整个迭代过程中感受到的压力更平均，不是给团队更多的压力，而是压力总量平均分布在迭代过程中。<br />
<br />
每个团队根据所在环境和条件确定一个合适的迭代长度，一般建议2~4周。在我们的实践中，以2周一次迭代的频率，保持相对稳定的开发和交付的节奏。<br />
<br />
<strong>5、参考资料:</strong><br />
《敏捷估计与规划》 Mike Cohn<br />
</span>
<img src ="http://www.blogjava.net/josson/aggbug/341341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2011-01-31 14:26 <a href="http://www.blogjava.net/josson/archive/2011/01/31/341341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈迭代周期控制的困惑</title><link>http://www.blogjava.net/josson/archive/2011/01/13/342927.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 13 Jan 2011 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2011/01/13/342927.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/342927.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2011/01/13/342927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/342927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/342927.html</trackback:ping><description><![CDATA[昨日PM小组例会，谈到了需求评估工作量远大于有效资源情况下，如何保证迭代周期稳定的问题。讨论的内容，对于PM如何控制、保持迭代周期稳定有较大的参考价值。<br />
<br />
<table border="0" cellpadding="0" cellspacing="0" width="267">
    <tbody>
        <tr style="height: 17.25pt;" height="23">
            <td class="xl66" style="height: 17.25pt; width: 36pt;" width="48" height="23">　</td>
            <td class="xl67" style="width: 78pt;" width="104">有效资源</td>
            <td class="xl67" style="width: 86pt;" width="115">评估工作量</td>
        </tr>
        <tr style="height: 13.5pt;" height="18">
            <td class="xl65" style="height: 13.5pt;" height="18">1</td>
            <td class="xl65">多</td>
            <td class="xl65">少</td>
        </tr>
        <tr style="height: 13.5pt;" height="18">
            <td class="xl65" style="height: 13.5pt;" height="18">2</td>
            <td class="xl65">少</td>
            <td class="xl65">多</td>
        </tr>
        <tr style="height: 13.5pt;" height="18">
            <td class="xl65" style="height: 13.5pt;" height="18">3</td>
            <td class="xl65">相同</td>
            <td class="xl65">相同</td>
        </tr>
    </tbody>
</table>
注：<br />
有效资源：指迭代周期内，开发团队所能提供的有效工作日，单位人/天。<br />
评估工作量：指迭代周期内，产品经理提供需要实现的业务需求所评估的工作量之和。<br />
<br />
上表描述以固定周期为两周的迭代中，可能会出现的有效资源和评估工作量对比情况。其中，1、3两种情况因为评估工作量小于或等同能提供的有效资源，所以不会影响迭代周期。重点需讨论的是有效资源小于评估工作量时，如何保持固定周期？<br />
<br />
例举：一迭代周期，能提供有效资源20人/天，需求评估工作量30人/天。<br />
1、功能较独立，需求不能拆分发布；<br />
安排一个release，两个iterative。这种情况需要在迭代2中附加一些技术改造或低优先级的小需求、bugfix，release日期相对会慢几天。<br />
<br />
2、一个迭代中包括多个产品的需求(需要各位产品经理协商，决定需求优先级)；<br />
a)、以保证质量为重：<br />
忽略商业优先级，先处理一个迭代中就能全部完成的需求。<br />
<br />
b)、保证价值<br />
分两个迭代完成，一次release。<br />
<br />
通常情况下，我们尽力保证迭代周期的稳定，但也允许例外，如：商业需求，产品上确定了发布时间点，或者节假期间团队请假比较多，一个迭代所能提供的有效资源相对比较少的情况。<br />
<br />
保持迭代周期稳定，其核心是：<strong>固定Timebox和可提供的资源，让产品经理来决定需求的优先级，每迭代只接纳(开发/QA资源)可承受的需求。</strong><br />
<img src ="http://www.blogjava.net/josson/aggbug/342927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2011-01-13 15:31 <a href="http://www.blogjava.net/josson/archive/2011/01/13/342927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>敏捷项目管理序</title><link>http://www.blogjava.net/josson/archive/2010/12/16/340902.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 16 Dec 2010 07:57:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2010/12/16/340902.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/340902.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2010/12/16/340902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/340902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/340902.html</trackback:ping><description><![CDATA[对于互联网行业来说，快速推出产品占领市场、快速检验产品的价值和方向性、快速调整及优化是极期重要的。因此，采用小步快跑、持续迭代的敏捷实践一种不错的项目管理方法。我们团队在敏捷项目管理方面持续开展了二年多时间，在scrum、xp等敏捷最佳实践的基础上，结合团队自身的基础和条件，不断的偿试和优化，总结和积累了一些经验。目前，这些敏捷项目管理实践在项目组开展情况良好，得到了大多数团队成员的认同，特别是业务方、QA等合作方的认可。<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/josson/agile_flow.png" alt="" border="0" /><br />
上图描述了一个基本项目迭代流程，其中涉及三个角色，其职责同等于Scrum中的Product Owner、Scrum Master、Scrum Team。迭代流程中分别包含了以下敏捷实践：<br />
1）、迭代计划会议，按商业优先级筛选需求列表，确定本项目需求范围；<br />
2）、确认本次迭代需求、资源、时间的具体情况；<br />
3）、简单设计，对关键技术点进行必要的设计；<br />
4）、晨会；<br />
5）、结对编程；<br />
6）、持续集成；<br />
7）、showcase；<br />
8）、项目总结会；<br />
9）、新迭代的开始... ...<br />
<br />
以上具体实践活动内容及组织形式，后续将逐一介绍，敬请关注。<br />
<img src ="http://www.blogjava.net/josson/aggbug/340902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2010-12-16 15:57 <a href="http://www.blogjava.net/josson/archive/2010/12/16/340902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目管理中之员工激励</title><link>http://www.blogjava.net/josson/archive/2010/12/09/340151.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 09 Dec 2010 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2010/12/09/340151.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/340151.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2010/12/09/340151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/340151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/340151.html</trackback:ping><description><![CDATA[1、员工激励<br />
通过各种外部或内部的刺激，以激发员工的需要、动机、欲望，调动人的工作积极性，充分挖掘潜力，全力达到预期目标的过程。<br />
<br />
2、激励形式、方法:<br />
广义的分物质激励和精神激励（职务、荣誉、目标、信任、情感等）。<br />
<img src="http://www.blogjava.net/images/blogjava_net/josson/encourage.jpg" alt="" border="0" /><br />
3、原则：<br />
1）、精神激励为主；<br />
2）、只激励该激励的人；<br />
3）、只激励该激励的事；<br />
4）、激励方法、手段因人而异，把握按需激励；<br />
5）、鼓励公开竞争、和谐竞争；<br />
<br />
4、案例：<br />
1)、压力非常大的时候，采用激励手段 -- 目标激励<br />
2)、当前员工不开心，采用的手段 -- 先沟通，明确原因<br />
3）、表现好的员工 -- 信任激励，肯定<br />
4）、推行新方法 -- 目标激励，竞赛<br />
<br />
5、附：<br />
马斯洛需求层次理论（Maslow's hierarchy of needs），亦称&#8220;基本需求层次理论&#8221;，是行为科学的理论之一，由美国心理学家亚伯拉罕&#183;马斯洛于1943年在《人类激励理论》论文中所提出。<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/josson/Maslow.jpg" alt="" border="0" /><br />
<br />
安全、生理需要属于物质性价值需求；社会需要、尊重需要、自我实现属于精神价值需求；<br />
<br />

<img src ="http://www.blogjava.net/josson/aggbug/340151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2010-12-09 16:17 <a href="http://www.blogjava.net/josson/archive/2010/12/09/340151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于CodeReview的一些想法.</title><link>http://www.blogjava.net/josson/archive/2009/09/20/294004.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Sun, 20 Sep 2009 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2009/09/20/294004.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/294004.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2009/09/20/294004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/294004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/294004.html</trackback:ping><description><![CDATA[<p style="margin: 0in; font-size: 10pt;"><span style="font-family: SimSun;">Codereivew是开发团队中经常采用的，为提高代码质量、提高编码规范的一种手段。针对实际工作组织</span><span style="font-family: SimSun;">review</span><span style="font-family: SimSun;">过程中的一些想法、见解，作一下总结。<br />
</span></p>
<p style="margin: 0in; font-size: 10pt;"><strong>关于CodeReview的几点作用：</strong></p>
<p style="margin: 0in; font-size: 10pt;">1、提高团队的编码规范，培养良好的coding风格<br />
旨在提高整个团队的编码规范程度，统一编码风格。通过每次的codereivew，发现团队成员在实际开发中的一些细节问题，如不良的编码习惯、错误的调用方式等。通过多次的发现、解决问题，使大家都养成良好的编码习惯。review的内容一般包括：<br />
1)、异常、日志的处理；<br />
2)、常量的定义及使用；<br />
3)、字符串处理、BigDecimal.ZERO等；<br />
4)、代码的封装，提高重用性；<br />
5)、代码注释情况；<br />
6)、javascript文件的抽取情况；<br />
</p>
<p style="margin: 0in; font-size: 10pt;">2、检查业务逻辑<br />
对项目实现的功能逻辑进行一次reivew，结合众人发散思维，检查业务逻辑是否有盲点或错误。通常需要参与review的成员能够静下心来深入地认真分析，比较耗费时间。<br />
</p>
<p style="margin: 0in; font-size: 10pt;">3、分享和培训<br />
每个项目的工作安排相对来说都是比较紧凑的，所以每个团队成员在完成自己的开发任务完，没有太多的时间去了解或熟悉其他成员的功能实现。但对于敏捷开发来说，每个功能模块的开发者并不是固定的，根据项目需要，很有可能由非原开发人员来完成增值功能或重构，所以codereivew是一次不错的培训及分享机会，特别是对功能相对复杂的需求实现。可以让团队成员了解或熟悉基本的设计思想和相关的类定义，确保在今后接手这一块工作时，可以更快的上手或找到最到最合适的人去了解更深层的逻辑。</p>
<p style="margin: 0in; font-size: 10pt;"><strong>关于reivew的方式：</strong></p>
<p style="margin: 0in; font-size: 10pt;">1、集体review;<br />
项目成员一起参与codereive，成本比较大，一般一个项目组织一次。比较适合开发经验分享，以及新功能的实现介绍，利于其他成员了解、熟悉实现者的设计思路及代码结构，在后续项目接手这些新功能时，更加从容。<br />
</p>
<p style="margin: 0in; font-size: 10pt;">2、TM组织若干开发经验丰富的一起review;<br />
</p>
<p style="margin: 0in; font-size: 10pt;">3、分组、交叉review;<br />
具有较好的灵活性，根据情况随时找相关人员一起对已实现的代码进行review，及时发现过程中问题并予以修正。比较适合分组\抱团开发，以2-3人为单位，对具体的功能模块负责，一起分析、设计、编码，每位成员对于功能逻辑都比较逻辑，对业务逻辑reivew有比较好的效果。</p>
<p style="margin: 0in; font-size: 10pt;">实际工作中，根据实际情况灵活选择合适的review方式，不应拘于某种形式。review过程，应有明确的目的，具有针对性，而不是停留于表面，避免逐渐成为一种负担，流于形式。另外，应对每次review结果，整理出一份问题列表，进行分析和总结，避免相同问题的重复出现。同时，也应按排相关人员跟进并解决问题。总之，通过codereivew这一手段，尽可能的在提交测试之前去发现代码中存在的一些实际问题，从项目经历中得到成长。</p>
<img src ="http://www.blogjava.net/josson/aggbug/294004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2009-09-20 16:50 <a href="http://www.blogjava.net/josson/archive/2009/09/20/294004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>