风险管理,未雨绸缪——《代码之殇》读书笔记II
这次的内容主要是关于软件开发过程中的风险管理,包括项目用时估计、产品的发布与更新、承诺兑现的重要性。
①项目用时估计
有人会质疑项目用时估计的可靠性,因为就事而言,这次的任务可能和上次不一样了,开发环境也许同样发生了变更;就人而言,执行者应该比上次更有经验,完成的速度理应更快;就不确定性而言,之前遇到的麻烦事可能不会再次出现,也可能这次会遇到新的问题。
其实,这些都不重要。根据个人经验并结合作者的观点,只要是难度相当的任务,实际完成时间不会相差太远,都可以控制在时间估算的误差百分比范围内,只要开发环境没用重大的变化。不过,开发环境的改变使得你有必要去适应新的环境和新的问题,所以,实际的效率也不见得会比以往的高。至于不确定性,随机事件的总体服从均值分布,只要你自己不认为这次和上次不一样,实际花费的时间也会是差不多的。
不仅如此,正确的估算是十分必要的,它能帮助你提前发现一些风险,降低随机性的影响,同时还能给客户带来一种潜在的信任感。
②产品的发布与更新
“了解发布产品的最好途径就是早发布,常发布。要让每个程序的‘构建’都是可发布的‘构建’,每天构建,且每星期至少对整个系统重新构建一次。定期发布技术预览版及测试版。定期发布将使产品逐步更新修复。早发布,常发布,生命在于运动。”
我们开发软件不是纸上谈兵,也不是做给自己欣赏的,一款成熟的软件产品最终是要发布到市场上的,是要给用户使用的。既然如此,我们就应该严格保证每个版本,哪怕只是测试版也要是能够发布的。通过发布,才能及时得到用户们的最新反馈情况和建议,才能高效的对产品进行改进而使用户更加满意,这样产品才能逐渐成长并完善。如果花费大量时间去开发自认为满意的终极版本而在此之前从未发布,则出现问题以及不能适应用户需求的风险就大大提升了,这是我们应极力避免的。
③承诺兑现的重要性
软件工程师经常犯的错误是在遇到非人所愿的问题时延期交工。为了避免纷争,他们往往并不提及延迟的事,而是匆忙赶工,牺牲质量,草率应付计划。然而事情可能并没有想象中这样简单,因为你可能只是某条链上的一个环节,个人的延期必将使得整条链延期,结果就是招致客户的不满甚至整个产品的失败。
承诺的兑现是与他人合作的基本原则,我们不能过了承诺规定的时间而将关键性任务向后无限拖延。制定承诺的作用在于防止某些可能发生的问题,排除一些不切实的想法和“死亡进军”的可能。