前段时间我写了一篇blog,叫做《小游戏,大道理》。是关于一个叫做“ColorLinez”的小游戏的。虽 然表面上是总结的游戏策略,而我心里一直在琢磨的,还是开发管理的事情。这回《程序员》杂志向我约稿关于项目管理的经验,我就想到拿这篇文章来做基础,谈 谈我对软件开发风险管理的看法。

  这个ColorLinez,是一个非常简单的游戏。通过移动小球,连成5个以上的一排直线或斜线,就可以消去。每次移动一个小球,如果没有消球,电脑就会再向棋盘投入三个小球。等到棋盘被铺满,则游戏结束。

  令我相当沮丧的是,这么简单的一个游戏,我却始终玩不好。为什么呢?我开始带着思考去玩这个游戏,一边玩,一边总结,越是总结,就越是发现,这些道理与风险管理中的道理,大有相通之处。

  1、不要过多的猜测
  电脑每次向棋盘中投入三个颜色的小球,可能颜色相同,也可能各不相同。我们能够知道的,只有一点:下一次投向棋盘的,将是哪三个颜色的球。我们无法判断再下一次的小球,任何过多的猜测,都是错误的。

  从开发管理来说,我们能够获知的,只能是目前用户所提出的各项需求。我们无法猜测,用户下一次会提出什么需求。 也许有人会说,我们可以做计划呀,不是有“长期、中期、短期”诸如此类的计划么?问题在于,大多是开发计划,都一定会改变。越是长时段的开发计划,越是有 可能变动得面目全非。猜测和提前准备,最不坏的结果是:“做了无用功”。更糟糕的可能是:“当初花了多少时间去走的歪路,还要再花那么多时间走回来,才能 继续前进。”

  所谓“KISS”原则,讲的就是这个道理。如果有人希望通过预测需求的变动,以减小风险,那就是缘木求鱼了。

  2、过多的依赖,往往会失败。
   玩ColorLinez的时候,往往会出现环环相扣的情况,如果我能够消掉左边的红色的五个球,就能够继续消掉被红色球挡住的蓝色球,进而再消掉被蓝色球堵的黄色球......这要的局面,除非运气非常好,一般都会死得很难看。

  在源代码的层次,我们把这种情况,称之为依赖,一个函数依赖于另一个函数,一个类依赖于另一个类,一个模块依赖于另一个模块。一个项目中的代码依赖情况越是复杂混乱,这个项目失败的可能性就越大。

  再上升一层,说开发管理。当我布置一个任务给“小王”,然后这个任务其实仅仅靠“小王”并不能够完成,在我或者 知道,或者不知道的情况下,他需要寻求“小张”的部分帮助。而“小张”在这个事情上,还不能自作主张,他还要先问问“大林”对这个方案的意见。而“大林” 觉得,这个问题,最好和新来的一个做兼职的同事商量一下。而这个做兼职的同事,是通过email和我们联系的,过来一趟不容易。

  我以为这个任务的工期,是由我给“小王”布置的。到后来发现事情拖了很长时间都没有完成,才知道原来这个任务背后有这么复杂的依赖关系。正确的解决办法是,一开始就搞清楚这个任务究竟和多少人有关系?然后想办法集中起来沟通协调,然后分头进行,齐头并进。

  再上升一层来看这个问题,这其实是风险管理的一个重要组成部分。开发中的各个环节之间的依赖关系,如果过于繁杂,就会包含巨大的风险。要化解这样的风险,及时理顺关系,促进有效沟通,是非常必要的手段。

  3、要给自己留下退路
  ColorLinez的电脑算法,相当恶 毒。我猜他是这么干的,估计你的目的,然后伺机堵死。面对这种风险,你不能假设电脑是仁慈的,或者赌自己足够幸运。千万不要赌,十赌九输。正如前面所说 的,不要猜测。但是,却可以通过合理的移动,使得接下来投入棋盘的小球,总不会制造灾难。这就是留有退路。

  再说软件开发管理中的风险管理,我们无法预测需求的变动,我们能够控制的,只是这个开发团队。那么,要减小风险,其实就是两个办法:一个是上面讲的,不要给自己制造风险。另一个就是,通过合理的调度、安排,以缓冲或者规避,需求变动可能带来的风险。

  更加直接一点,就是说,在制定项目计划的时候,一定不能只做乐观估计,更不能天真的相信,一切都会顺利。必须考虑各种可能的风险,并且为这些风险,留出合理的缓冲时间和后备资源。发现一种方案行不通时,一定要尽快另谋出路。

  4、小心,再小心一些
  ColorLinez,是一个完全没有时 间限制的游戏,每一步你都可以思考无限长的时间。但是,一旦移动了小球,就无法再后悔了。往往会出现这样的情况,一步走错,满盘皆输。漏看、点错、突然的 乐观、一时兴起、思维定式等等,都会把你带向深渊。大好的局面,一下子就不可收拾了。

  软件开发管理,就更难了,一方面,工期要求向来是越快越好,容不得你拖拖拉拉,细细想来。另一方面,又和游戏一样,不能悔棋。如果公司经得起折腾、吞得下苦果、信得过你,也许会再给你一次机会。但是......很难......

  风险管理,最为重要、也是最困难的一点,是具备足够的风险意识。这个风险意识,还不是简单的,知道有多少风险, 然后就去防范它。首先要有大局观,能够常常关注全局的风险,而不是局限于自己的思维定式。要始终理性的思考和判断,而不是受一时一事的影响。要养成良好的 工作习惯,以避免忙中出错。要常常自我反省,以便更好的改进管理方法。

  总之,要慎之又慎,以免一失足成千古恨。道理就是那么简单的道理,要始终记得去防范风险,就难了。所谓知易行难,正是这个意思。

