从熵增定律说起
我们知道「热力学第二定律」吧。是说热力学过程是不可逆的,孤立系统总是自发地朝着热力学平衡的方向(最大熵)演化。它也经常被表述为「熵增定律」,孤立系统的熵,永不减少。
在现实生活中,却有很多熵减的例子,这是因为一旦进行了外力干预,就不再构成「孤立系统」了,非孤立系统的熵,可以减少。比如电力运转空调,将室内温度降低。又比如人工整理书本,让它看起来更整齐。
这说明一个问题,外力干预可以扭转一个本来自然会达到的结局,并让它朝着我们期望的方向发展。对于自然现象,这是行得通的,对于软件项目也是如此。
项目失败定律
任何一个软件项目,如果外力不加干涉,就会自然的朝着(人力、时间)预算超标 的方向发展。
这不仅仅是人们的惰性使然,还跟大家对项目的预期不断抬高相关。在不同的事项中,人们总是倾向于选择投入产出比(ROI)更高的事情,这样才更划算。此外,受制于「沉没成本效应」的影响,事情一旦开始,就容易陷入不计成本得到结果的狂热中来。
在这种情况下,预算超标是一个危险的信号,不断增加的人力、时间成本,会让软件项目陷入困境。它的结果就不是那么划算了,我们是否应当尽快停下来,去做别的事情呢?
充满不确定性的脑力劳动
软件开发是一件充满不确定性的脑力劳动,它跟建筑行业施工有着本质的不同。没有人知道一个软件发布上线之后的市场反应如何,因为要做成什么样子一直存在于人们的脑袋之中。也没有人知道,在开发过程中会遇到哪些潜在的阻碍,因为所依赖的基础设施也具备一定的不稳定性(莫名其妙就出问题了)。
在这种不确定性之下完成项目,更是难上加难。我们需要用确定的(人力、时间)预算,达成一个不确定性的结果。这就得需要用科学的、先进的项目管理方法,尽量好的逼近结果(降低预期、排除不确定性、减少预算)。
科学的项目管理方法
项目管理是一门学问,它远不是成立一个项目组,然后让大家定期同步进展那么简单。诚如上文所述,它需要外力干预,才让避免本该自然发生的失败转变为成功。那么都有哪些项目管理方法呢?最近流行的 Scrum 开发模式,以及背后的 精益生产、价值流 等理念,都是非常值得学习的。能让我们用更小的成本,交付更重要的那部分内容。
除此之外,项目与产品是紧密相连的。我们交付了一个项目,但是用户却不买单。那么,即便是用了正确的方法,也是在做着错误的事情。科学的软件项目管理方式,会提前想到这一点。采用 迭代/小步快跑 的方式,并非一次性的交付最终结果,而是通过多次交付,不断逼近正确解。
结语
本系列文章,就打算跟大家探讨一下软件项目的管理方法。如何用一些科学、有效的办法,去权衡人力、时间、预期和成果。过程中会尽可能多的写一些现实开发中的例子,希望能激起共鸣,帮助大家找到适合自己的软件开发方式。