先来听一个故事:
二战期间,英国国防部发现参战的飞机难免挨上高射机枪的枪子儿,受限于飞机重量和成本,他们只能在一处安装装甲增强防御力。但是在位置选择上犯了难:应该把装甲装在什么位置?
数学家对战斗中返回的战机作了一项统计,发现39%的弹孔在机翼上,60%在机身,1%在发动机部位。于是他们给出答案:装在发动机部位。
国防部官员们不得其解:不该是弹孔最多的机身上吗?数学家说,统计已经很清楚了,发动机中弹的飞机,大部分都飞不回来了。个人认为成功不可复制,失败或可避免;所有的成功都不是必然的;成功都一样,失败各不同;失败的项目也许值得你警醒。
不久前遇到一个比较棘手的软件项目,为公司带来很大的麻烦,为了避免大家也重蹈覆辙,现在将个人心得与经验教训总结如下:
一、团队建设
1.1、注意高效的研发团队建设
不在多,在精,在强,每个人能独当一面,以人为本;智力密集型工作单个人的水平比劳动密集型工作更加突出。
1.2、稳定的团队
避免过快的人员更迭,反省公司制度。
1.3、PM非常关键
软件开发团队要稳定发展,他们的成功依赖于高效的信息传递和领导能力。精进高效的团队是公司最宝贵的财富。避免外行管理内行。
二、规范过程
2.1、合理的安排工作计划
有目的有计划的做事情,项目管理者监控项目计划进度,进度的把控比制定工作计划更难。项目计划做出详细合理的进度表,提高项目经理的计划意识,采用进度和计划严格一致,加强对计划、进度进行有效的评估。做出进度滞后的应对办法,把握主次。不要为计划而计划,把握粒度。
2.2、开发前制订开发规范
如功能设计思路、类的命名、窗体命名、变量命名、数据库命名、注释、风格、主色彩、辅助色彩等。
2.3、项目完成时注重归纳总结
勤于整理代码与文档,复用;对于开发者来说复用是终极目标,复用的最大敌人是变化。
2.4、使用源代码管理器
如git,开源免费的有coding.net、阿里云等。
2.5、制定项目失败计划
世界上没有任何事情是绝对成功的,要做好项目失败的准备,做最坏的打算,尽最大的努力。
2.6、使用一体化项目管理软件
含需求、设计、编码、测试、进度管理等功能。
2.6.1、项目管理工具能完成的功能
1. 需求管理:项目的需求变更,跟踪,控制
2. 资源管理: 项目的可利用的资源(人力,物力,财力)
3. 计划管理: 包括成员管理和权限分配,日程排定,工作时间管理,里程碑设置
4. 进度管理: 日历,工作流,项目路线图和Gantt甘特图
5. 测试管理: 项目软件缺陷Bug状态跟踪,反馈
6. 文档管理: 发布文档文件,存储文件,集成源代码管理与git,svn
7. 信息管理: 活动统计报表,项目报表的导入和导出功能,信息筛选,预警和邮件提示
8. 共享管理:技术分享,团队新闻,Wiki和论坛等功能
2.6.2、IT项目管理常用工具
0、ZenTaoPHP 轻量级的PHP项目管理开发框架,以开源的项目管理软件
下载:http://www.zentao.net/download
1.Dotproject 基于php 免费开源
2.Redmine 基于Ruby和Rails框架 免费开源
官网:http://www.redmine.org/
在线演示站点:http://demo.redmine.org/
3.Trac 基于Python 代表有FogBugz 免费和商业
官网:http://trac.edgewall.org/
4.MS Project 微软项目 C/S架构 项目单一,功能少
官网:http://www.microsoft.com/project/en/us/default.aspx
5.Jira + Confluence 基于Java 收费模式 包含Bug追踪和Wiki
官网:http://www.atlassian.com/software/jira/
在线演示站点:http://jira.fangwai.net/secure/Dashboard.jspa
6.ActiveCollab 基于php 曾经开源
官网:http://www.activecollab.com/
7.Basecamp 基于商业运作模式 曾经项目管理界老大
官网:http://basecamphq.com/
8.BugFree 国产软件 ,使用MS的软件开发流程规范
9.XPlanner 采用极限编程开发(XP)流程
官网:http://www.xplanner.org/
三、定位与需求
3.1、尽量做产品
不要做前后没有联系的项目(也就是公司没有任何可以复用的资源)、谨慎被多次转包的项目、小而精的项目、与现金、人事有关的项目。
3.2、抽象出项目的核心
对于大而全的项目把握住用户的痛点,找出系统的核心需求,分期,分批开发; 关键需求与用户共同画出产品原型。
3.3、采用多种收集需求的方式
制定有效的沟通制度,提高沟通意识,采取多方面的沟通方法,不要单一的口头沟通,采取有效的书面沟通,比如邮件、文件传递等方式,对于未及时收取邮件造成的损失责任归属。除了邮件外,重要文件需要电话提醒和回执等。与客户谈需求时可以录音、录视频、拍照等多种手段
3.4、不要过度收集需求
有时客户并不知道自己要什么,把可以分析出解决办法后让客户选择
3.5、尽量选择大项目
麻雀虽小五脏俱全,小项目谨慎选择
3.6、小步快跑做产品
完成一部分、测试一部分、验收一部分;迭代。。。迭代。。。
3.7、更换收费模式
可卖服务,卖产品,卖技术,卖运维等,换一种挣钱的思路
四、技术提升
4.1、注重技术提升
项目不忙时组织学习,写自己的技术博客,分享知识,关注各大技术论坛,如博客园,csdn,javaeye;有博客的程序员一般都不会太差;要实实在在的技术,不要被一些线下的活动拖累,名头很大的人不一定适合你。
4.2、打造公司的通用平台
系统中包含基础功能;简单功能应该通过平台自动生成,加快项目进度
4.3、积累源代码
关注开源社区,如github,oschina,codeplex,尽量让项目去匹配公司现有的资源,警惕白手起家的项目
4.4、不要盲目的选择新技术
更换系统架构,但也不推荐天天吃老本,建议隔代升级。不要跟风,技术选择项是不要考虑现在流行什么,而要考虑需要什么,适合什么。 一般的客户对你用什么技术实现是不关心的。
4.5、提高执行力
天下功夫唯快不破
4.6、学习英语提升开发能力
请猛击:《一种绝对提高开发水平的方法》
4.7、利用在线教育平台
4.8、技术分享
轮流、30分钟、每个人都有份、先准备并整理成博客笔记、分享干货
五、失败的教训
5.1、项目管理环境问题
5.1.1、不合适的项目组织结构
包括团队成员的配备问题、项目计划控制和协调机制生搬硬套PMP,不符合公司企业文化和体制机制、团队总是关注项目的忙碌而不是项目的成果、组织没有明确的授权,权责不匹配、喜欢照搬过去的项目经验来管理现在的项目,忽视了项目的唯一性、缺乏高层领导的支持和投入;
5.2、项目管理过程中问题
5.2.1、不胜任的项目经理
包括项目经理不具备业务知识,行业知识和项目知识,缺乏软技能,面对压力无法做出关键决策,无法看到问题的本质,无法从全局提出系统性解决方案从而推动项目的发展,不能随时就环境做出调整等;
5.2.2、漠视或者无视项目的本质
包括没有整体思路、对项目各个组成部分以及他们之间的联系没有整体把握、软硬件无法进行整体的思考、考虑问题经常是头疼医头,脚疼医脚、人为的把项目进行分段,从而没有预见项目的整体性风险等;
5.2.3、项目管理被滥用或者错误运用
脱离项目实际,滥用各种管理工具、过分重视工具而忽视团队的建设、为了管理而管理忽视项目成果、项目经理不关注项目人员的心理素质和能力而一味强调管理技巧和工具、用到的管理太复杂或者太简单而不适合具体的项目、总是认为项目管理是一成不变,企图一套流程打天下的、只关注项目报告而无视项目的实际情况;
5.3、计划过程中的问题
5.3.1、没有良好的沟通渠道设计;
5.3.2、不主动去激发用户参与项目的热情;
5.3.3、靠主观感觉盲目制定项目计划;
5.3.4、在不了解项目具体情况下对项目盲目下定义;
5.3.5、计划资源把一切想的太美好,主观性强;
5.3.6、靠个人感觉来分派工作而不是客观的评估每个人的能力匹配程度;
5.3.7、对变更没有实质管理,更多是体现在文档上而不是实际工作中;
5.3.8、胡乱控制项目节点,而不是从项目特点本身出发;
5.3.9、缺乏对项目失败的定义以及评估失败风险;
5.3.10、项目已经失败的客观现实面前缺乏终止项目的管理机制;
5.3.11、过分看重项目的当前经济价值,利令智昏;应该注意项目的附加值,复用价值等。
5.3.12、项目开发周期多数情况被低估
六、总结
总之如果您加强项目管理意识、注意团队建设,规范开发过程、找准个人与公司的定位、不断提升开发技术与积累资源、善于总结失败教训,这样将大大提高您项目的成功率。
成功不可复制,失败或可避免;
逃避不一定躲得过,面对不一定可怕;
时间花在哪里,你的成就就在哪里;
当然,项目管理在现实中存在多样性与复杂性,我说的也许有些不对,欢迎大家补允,我随时添加,谢谢!
原文:http://www.cnblogs.com/best/p/6859733.html
作者:张果