项目管理(二)责任划分

上一篇我们讲了,我们通过对任务进行切分,确定项目的真实任务量,保证劳动付出和报酬收益之间的等价匹配。但就像一次交易,除了价格以外,还有其他很多需要考虑的因素。本篇将继续探讨在软件开发过程中,如何进行流程控制和责任划分。

缘起

有一次,一个朋友约我接一个私活。客户之前已经花了3万,做了一个仿凡客的网站,都交付使用了,才发现bug一大堆,根本没办法用。想让我们给接着做,让我们给报个价。看他演示了一会儿,我告诉他,这价格我们报不了,因为需求都不清楚。

“怎么就不清楚了呢?”客户很是不解,“你们就把这些问题解决了就完了呀!”

“这些问题,究竟有哪些问题?”我追问道。

“就我刚才给你们演示的呀!”

“是不是就只有这些?”,我一定要把这一点弄明白,“那我们用笔把他们一条一条的记下来,修完这些问题就完事?其他的不管!”

他不说话,似乎还不太明白,我接着解释,“比如你这个页面,现在是打不开,崩溃了,我们是不是只要做到这个页面能打开,就OK了?至于这个页面打开后,上面的功能是不是已经实现了,我们不管。”

“那不行!”,他马上就跳起来了,“必须得做完啊!得好好的跑起来。你看,就像凡客这样……”

我基本上失去了和他谈下去的兴趣。直接给他两个选择:1、我们做兼职,在他眼皮子底下做,多少钱一天/小时;2、把bug一个一个列出来,根据bug的难度,确定每个bug的价钱,按时结算。客户两个都不愿意,一定要我们报个总价。

下来之后,我那朋友还和我联系,说客户其实很欣赏我做事的风格,希望能继续谈。我直接回她,“如果他真的欣赏我做事的风格,就按我说的方案做。需求都定不下来,总价没法报。‘照着凡客做’,那不是需求!你坑死我啊,一个凡客,3万就做出来了?而且凡客里面,估计都还有一堆bug,大部分时间普通用户没发现而已……”

这种注定扯皮的活我坚决不做!又不缺这点钱,以前做律师做装饰,扯皮真的是扯伤神了!这种稀里糊涂又已经上过当的客户,百分百扯皮。最后我那朋友另外找人,报了个总价,也还是没做成这业务,因为客户要留50%的质保金,1年内付清。我哈哈大笑,想起当年我装饰公司请人做网站,最后也是把做网站的小伙子烦得连尾款都不要了,直接闪人。

思考

现在想来,应该就是这件事,让我动了念头,开发目前这个任务管理系统

“像凡客那样”,“参考阿里巴巴”,“类似于QQ”……这些话,我听到就害怕。还不如通过任务切分,把需求一条一条的真正的固化下来,然后我们再开始做。这些土豪客户是绝对没有这种耐心的,你嫌麻烦,整理需求(切分任务)这事我们做都可以,但你要“认账”。至少这些需求,你或者你指定的人,要一条一条的去看,不要凭空想个大概,三言两语打发就完事。

验收的时候,你就认认真真的验收,一项一项的,验收完了就完了,不要稀里糊涂的系统上线几个月了,这里有问题那里有毛病。我做维护这么久,接手的这些项目,哪一个不是交付上线了的?而且还是专业人士验收通过的,运行了这么多年,bug都还是一堆一堆的。你说这项目算不算“合格”?你说系统都交付验收正常运行这么多年了,哪个系统没bug呢?windows都还蓝屏呢。但按普通客户的观点,还有这么多问题,怎么能算合格呢,你得给我改,是你自己事没做好,加钱?门都没有!

所以,除非是800-1000的企业宣传网站,或者政府机关验收主要靠喝酒公关的项目,稍微复杂一点的、客户用心一点的外包项目,按项目整体报价签合同的,陷进去就是个泥潭。怎么赚钱,是八仙过海各显神通,但我看来,都没几个走正道的。我以前面试,一些非IT行业的公司,我了解他们的项目之后,就建议他们,干脆外包算了,干嘛自己招程序员,不划算啊?他们头摇得像拨浪鼓似的,“算了算了,这个当已经上过了!坑死人!”我周围接私活的朋友,是碰到肥羊就宰,碰到钉子就甩,接单的秘诀就是看这个客户“好不好说话”,想想也都是些可怜人啊!

