如果说做项目不需要计划,恐怕没人会认同。是否每个项目计划都起到了作用呢?却不尽然。知道要做计划,但不知道为什么做计划,如何做计划的还是大有人在。所以很多计划沦为依样画葫芦,成了摆设。

IT项目计划的用意其实非常明确。因为我们无法事先知道系统最终会长什么样,和用户想象当中的是否一致,和用户的需求是否匹配,我们就需要通过一个计划,从需求,到设计,到测试最后做出来。每前进一步,都要保证不再返工回前一个阶段。如果一个计划不能起到应有的作用,项目都会在原地逗圈子。而这点绝不是靠某个天才的系统就能解决的。因为一个IT系统在完成之前,没人知道它到底长什么样,大家就不得不借助一些想象。即便有一些原型或者样板,也只是窥一斑而想象全貌。而群众的想象力是无限的。

其实乔布斯给人们的苹果,并不是人们想象中想要的东西,也不是超出你想象的东西。他给的是一个载体,一个窗口。通过它找到各自想象的东西。从而满足了人们的多样性需求。IT系统里也存在这样的系统,即工具层面的东西,随便你怎么用,但不要提要求。对于面向特定需求的系统,我们所做的就是先找到一个大体适用的方向,然后一起奔着这个方向走,且要不逗圈子或少逗圈子。

曾经遇到一个项目,每次项目回顾会上,都有一堆问题。很多问题都说不清楚需要花多少时间解决。还有一些问题,有了解决方案,也有了实施计划。但是,每每问起对整个项目进展有何影响时,项目经理都信心满满地说“没影响”。一次两次也就算了,后来明明某个任务推迟的不像话了,怎么还说不影响项目上线呢?让项目经理把里程碑计划展示一下,这才发现,这些有问题的任务都不和里程碑节点相关(所谓不在关键路径上),以至于都推迟到后一阶段,后后阶段了,还是不用调整里程碑计划。

---那确实需要推到上线时间点以后的问题呢?有这种事情吗?

---有!

---那如何不影响项目上线?

---放到上线后完善阶段了

做了十多年IT项目的我,一时间没听懂,上线后完善是个什么玩意。 只见过上线后支持,哪里又出来个上线后完善呢? 

后来才明白,这个项目计划,除了里程碑时间节点不变,其他都在变。凡是不能按时间完成的任务,都推迟、推迟,等推倒上线节点也兜不住了,就上线后再去完善了。

听懂之后,真有种想骂人的冲动。这是做项目吗?这不就是脚踩西瓜皮吗? 整个一个不拿里程碑(milestone) 当石头。当它不存在,透明的,一概穿越。 最后完全是以任务节点构成的网络结构图在管项目进度,而没有了项目阶段的概念。

也许是为了心里安慰,因为有任务被推迟,项目经理又把能早安排的事情就提前安排了做。问题是,很多事情如果不是在里程碑节点上有个清楚的交代,那些提早做的事情完全有可能返工重做。比如开发还没结束,就安排一部分用户做试运行(pilot)。 如果开发完成后,有些地方又调整过,那么pilot小股部队就被牺牲掉了,成pioneer先驱了。 

至于那些所谓上线后完善的事情更是后患无穷。等到项目都剪彩、放鞭炮庆祝成功上线了,谁还会管完善不完善的事情呢。比这更糟的结果是,这“完善”最后成了没完没了的终生事业。那也就不叫项目了。

其实,项目里程碑节点就意味着质量门。在某些情况下确实会让步放行。但让步的时间和内容都是有底线。这个底线就是,让步放行的东西我是可以不要的。到总体验收的时候,确定无法完善了,也就认了。没有这个共识,就不可以让步放行。

IT项目其实就是从粗到细的设计,从细到粗执行。制定计划时,先做里程碑计划,明确大阶段目标。而明细计划只要做到当前阶段,所谓的“渐进明细”。不要急着把最后一天做什么都想好。但一定要从第一天就知道最后一个阶段的目标。

等到计划执行起来则从细到粗。在最细节操作层面的事情,需要反馈到最上层的里程碑计划中,以确定里程碑是否需要调整。在上文的案例中,常常是某件具体的事情都有计划了,比如项目上线时的数据迁移(通常是指未完成的业务操作,例如未关闭的采购订单等)计划。但这是一个个孤立的任务计划,和里程碑计划的关系完全忽略。而作为一个项目,因为其独特性,非常有必要把网络化的任务关系分派到各个大阶段上,然后在里程碑节点上进行“前进还是后退”的评估。里程碑是项目进程中真正的基石,打下桩,就可以继续向前,不再回头看。

