﻿<?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-j2ee绿洲-文章分类-项目管理</title><link>http://www.blogjava.net/livery/category/33336.html</link><description>找到属于自己的一片天空</description><language>zh-cn</language><lastBuildDate>Sat, 06 Sep 2008 07:19:28 GMT</lastBuildDate><pubDate>Sat, 06 Sep 2008 07:19:28 GMT</pubDate><ttl>60</ttl><item><title>如何建设软件项目团队的一些问答</title><link>http://www.blogjava.net/livery/articles/217941.html</link><dc:creator>心情经纬</dc:creator><author>心情经纬</author><pubDate>Mon, 28 Jul 2008 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/livery/articles/217941.html</guid><wfw:comment>http://www.blogjava.net/livery/comments/217941.html</wfw:comment><comments>http://www.blogjava.net/livery/articles/217941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/livery/comments/commentRss/217941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/livery/services/trackbacks/217941.html</trackback:ping><description><![CDATA[啥子是Programmer manager<br />
A：program manager的program不是程序啦。。。一般管一个business
domain的end to end solution. 在甲方的话，一般还会分成几个team，下面的service
manager管operation和client management，还有initiative manager管一堆project
manager来deliver project。
&nbsp;
<br />
Q: 请教一下，从带10-20人到带更多的人，最需要注意的是什么？<br />
<br />
A：<br />
请教不敢，我就是完全失败的一个典型，呵呵，经验教训可以简单说说。<br />
<br />
我自己的经验，其实技术团队的管理， 真正质变的大概是从超过25-30人起， 道理很简单。 一个人可以直接充分管理的人大概就是4-5个为佳， 25个以内，分组就可以，超过25/30个以后就必须分3层，管理成本就开始剧烈增加，啥问题都出来了。<br />
二
层结构的时候，下面人有问题容易及时修补，对小组leader的协调能力要求不高，只要负责即可，这种情况下基本没有多少管理成本。但是到了三层结构以后
对第二层的人要求比较高，如果没有合适的第二层人员，就基本是个乱摊子。老大这时候主要的工作，其实就是应该在人数超过50之前，尽可能快的培养出适合第
二层次的负责人，而不是急着做大导致整天忙着救火。另外分层架构的一个必然问题就是容易产生帮派和分离势力，不注意这方面出现的内耗杀伤力极大。所以对下
属马仔头目的监控会耗费你比较多的精力，而且同时还要充分考虑到如何让这些小流氓敏感脆弱的心理感觉到尊重。<br />
<br />
<br />
我自己感觉50个人
左右时是个大坎，如果可以突破就可以顺利向三层的黑社会组织结构发展，可以过度到100人以上，我们那时候的问题就是老板其实并没有意思到管理成本这个问
题，错误的以为可以通过规模追求效益。在基本能突破50个人这个坎的时候，老板被上年的产值弄混了头，盲目发起了一场新战役，又空降了一个一心想做大事的
牛人，两人一合作，就一起over了。我们当时的架构，老板热衷于搞大合并，把几个事业部合并了弄个大部门，把一些马仔头目拆分的乱七八糟的，说是充分利
用资源，打破部门间的壁垒（扁平化管理？)，然后又乱七八糟塞了一大堆人进来，原来的三层结构彻底打破，结果变成无人负责制。 <br />
<br />
软件项
目的团队规模，个人还是觉得越小越好，可能的情况下尽可能走小而精的道路，在培养了团队成员的默契和一些共同的文化认同以后，再逐步拆分扩充，要比一开始
就上大摊子有效的多。
我们之前成功的一个项目，最初的预算是60人，我采取的做法现在看起来非常明智，首先只找了1，2个核心的程序员和少数的普通程序员，通过结对开发的方式
让他们彼此熟悉和磨合，在这个过程中完成基本的核心开发，在2个月以后再补充第二批程序员，把原来人分拆重新结对。通过这种方式逐步过度到20-30的团
队。
再往后考虑到个人能力和管理成本的问题，就拒绝再加入了，最后以项目规划的1半左右的资源就完成了开发工作。而且这期间培养了不少人，大部分人后来又补充
到其他项目，逐步建立了整个部门技术团队。这种逐步圈地的做法比较稳妥，也容易培养团队之间的信任文化，那时候整个工作气氛还是蛮好的，我们是公司最少加
班的团队，但是是公司开发效率最高的团队。而其他几个规模只有一半，一开始就砸进几十个人的项目，都是问题多多那种。<br />
<br />
100个人以上的团
队，我只见过，没管过，，基本上我觉得战斗力要比50人甚至30人低，吵架pk聊天时间多过做事时间，别相信啥1+1&gt;2
。最近听朋友说XXX为了保证销售额，把销售人员增加了1倍，销售人员任务降低一半，这种规模游戏也就是骗领导有用吧，地球人都知道，横竖能干活的就是那
么几个人。<br />
<br />
对一个leader来说，我自己的感觉就是4，5个人的时候啥都可以不管，自己把活干大头就好了，要有nb的小弟就扔给她做。
10来个人的时候，就要注意大家吃喝玩乐心情愉快，因为到了这个规模，基本上靠个别牛人发飙已经不可能搞定工作了，需要你去努力拍下属的马匹投其所好，让
他们赏脸做事，而且一定要有风险控制机制，关键工作岗位一定要有backup。规模再往上走，自觉往后面站，基本上你工作的中心就是要培养一批打手让他们
自己折腾自己。<br />
<br />
<br />
P：
<div style="font-size: 12px;">非常喜欢5-10人的小团队，我上一个项目就是了，4个dev，两个是senior两个
junior，另外4个tester，关系好打理，每个人知道自己在团队里的职责和位置。虽然个体能力不突出，但团队战斗力强。跟我们同期的另外一个20
人的队，有3个牛得不得了的人，manager和leader之间谁都不服谁，最后项目交付了，但一大堆bug。</div>
&nbsp;
<br />
Q： 受教了，多谢分享！<br />
一个问题就是：在2个月以后，团队开始扩充时，如果仍然采用结对的方式，而不是传统的分组（几个人一个小组，然后选拔组长），如何保证队伍具有非常一致的目标和想法，如何保证团结？<br />
&nbsp;
<p><br />
A：<br />
软件工程里面有个著名的brook定理，大意就是向一个进度落后的项目加人，只会让这个项目更加落后，引申开来就是应该避免在项目的中后期大幅度加人。 这里面的主要的原因有几点。<br />
<br />
1. 新人加入团队以后需要获取团队成员的信任和尊重，这需要比较多的沟通和交流成本，软件开发说到底是一种群体活动。<br />
2. 新人要理解，认同团队的文化，也需要很大的成本<br />
3. 新人需要对项目进行学习和了解，过程会拖累其他开发人员<br />
4. 新人太多，有可能会彻底摧毁原来团队已经建立的平衡结构，比如团队文化， 团队间的角色定位。<br />
5. 管理者会因此大幅度的增加管理成本，另外，管理者很可能并未做好管理这样团队的准备，有可能会因为不合适的行为和决定导致团队崩溃<br />
6. 人员增加以后，彼此之间的交流沟通成本会大幅度增加，超出一般人的想象。<br />
<br />
因此一般正确的做法是避免在项目中后期加人，虽然这么显然简单的道理大部分老板都不相信。<br />
<br />
所以表面上看，逐步圈地的做法是违反brook定理的。但实际情况，恰恰因为结对工作在很大程度上克服了上述的问题，所以你要是理解了结对的收益，就可以明白为什么结对可以保证&#8220;队伍具有非常一致的目标和想法，保证团结&#8221;<br />
<br />
<br />
1. 结对可以让新人之间加快了解过程，尽快的融入团队， 不使用结对的方式，一个新人可能需要1，2周才能和团队相处融洽， 使用结对的方式以后，1，2天就可以很熟悉。<br />
<br />
2.
结对降低了新人的学习成本，在结对过程中，原团队的成员采取人盯人的方式尽快的将技能和团队文化传递给新人，而新人一开始就可以上手工作（即便是菜鸟，在
结对过程中也可以通过质疑和提问对老人提供帮助和监督，而出于维护个人的自尊，团队成员一般都会急于向新人推销，证明自己<img alt="" src="http://www.kuqin.com/upimg/allimg/080614/1617540.gif" smilieid="9" border="0" />），更有成就感和归宿感。对团队也就更容易认同。<br />
<br />
3. 结对是分而治之的，有助于避免新人因为陌生环境产生分离感，建立自己的帮派。 有助于强制性的向新人灌输团队的目标，保证团队的团结。习惯了结对的工作模式以后，程序员之间必须强制性的进行沟通和交流，也可以避免产生帮派和内耗。<br />
<br />
4.
作为boss更关心的一点就是，通过结对这种方式，可以获得足够的backup，可以避免因为人员流动给项目带来毁灭性的风险。因此可以大幅度的降低管理
成本。我们项目中期流失了近三分之一的人，进度没有受到任何影响，所以前期boss极力反对做pp，后期大力支持。我们自己有过一个大致统计，正常情况下
离职一个人，要损失至少半年的人工。<br />
<br />
通过结对这种方式，互相之间建立了沟通和信任机制，再划分如果有目的的小团队，就比较自然，另外在不同的小团队之间交换结对伙伴也可以做激励和监督作用。而一次性投入的建设新团队，碰到的问题会更多。<br />
<br />
这
个项目其实失败的一个地方就是中期迫于人员流动而放弃了结对，最后导致帮派和内耗，纠正过来化了血本，否则还能做的更好。人员流失有一部分是因为个人当时
管理经验不足，对问题的解决欠妥，还有一个原因是原材料不合适，老板在团队组建之初盲目的招来了一些并不适合的人（后来碰到一个老板，居然跟我提招10留
1的理论，Orz），也为后来的内耗埋下了隐患。这也算是一个经验，团队成员的选择leader一定要过问，对于那些性格比较偏激，难以控制的人应该尽量
回避，绝不可以因为资源紧迫就充数。</p>
<p>按：pp的工作方式，对团队成员性格有一定要求。<br />
Q：<br />
任何团队的组织划分，一定不是用技术最好的人来做leader。对技术好的人要进行压制。不管有多出色，都要尽力扶持听话的人。<br />
找技术好的人是对的，但是他技术好，你技术不好，就面临挑战了。何况技术好，不听话的，到哪里都是干活的命，没有人会重视他们的。<br />
<br />
A：<br />
你老外说话也不真见外，按你这样管， 几天大家就造反了。<br />
<br />
软
件团队和一般的团队区别非常大， 对软件团队来说，最好的管理模式就是不管理，
让大家自己发挥，做好足够的引导工作就好。小团队leader身先士卒起个带头示范左右，大团队， leader要躲在后面做好后援当保姆。
技术好的人的做leader是非常自然的，不懂技术的人做负责人倒是比较容易引起问题，技术人员都比较骄傲，除非是个美女mm带头，那还可以忍忍。
不是说不懂技术的人做不好pm，但是没有技术背景的人天然就和技术人员有鸿沟，技术人员背后搞的小九九，花样那个多，所以没有技术背景，管理成本会比较
高。 <br />
<br />
有个老外专门写了本书论证为啥技术好的人就该做leader， 你可以找找看。</p>
<p>
&nbsp;
</p>
按：管理层对技术人员的不尊重和粗暴压制， 才是技术人员不听话的一个重要原因。
<p>
&nbsp;
</p>
<p>Q：<br />
说起来， 管理无所谓，只要肯听话的，这个是永远的原则。<br />
听话的，能力也强的--这当然最好的，但是一般听话的能力都比较一般。要是能力强，不听话，最好不要，这样的人， 很容易出问题。<br />
<br />
A：<br />
软件开发和普通的项目是有根本的差别的，软件本质还是个体的脑力劳动， 所以软件的生产力完全取决于个人的能力和工作态度。 2个程序员之间工作效率的差别可以轻易超过10倍， 所以你找找再多听话的人又有什么用？<br />
<br />
能力的问题可以举个真实例子： 某500强企业开发的一个业务系统， 投入近20个人， 历时2年至今还不能上线。而同样的东西，在另外一个团队只是2个人一个月的工作量而已。第二个团队的平均人工是要低于第一个团队的。<br />
<br />
态度的问题也可以举个真实例子： 某公司开发的一个应用系统，4个人组成的验收团队测试了5个月只找到40个的缺陷， 系统提交客户以后，客户方自己组织测试，3天内就发现了40个以上的重要缺陷。<br />
<br />
<br />
任何一个公司，都必须有听话（执行者）和不听话的人（创造者和破坏者）的存在，否则这个公司就离死不远了。 管理要的不是简单的听话与否，管理者关心的应该是可控和有效性。<br />
<br />
Q：<br />
为了达到目标，有效性就是听话，完成任务达到目标可控性，也就是要听话。<br />
<br />
A：<br />
算了，让我去死吧。<br />
<br />
按：管理人员和技术人员的沟通真是鸡同鸭讲，呵呵。</p>
<img src ="http://www.blogjava.net/livery/aggbug/217941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/livery/" target="_blank">心情经纬</a> 2008-07-28 09:39 <a href="http://www.blogjava.net/livery/articles/217941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈团队合作</title><link>http://www.blogjava.net/livery/articles/217930.html</link><dc:creator>心情经纬</dc:creator><author>心情经纬</author><pubDate>Mon, 28 Jul 2008 00:36:00 GMT</pubDate><guid>http://www.blogjava.net/livery/articles/217930.html</guid><wfw:comment>http://www.blogjava.net/livery/comments/217930.html</wfw:comment><comments>http://www.blogjava.net/livery/articles/217930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/livery/comments/commentRss/217930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/livery/services/trackbacks/217930.html</trackback:ping><description><![CDATA[<strong>中小型软件</strong>开发项目一般都具有任务急、工期短的特点，要在确保满足时间、质量、成本和效益的情况下交付给客户满
意软件产品，
必须保证团队与客户、团队成员之间能良好的沟通与协作。沟通与协作是团队开发活动的基础，它贯穿于软件开发的整个生命周期。是软件开发项目速度、成本、效
率的关键。
<p>　　随着Web服务技术和面向服务的体系结构(SOA)的发展，要求软件开发必须从使用本地丰富的内部应用资源向联接外部广泛分布的服务资源过渡。</p>
<p>　　这一转变却正面临一些新的困难，新时期的软件开发必须回答如下三个问题：如何使包装为Web服务的软件资源协同工作、如何在技术演进的过程中保持平台的中立性、如何在当前动荡的Internet时代适应需求的变化?</p>
<p>　　通过与这三个问题相对照，不难发现：传统的软件开发方法难以重用和协同软件资源，难以保持平台的中立性，也难以满足变化的需求。因此，迫切需要一种能够克服这些困难的新方法，那就是——协作开发。</p>
<p>　　今天的大多软件工作能否获得成功，取决于团队的协作，而不是个人的突出表现，特别是在中小型软件企业当中，创建并维护一个高绩效的团队，以产生潜在的杰作是非常重要的一项工作。团队成员彼此都影响着整个团队的成功，他们必须要向着一个共同的目标而合作。</p>
<p>　　<strong>孤军作战已经成为历史</strong></p>
<p>　　几年前，&#8220;软件开发是一项团队活动&#8221;是Rational提出的口号之一。可以说，直到今天，这个标语更为正确了，个体开发者在单独完成一个重要项目的时代已经成为过去了。</p>
<p>　　然而，简单地将一些人分配给某项目并不意味着你拥有了一个团队。要想创建一个有效的工作组，团队成员必须相互&#8220;检入&#8221;且配合。敏捷开发中提到，团队成员应当可以认识到彼此的优点和缺点，并相互配合以取得成功。</p>
<p>　　多年来，人们仅将软件局限在应用工具的狭小区域，这种片面的理解致使人们很难联想起大规模的软件工业。因而，软件开发往往与编写程序等同起来，而调研分析、建模、测试、部署和全局管理等工作却被忽略。</p>
<p>　　这种局面在一些中小型软件开发项目当中非常明显，特别是对任务认识的片面性也体现在对软件开发角色的划分上，程序编写者(开发人员)是主力军，代表了一切。如此以来，在开发工作中就呈现&#8220;独木难支&#8221;的局面。</p>
<p>　　可见，今天的软件开发已不单是一种技术或工具的应用，抑或一种灵感的迸发。资源的调配、协作的布局、流程的设置在软件开发中占据越来越重要的地位。技术、工具、人和管理方法以开发对象为核心，要达到水乳交融的境界。</p>
<p>　　在潜心经营软件开发工具多年后，IBM Rational力求通过整合将软件开发的要素粘合在一起，提供一种功能强大的平台，促进软件工艺的发展。</p>
<p>　　<strong>从角色入手管理团队</strong></p>
<p>　　虽然充分的协作开发具有很多优势，但这在事实运行当中却存在很多问题，例如，对于一个管理者而言，一类挑战是在既有协作团队中增加新的成员。有
些小公司起步于一个核心团队。当公司发展壮大时，该核心团队需要吸收新的成员，这时，就有可能发生一些冲突。结果可能是，新成员会被驱逐出来或者核心团队
成员选择放弃并离开公司。</p>
<p>　　<strong>以下有几个方法，可以避免出现类似的情况。</strong></p>
<p>　　首先，当新成员加入一个团队时，请确保他们的个性与本团队相匹配。</p>
<p>　　第二，不要聘请超级明星。尽管他们可能带来好的效果，但是你想要他们做的大部分工作可能对于有经验的人们而言已是重复工作，而且也不能够充分他们的才能。</p>
<p>　　第三，或许最重要的是，当团队中加入新成员时，为他们指派一些可以帮助他们掌握窍门并理解文化的良师。这将有助于他们更快地融入团队并产生一种归属感和成就感。</p>
<p>　　从项目当中的角色管理入手，也是提高协作开发效率的一项重要举措，IBM Rational所倡导的整合开发平台，是将与软件开发相关的所有人员凝聚在一起，通过一套整合的流程和全面的质量控制机制，形成一个功能强大的开发平台。</p>
<p>　　高品质软件是多道工序锤炼的结果，创造高品质软件的开发平台必须整合完成所有这些工序的角色，以使其倾力协作。角色的整合建立在清晰的角色定位
之上，从开发实践中IBM
Rational定义了项目经理、系统分析人员、架构设计师、开发人员、测试人员、部署人员六大角色，他们的工作环环相扣，形成一个缺一不可的团体，每一
个角色都能在开发平台上找到自己的位置，并能获取适合自己的工具。</p>
<p>　　沟通与协作不仅指开发团队的内部成员之间，，也包括开发团队与用户、客户之间的互动。在软件开发的全过程中，
沟通与协作是一切活动的基础，它将会扮演越来越重要的角色，而采用专业的平台与工具，不仅将会让团队的沟通写作更加有序、高效，更能够保证整个软件项目的
质量与客户满意度。</p>
<img src ="http://www.blogjava.net/livery/aggbug/217930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/livery/" target="_blank">心情经纬</a> 2008-07-28 08:36 <a href="http://www.blogjava.net/livery/articles/217930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>