需求

需求方的深度参与,是项目成功的前提。这是毋庸置疑的,但很遗憾,很少有人真正的足够的重视这一点。

行业外人士,上面已经很多吐槽了。就是行业内,部门与部门之间,一个项目组内部,需求分析这事,都做得不尽人意稀疏平常。我经历的,大致有这些个情形:

  • 口头交待的。通常都是其他业务部门抓壮丁,“小叶啊,我们这里要改一下。很简单,就这样,……”你要是想我当年一样,是个愣头青,相信了他说的“很简单”,到时候你就一边哭去吧!
  • 发Email之类的。这种现象外企比较多,比带个口信好一点,至少有个凭据。但稍微复杂一点的功能,一个email来来回回,扯到后面也是醉了。
  • 给需求文档。这种最正式最规范,但不要高兴得太早。因为要写个需求文档的功能,一般都是比较复杂的,三言两语是说不清楚的。所以就很容易有疏漏,得改。改来改去就出问题,Email还有一个更改记录;word文档改了就改了,到后来就忘了究竟改了些什么了。

以上这些,如果没工期要求,问题都不大,就多做点无用功而已。但哪有没工期要求的项目呢?(我的这个玩具项目,呵呵,不要求工期。)所以,扯皮的事就来了!我记得印象最深的是,有一次,deadline的前一天,我们项目经理在办公室破口大骂,“妈个逼的,现在还在改需求!我们怎么做?”但业务部门也有话说啊,“你们做之前怎么不仔细审查需求文档呢?”这中间又还夹着其他一些乱七八糟的事,官司打到上头,还是项目延期加班完事。

切割

我发现有很多程序员喜欢“捞到半截就开跑”,需求还是迷迷糊糊的时候,凭着自己的想象就开始写代码,老是做无用功。(还有更奇葩的,他自己一路狂奔九头牛都拉不回来,最后你和他说需求是怎样怎样的,他还特别不服气,觉得他做出来的效果比需求要好!按他的想法,应该改的,是需求而不是代码。)除此以外,需求常常也给得模糊有歧义,所以这个官司就有得打了。我记得有一个研究结果:日常的单向沟通,大概有80%的信息会被忽略或误解。所以需求其实也不好弄,这个我们以前提到过,使用测试化文档是一个方法。

但本文,我们主要讲责任。正如我们上文所述,鞭子还是必须的。没有监督和责任约束的制度最后肯定是一纸空文。

所以我反复的考虑,觉得还是业务部门说得更有道理一些。这就像货物交割,交货前理应由收货方进行仔细验收,货物到手之后才说我刚才没看清楚要求退货,这肯定是没道理的。对应到软件开发,如果需求方是外部客户,这就涉及到报价预算商业信誉等一系列问题;即使是内部人员,也有可能影响别人的工作安排。所以,承接任务时对需求的审查责任应该在开发人员一方。

同理,任务完成之后,验收的责任就在验收人一方。一旦任务已经被验收合格,今后就不要再说什么当时没考虑周全。

工具

既然确定了这种指导思想或制度,就需要一个顺手的工具来予以贯彻执行。我们任务管理系统的做法就是,把功能切分成一个个的任务,每个任务都有:发布 > 承接 > 验收 三个大的阶段:

  1. 发布:相当于阐述需求,但同时要指明任务的难度、工作量、完成日期等其他相关属性。
  2. 承接:开始工作,以完成任务
  3. 验收:任务完成后检查是否合格

(以下统一使用任务发布人/承接人/验收人表明相关人员,也就是责任人的身份)

在阶段与阶段交接的时候,确立相关人员的责任,具体来说:

任务一旦被承接:

  • 除非承接人同意,其发布内容就不能再更改。任务发布人就必须尽可能的认真对待需求,减少随意修改。但是,
  • 如果任务发布内容有多种合理解释,将按照有利于发布人的原则进行解释。这是不是就要求承接人在承接的时候要慎重,多考虑一下了?

任务一旦被验收:

  • 任务结束,谁都改不了。验收人甭想再回头把“合格”变成“不合格”!