别不拿里程碑当石头---------IT项目管理之项目计划(转)的更多相关文章

  1. trac项目管理平台

    本文来自百科,由于是非Python开发者,所以仅为了拓宽知识面 1软件介绍 Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用.Trac以简单的方式建立了 ...

  2. 个人博客 week1

    1:看完教材后不懂的几个问题: (1):团队合作中每个人分工而行,如何保证比较完善的各人之间的信息共享? (2):敏捷开发如何保证开发的效率?即在进行大项目的开发时敏捷开发看上去会很混乱. (3):黑 ...

  3. 【SE】Week1 : 个人博客作业

    快速看完整部教材,列出你不懂的 5 - 10 个问题,发布在你的个人博客上. 1)针对书中提到的NABCD模型中的N,如何发掘市场不明确的潜在用户需求? 2)PM是否负责团队职责的分配以及工程模块的设 ...

  4. GODOT 3.0 开发快照版本 ALPHA1 释出

    经过将近一年的开发后,master 分支(即未来的Godot 3.0)所有功能特性接近完成,可以在Godot社区里进行更广泛的测试了.因此我们释出了第一个Alpha快照版本,供老用户体验.报告Bug. ...

  5. week1:个人博客作业

    1.软件工程课程的希望和目标 老师步置的任务完整的做完,每一步都是自己做的,明白自己做的每一步,和为什么这样做. 期末考试最后为95分以上,最好是100. 每周学习这门课时间 每周2节课(90分钟)+ ...

  6. PMP知识领域

    · 十大知识领域 整合-项目整合管理 识别.定义.组合.统一和协调个项目管理过程组的各种过程和活动而展开的活动与过程. 整合:统一.合并.沟通和简历联系:贯穿项目始终 七个过程组 一.制定项目章程(启 ...

  7. 【BUAA 软工博客作业】个人博客作业

    项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:热身作业,阅读并撰写博客 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 阅读教材, ...

  8. TFS使用指南

    上一篇文章已经简略介绍过TFS的安装与管理,本篇文章主要描述一下我个人在工作过程中使用TFS的一些指南与建议.本章内容预览: 1.  项目计划与跟踪 经常有很多朋友在日常聊天中抱怨做计划很无畏,因为计 ...

  9. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

随机推荐

  1. oracle查看数据库的字符集

    注意如果是从旧的数据库复制,一定要保证字符集使用一模一样的,不然会有很多问题(比如汉字在UTF8占3个字符,在GBK占2个字符,所以设置的列宽度要比原来的大才行,不然就会报值太大的错误) select ...

  2. ubuntu英文乱码解决

     ubuntu英文乱码: vi /etc/default/locale LANG="en_US.UTF-8" LANGUAGE="en_US:en" 配置更 ...

  3. Linux下串口ttyS2,ttyS3不能用的问题解决办法

    PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...

  4. 翻译:Knockout 快速上手 - 4: 你需要知道的顶级特性

    Knockout 最棒的一个特点就是它的可扩展性.Knockout 存在大量的扩展点,包含大量的工具来创建我们的应用程序.许多开发者除了 Knockout 核心库之外没有使用任何其他的脚本库 ( 甚至 ...

  5. SQL必知必会笔记2

    15. 插入数据 1). 数据插入 INSERT 用来将行插入到数据库表中,插入的方式有几种: (1)插入完整的行: INSERT INTO Customers VALUES( '1000000006 ...

  6. How to deploy JAVA Application on Azure Service Fabric

    At this moment, Azure Service Fabric does not support JAVA application natively (but it's on the sup ...

  7. Botposter.com集群ETCD2.3.7升级至3.0实录[原创]

    7月1日,为庆祝我党生日,ETCD隆重发布了3.0版本.Botposter.com也在第一时间对集群进行了升级.本文是升级过程的记录与总结(文中假设读者已经使用或测试过ETCD V2,如有不妥请见谅) ...

  8. MSP430F149学习之路——按键

    代码一: /********************************** 程序功能:用按键控制LED灯熄灭 ***********************************/ #incl ...

  9. 使用throws抛出异常

    声明抛出异常实在一个方法声明的throws子句中指明的.throws子句方法的基本形式如下.方法 throws 异常列表{ }throws子句中可以指明多个异常,说明该方法不对这些异常进行处理,而是抛 ...

  10. jquery 设置元素内容html(),text(),val()

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...