可能是因为软件工程,或者是面向对象技术的原因,搞软件的人都喜欢说隐喻。
以前一直信奉教科书说的,与软件项目最相似的就是建筑项目。这是一种隐喻。貌似很合理的隐喻。实际上,是这样吗?
最近问LR同学,同样的团队,用同样的管理方式,开发同样的一个项目,能够保证100%成功吗?LR同学毫不质疑的说,只要环境一样,肯定可以成功!这个结论,如果从建筑项目的角度来考虑,人员到位,资金到位,物资到位,工具到位,图纸到位,政策到位……这个房子肯定可以修起来,这条路也肯定可以铺出来。但是,对于软件项目来讲,我们往往不能得到较高的成功率,有些时候,甚至连50%的成功率都很困难。
这里面出了什么问题呢?
我的结论是,隐喻错误,造成了错误的导向。
从项目管理来讲,是为目标进行管理的。有些时候是为了最终目标,有些时候是为了阶段性目标。不管是过程中的,还是最终的,我们的目标都是:看到了几层楼,看到了封顶,看到了几米路。实际上,软件项目很多时候并不是通过这种方式进行发展的。
那么,用什么方式作为隐喻最恰当呢?我认为是,棋局!特别是围棋。
首先,我们来讲棋局。对弈来讲,至少是两方的,软件项目也同样是。一方是客户(或假想客户)或甲方,另一方是软件项目团队。
其次,对于棋局来讲,通常是有双方认可的规则的。如果双方没有认可规则,那么,作为乙方,你就很难取胜。软件开发通常来讲,是有规则的,比如说需求概要、任务和职责,这点,从建筑上来讲,可能就比较罕见,但软件项目则并不罕见。外行干预内行,甲方干预乙方的事情,相信每个做了一段时间的软件从业人员都遇到过。简单的规则,演变出复杂的棋局,像围棋中说的"千古无同局"。其实也是同样的道理,任何两个软件项目从来就不可能是相同的。
在其次,作为对弈者,你所能掌握的棋子是已经定义好的。就如同项目经理能掌控的团队,如果把队员看作棋子,是相对稳定的。
从对弈过程来讲,你需要做全盘的考虑,如布局、中盘、尾盘、收官、劫争、点空等。这些如同你开始做的评估、计划、风险管理、冲突管理、成本管理、进度控制等。你不但需要考虑对方的思路,做预先的准备,如遇到突发局面,需要做到随机应变;同时需要考虑自己如何发挥自己棋子的最大效率。如果你能够"借势",利用对方棋子完成自己的计划,那么,就能够更好的接近胜利。
再说的更明白一点,对弈的目的是为了取得胜利或者得到提高,那么你真正能够掌控的,就是你自己的资源。如果说是人力资源,那么就是需要充分发挥所有队员的作用。这点,是符合管理思想的。而不是说像建筑项目那样,只要安排了岗位就完成了部署,把管理的过程交给其他的管理理论来处理。如果想获得胜利,前提是必须要明确规则,其次是需要具备基本的资源和资源调度能力。做一些驾轻就熟的项目成功率较高,就类似于找了一个级别不如你的对手按照既定的规则下棋;而做一些风险较大的项目,就等于用了一套不熟悉的规则或者找了一个棋力不低于你的对手,如果棋路和规则应用得当,是有胜出的希望的;而如果你找了一个棋力远远超过你的棋手,就等同于找了一个完全超出你团队能力的项目,这就意味着必输无疑。
不需要疑惑这样的隐喻是否得当?不要求得到共鸣,只希望上面的这些对你有帮助或有感悟。
当然,人生如棋局。你也可以用这样的思维考虑其他的事情。因为,管理不是科学,而是一门哲学,我是这么认为的。