换言之,这些规则就是针对的下面这样一些现象:

  1. 不认真发布需求 (人家承接了任务就不能改了哟!)
  2. 不认真审核需求 (出现分歧时按有利于需求发布方解释哟!)
  3. 不认真验收任务 (验收合格就合格了,没后悔药哟!)

通常,任务发布人就是业务部门需求方,承接人就是开发人员。但也有例外,完全可以灵活应用,比如我就让开发人员发布任务给业务人员,任务内容就是需求文档,验收人也是开发人员。所以业务人员的需求文档一样要开发人员审核验收,这样就可以提高需求文档的质量,让需求反过来配合开发。

异常处理

当然,实际工作中,事情往往没有这么简单。需求会不时更改调整,验收也会有疏漏。但正是因为如此,我们才更应该坚持本系列文章所提到的原则。

比如一个任务,需要进行调整。那么,首先看它是不是已经被人承接了?如果还没人承接,OK,随便改;如果已经被承接了,那么就必须得到承接人的许可之后才能修改。承接人的许可有以下作用:

  1. 承接人得到及时的通知。必须的!
  2. 给承接人一个机会,考量任务(需求)变动的实质是什么。究竟是新功能覆盖了旧的功能,还是在新功能的基础上添加了其他的功能,或者是两者的混合?进而采取相应的措施,比如建议新加一个任务,拆分原任务再更改等。
  3. 承接人已经付出的劳动应该得到认可。我做都开始做了,是吧?不能不算我的工作量。

任务验收也是同样的道理。干脆一些,一个任务,验收了,就完了,不要再纠缠了——哪怕以后在其基础上再发现了问题,都不能再“重开”这个任务。

这一个原则的理由很不好讲,算是一种实践体会吧!你如果硬要说,以后又出现的bug是之前一个任务带来的,逻辑上也说得过去,因为确实是他完成那次任务时提交的代码,造成了现在的这个问题。但是,当时谁都没发现啊?!很多代码其实就是这样改过来又改过去,修改代码引起复杂的连锁反应是很正常的事,不能因此就抹杀了这过程中承接人的辛勤劳动吧?这对承接人不公平。

所以,再开一个新任务吧!或者,验收时你就使劲想长远点。如果自己想不到,就不要要求别人能想到。

总结

本文花了大量的篇幅,描述项目开发中,需求从发布到实现以及验收过程中的纠结或问题,就些都是极其常见、反复出现的。看起来这是一沟通问题,很多团队也反复强调沟通,这并没有错。但如何进行有效沟通呢?就像我们说要提高效率,这当然没有错,但这个效率怎么才能提高呢?看到大家在办公室里经常吵架,就拉出去吃个饭喝喝酒消消气,其实治标不治本;就像项目延期,加班加人一样,最终效果如何,我想大家都知道。

所以,我认为,制度或者流程上的改进才是最核心的力量。而明确的责任划分,是其关键。

好像没多少人对项目管理敢兴趣啊?上一篇反响平平,码字这么多,唉……

时间: 2024-08-04 04:49:53

项目管理(二)责任划分的相关文章

软件项目管理|期末复习(二)

1.项目的定义和特征 定义: 为创建某一独特的产品或服务,在一定环境和约束条件下进行的临时性努力. 特征: 一个明确的范围和目标 一个预期完成时间 有可以利用的资源 一种已定义的性能评估方法 不是例行的任务 2.项目管理的定义 一种为高效恰当地完成某个既定的目标而对资源进行管理.分配和调度的过程. 一种为实现既定目标而对技术.人力.金融资源所进行的系统集成. 3.项目管理的内容(项目管理知识体) 范围管理:按照某个特定目标,确定和控制整个项目的过程.项目的目标和对象,确定了范围管理的基础.范围的

项目管理过程概述 - 项目管理系列文章

软件项目管理的过程比较复杂,在项目管理指南中,已经定义了十大领域,包括整体.范围.时间.成本.质量.人力资源.沟通.风险.采购.项目干系人.但是本文只讲讲软件项目管理的大概过程. 下面围绕项目管理中的五大过程组对项目管理过程进行概述. 一.开始,先要启动项目. 软件项目管理,首先要确定项目经理的权力,还有组建好项目组成员.也就是先确定人,然后再确定事.对于项目团队成员,往往是从部门内部抽调人手进行的组建.以前笔者的项目组,也是领导从部门里找来人手(有些人可能手上还有工作),组建起来的.在项目的后