知易行难的软件开发风险管理——发表于2007-02《程序员》相关推荐

  1. 软件开发行业,年轻与大龄程序员的生存现状

    作者 | Mark Seemann 译者 | Arvin,责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 软件产业热爱年轻人,但是年长 ...

  2. 软件开发行业,年轻与大龄程序员的生存现状究竟如何?

    作者 | Mark Seemann 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 软件产业热爱年轻人,但是年长的人也有重要的意义. 我们的文化推崇年 ...

  3. 软件开发工具下载、破解-程序员专享

    1.Adobe Flash Builder 4注册下载,验证有效:http://bbs.9ria.com/thread-179762-1-1.html 由于上面网址的32位Flash Builder下 ...

  4. 软件开发、系统定制、小程序等怎么报价?

    软件开发.系统定制.小程序等怎么报价? 我写这篇文章主要不是为了打什么广告,现在都2020年了,马上2021年,不管是哪个城市, 软件外包公司数不胜数,但是至今没有一家公司能把软件开发当做像一个一个产 ...

  5. 十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)

    前言 本文主要介绍我开发的几款软件产品,大概介绍一下功能.可以让读者了解本人的开发能力,所擅长的方面.有相关开发需求可以联系作者. 本人开发软件多年,从事的行业也多种多样:自然接触了不同的业务,开发了 ...

  6. 十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)...

    十余年软件开发经历,经验总结和程序一览(涉及Socket.WPF.vc++.CAD.图像.GIS) 前言 本文主要介绍我开发的几款软件产品,大概介绍一下功能.可以让读者了解本人的开发能力,所擅长的方面 ...

  7. 人生苦短,开发用云 | 如何优雅完成程序员的侠客梦?

    作者 | 马超 来源|阿里巴巴云原生公众号 Coding 的魅力如此之强,引无数程序员竞折腰,在今年由 CSDN 举办的 1024 程序员节上,中国初代程序员大宗师求伯君说,当年看到有人在用 WPS, ...

  8. 人生苦短,开发用云-如何优雅完成程序员的侠客梦

    Coding的魅力如此之强,引无数程序员竞折腰,在今年由CSDN举办的1024程序员节上,中国初代程序员大宗师求伯君说,当年看到有人在用WPS,可开心了,因为有很多人用.然后,也会去找看是谁破解的,于 ...

  9. 计算机技术与软件专业技术资格 (水平) 考试 - 初级 程序员 - 考试用书

    计算机技术与软件专业技术资格 (水平) 考试 - 初级 程序员 - 考试用书 全国计算机技术与软件专业技术资格水平考试指定用书 1. 程序员考试大纲 1.1. 考试科目设置 (1) 计算机与软件工程基 ...

最新文章

  1. VoWi-Fi能给LTE时代的语音通信体验带来什么?
  2. DuiLib——xml节点元素属性介绍
  3. 刚安装了Fedora32,尝尝鲜~,哈哈~~~
  4. mysql导入sas文件夹_MYSQL导出HTML格式数据如何导入到SAS中
  5. 自由自在公司进口食品呈现高端消费的趋势
  6. 【JSP】JSP的四种作用域
  7. java c 简单例子_通过一个简单的例子来理解C语言中的LAPACK调用
  8. Gradle体验/第一篇:下装、安装、配置、体验
  9. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
  10. Java程序员面试简历模板(30套简历模板+300套简历)
  11. c语言安卓图形库cairo,Cairo图形库编辑指南——介绍
  12. 地图切图 java_多任务切图 | SuperMap iDesktop Java
  13. 升级Cloudera Manager 5 到最新版本(官方文档翻译)
  14. 测试网速_Azure AWS Google Cloud服务网速及Ping值延时在线测试
  15. python飞信api_使用python移动飞信模块发送短信
  16. 几个有意思的逻辑数学题
  17. 关于多个Jenkins实例共享同一个工作目录的问题
  18. Git - 时光机穿梭
  19. 简单理解2台主机数据通信过程
  20. 防骗指南-披着交友恋爱的外衣,诱骗受害者赌博转钱

热门文章

  1. vscode 连接夜神模拟器 运行 react native项目 (很简单的方法)
  2. Android手机可能是摩托罗拉的最后机会!!!
  3. Centos网络编程之tcp十一种状态及问题处理办法
  4. 科大讯飞 笔试题2021.8.15 Java版
  5. java视频监控切换软件
  6. 索尼黑卡RX10系列对比,RX10 M1\M2\M3\M4
  7. Hbuilder X 前端获取后端数据
  8. Mac下配置Apache服务器
  9. PT2272-M4--4键无线遥控器(STM32)
  10. 最基础、最全面的iOS面试题目