在软件工程中,最重要的因素是人。要确保软件项目的成功,最重要的是合适的团队成员以合适的工作方式开展工作。这两句话听上去都不错,可以作为一个原则,但是还无法成为可操作的指令。

工作方式是可以指定的,而合适的团队成员则需要合适的领导者来甄选。这里不谈人的问题,只谈工作方式。

在传统的成熟的行业,早就形成了一些固定的工作方式。例如外科手术,主刀医生会确定手术方案,会安排同行医生会诊疑难问题,会有辅助的医生(麻醉师)完成一些任务,会有护士在合适的时间递送手术刀止血钳,会有相关人员监控手术病人的各项身体指标。手术的成功与否需要整个团队的分工合作,但最关键的是主刀医生的手术方案。

我曾经参与过不少软件项目的开发,也遇见过各种各样的工作方式。但很少有值得肯定的。有些是没有合适的主刀医生,有些是团队成员无法各司其职,有些是一个团队中有多个主刀医生。很少有见到像外科手术那样井然有序的工作。软件业真的是个不成熟的行业。

在前面说的几个问题中,前两个都与人本身有关,那没有任何可操作性的指令。我比较针对的是一个团队中有多个主刀医生的情况,因为这是可以避免的。

当一个团队中有多个主刀医生会出现什么状况应该不用多说了。理想的目标很美好,可实际的过程中充满了各种妥协的方案,鸡同鸭讲的交流,低效的产出。妥协是因为责任不明确,没有主导权和主要责任,鸡同鸭讲是因为各种术语,技术理解和技术水平存在差异,低效的产出是因为无法快速形成解决方案和后续的随需应变。如果主刀医生不合格,那比没有方案还糟糕;如果主刀医生已经被手术实践证明,应该让他来主导手术的进行。

通常非专业的人都不敢干涉一个专业的手术。可是软件项目不是这样。因为没有人会当场死在手术台上。