1.2 担当责任
想必你读过前面的引言了,对吧?如果没有,赶紧翻回去读一遍,因为本书将要讲的内容,都在它塑造的情境里展开。
我曾因不负责任尝尽了苦头,所以明白尽职尽责的重要意义。
那是1979年,当时我是一家叫Teradyne的公司的“负责工程师”,所负责的软件控制着一个测量电话线路质量的小型机系统和微机系统,该系统的中央小型机通过带宽为300波特的拨号电话线与几十台控制测量硬件的外围微机连接在一起,程序是用汇编语言编写的。
我们的客户是各大电话公司的客服经理,他们每个人都负责10万条甚至更多的电话线路。我的系统负责帮助这些服务区经理抢在客户之前发现各种线路故障并及时修复。这可以减少客户投诉率,以免对此做监测的公共设施委员会相应下调电话公司收取的服务费。总之,这些系统极其重要。
每天晚上,这些系统都会运行“夜间例行程序”,即中央小型机会通知外围微机对所控制的电话线路进行检测;每天早上,中央计算机就能获取故障线路清单及其故障特征。根据这些报告,各服务区经理会安排人员修复故障,这样就不会有客户投诉了。
一次,我对几十个客户推出了一版新发布。“推出”这词可真是形象啊。我把软件写在磁带上,就把这些带子“推出”给客户了。客户载入这些磁带,然后重启系统。
这一新发布修复了几个小故障,还增加了客户要求的一项新功能。之前我们曾承诺会在截止日期之前提供那项新功能。我连夜赶工,总算在约定日期前交付了磁带。
两天后,我接到现场服务经理Tom的电话,他告诉我已经有好几个客户投诉“夜间例行程序”没能执行完成,他们没收到任何报告。我不由心头一沉:为了按时交付软件,我没测试例行程序。我测试了系统的其他大部分功能,但测试例行程序要费好几个小时,而当时我又必须交付软件。因为故障修复部分都不涉及例行程序部分的编码,所以我也没担心会有什么不妥。
收不到夜间报告,问题可就大了。修理工们会一时无事可忙但随后又要超负荷工作,而且,有些电话客户也可能会在这期间发现故障并投诉。要是弄丢一晚的数据,某一服务区经理肯定会打电话臭骂Tom。
我启动实验室系统,加载新软件,然后开始对“夜间例行程序”进行测试。几小时后,运行中断。例行程序运行失败!如果我在匆忙交付软件前对此进行测试,就不会发生服务区丢失数据的事了,服务区经理们这时也不会炮轰Tom了。
我打电话给Tom,说我能重现问题了。Tom告诉我其他大部分客户也已经打电话抱怨了,并问我什么时候能解决问题。我说我也没把握,但正在努力。同时我告诉他应该建议客户倒回去使用旧版软件。Tom发火了,说那对客户来说无疑是个双重打击,因为客户不仅为此丢失了一整个晚上的数据,而且还无法使用事先承诺的新功能。
故障排查非常困难,每次测试就要好几个小时。第一次修复失败了。第二次也没能成功。我试了好几次,等我发现问题所在时,好几天已过去了。这期间,Tom每隔几小时就打电话问我问题什么时候能解决,他还把那些服务区经理喋喋不休的抱怨如数传达给我,并一再告诉我让那些客户重新起用旧软件令他多么尴尬。
最后,我终于找出了缺陷所在,重新交付修复了问题的新程序,一切恢复正常。Tom也平静下来,不再提这段插曲,毕竟,他不是我的上司。事后,我的老板过来对我说:“你最好别再犯同样的错误。”我只能默默地点点头。
经过反省,我意识到没有对例行程序进行测试就交付软件是不负责任的。为了如期交付产品,我忽略了测试环节,整个过程中只考虑要如何保全自己的颜面,却没顾及客户和雇主的声誉。我本该早点儿担起责任,告诉Tom测试还未完成、自己不能按时交付产品。那么做绝非易事,Tom一定会不高兴,但客户不会丢失数据,客服经理也不会打电话来轰炸。