那些你不知道的项目管理细节(三)

好久没来了,最近这几天项目比较忙,回家只剩学英语那么一点点时间了,所以一直都没写,今儿继续我们的项目管理细节. 第二期谈的是如何与业务方打交道,那我们今天继续往后说,把业务方的工作做完后,下面就该是研发团队的沟通工作了,在第二期的结尾我说过,研发团队是最好打交道的团队,他们就好比机器人,只要输入指令,就可以执行动作.那么一个PM唯一要做的就是输入正确的"指令". 什么是正确的"指令",我们在谈这个名词前,有做过研发leader的童鞋可以回忆一下,项目初期你们都在做些

对于未来编程的十二种预测

凝视水晶球,我们试图寻找未来五年中关于编程会发生什么,哪些会激动人心. 技术领域快速变革着,而用于构建这些技术的工具也随之不断发展.如果你不能超越当前的项目,那你就只能在兔子洞里越陷越深了. 为了帮助您呈现一个精彩的未来,我们预测了未来五年内编程领域将进行的颠覆性变革.由于我们的水晶球的主观色彩很浓,以下这些猜想也许并不是普遍适用的,还有一些或许在五年内不能完全实现.有些虽然已成为了现实,但真理的确立不是一蹴而就的. 亲爱的读者,请你快速阅读吧,因为未来将以超越我们认知的速度发展着. 1. GP

如何做好项目管理,避免“计划”和“执行”两张皮?

"凡事预则立,不预则废",对于计划的重要性,古人早有名言.然而,现代生活压力过大,很多人忽略了计划的重要性,总以"计划永远赶不上变化"."人生总是充满意外"等等借口来搪塞自己,认为"船到前头自然直",做任何事情从不制定计划,糊里糊涂,想做就做,事情自然难以取得成功. 好的计划是成功的一半.任何事情,要取得成功,离不开一个科学合理的计划.在项目管理领域中,项目计划同样扮演者非常重要的角色.好的项目计划是项目实施的前提,贯穿整个项

《程序员修炼之道》笔记(二)

第二章 注重实效的途径 1. 重复的危害 a) DRY-Don't Repeat Yourself.系统中的每一项知识都必须具有单一.无歧义.权威的表示. b) 重复是怎样发生的 Imposed Duplication强加的重复.开发者觉得他们无可选择-环境似乎要求重复. Inadvertent Duplication无意的重复.开发者没有意识到自己在重复信息. Impatient Duplication无耐心的重复.开发者偷懒,因为重复似乎更容易. Interdeveloper dumplic

网络基础 二

网络基础之子网划分 阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划分步骤 2.4 子网划分案例 2.5 划分子网注意事项 2.6 为何要子网划分及其优点 2.6.1 为什么要子网划分: 2.6.2 子网划分优点 回到顶部 一.ip地址基本知识 回到顶部 1.1 ip地址的结构和分类 根据tcp/ip协议,连接在internet上的每个设备都必须

聚类:层次聚类、基于划分的聚类(k-means)、基于密度的聚类、基于模型的聚类

一.层次聚类 1.层次聚类的原理及分类 1)层次法(Hierarchicalmethods)先计算样本之间的距离.每次将距离最近的点合并到同一个类.然后,再计算类与类之间的距离,将距离最近的类合并为一个大类.不停的合并,直到合成了一个类.其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等.比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离. 层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法(agglomerat

Dubbo分布式服务子系统的划分

一.划分子系统的策略 按照系统的业务模块的独立性划分 二.划分时服务子系统的数量的控制 过多:可能划分过细,破坏业务子系统的独立性,部署维护工作量大,独立进程占用内存多 过少:没能很好的解耦,开发维护不好分工,升级维护影响面大 三.服务子系统划分要注意的地方 3.1 不要出现A服务中的SQL需要链接查询到B服务中的表等情况,这样在A服务与B服务进行垂直拆库时就会出错       eg:服务虽然拆分了,但是还是用的同一个数据库 3.2  服务子系统间避免出现环状的依赖调用        eg:A服