英文版
2021-05-11, 周二
2000年感恩节后,我从Lattice Semiconductor跳槽去了eBay。
2000年的eBay,刚上市两年多,开发人员不多,但华人工程师不少,比如招我进eBay的Vicki(eBay的第六位软件工程师),我的老板Jim, Wenwen(eBay第三位软件工程师),Daniel和Bill……。
2002年之前eBay面向终端用户的网站软件系统是用微软的C++Visual Studio来开发和打包。因为eBay网站每周都有软件更新,而且更新涉及面很大:卖家系统、买家系统、收费系统、用户系统、客户系统、Batch Jobs……,高频率大范围的更新中难免引入只有在网站现场才会出现的新Bug。
Bug是软件系统中的一种错误,它会导致系统产生意外的结果或以非预期的方式运行。这些新Bug首先发现在eBay Live网站,那是用户进行网上买卖的实时平台。其中一些Bug还无法在QA环境中重现。
QA环境是一个内部测试环境,它复制了Live网站,但不服务于真正的客户;它是为测试而创建的,无法复制出天花乱坠的Live网站客户流程。
所以那时eBay的网站软件系统是以Debug模式打包推向终端用户,便于从Live网站的流程中迅速地找到Bug的源码位置。C++的执行文档以Debug模式打包比以Release模式打包要大好多。形象比喻,Debug模式打包就像把刚从土里拔出的菜:带土、带根、带老茎、带枯叶……体积庞大打包上架卖菜,Release模式打包就像超市里待售的菜,只留精华干净不带废物。在网站上推出Debug模式比推出Release模式,网站系统需要更大的容量。
那时,eBay权衡一个软件工程师是否有实力的不成文的潜规则之一是:入职一个月之内,在自己的计算机上调试好C++Visual Studio开发平台并能上网站现场实战重复故障查找故障原因。我在硬件公司用C++Visual Studio三年多,很熟悉这个工具。可是eBay的网络软件系统提供好多不同的链接和不同的区域,我在自己的计算机上建立开发平台过程中遇到好多问题。
调试好平台后,我觉得要在一个月里在自己的计算机上建立调试好C++开发平台几乎是不可能,如果没有Wenwen指点迷津。
WenWen是eBay的第一位华人工程师。那时我们软件工程师多在电动机楼的二层,WenWen和我坐在同一排,我坐在靠走道的位置,他坐在靠窗的位置。Wenwen和我的座位之间隔着Jim、和Heather。Jim和Vicki好像总去开会,Heather在外州远程上班,所以我常找WenWen帮忙。
Jim知道我的开发平台调试成功后就给了我一个P2Bug:“已推出的通过第三方的ID Verify流程,第三方最近突然发现没有流量从eBay进去了”。
会造成系统的一些较重大的功能失效并由此引发客户抱怨声重的Bug会被归类为P2Bug。
Jim说:“这个障碍是产品经理报出来的,QA不能在QA环境里重复这个故障,你连到网站去,按产品经理给出的步骤,想法现场重复故障,再找出原因。” 我记得ID Verify产品经理是一个华人,也叫Vicky。
从我的计算机连上eBay的网站现场,按照产品经理给的用户信息登陆后,我一步一步地慢慢地调试流程,设置了许多跟进的切入点,收集了和ID Verify有关的源码文件,又反复参考最近几周相关编码的改动版本,像大海捞针。 我终于找到了故障:原来是Daniel最近对一些编码做整体大改动,挪动一段编码时把一个位移位的操作符号(bit shift operator << ),弄成了小于符号(<),造成这个Bug。Daniel是一个开发牛人,因为eBay初期的文化之一是,在eBay软件大系统上对编码做整体改动的课题都是很牛的老板提议的,能操刀干活的人都是牛老板手下的开发牛人。
对一些编码做整体大改动就像改变一个大办公楼的电线、水管、下水道、走廊等的布局一样;执行者不仅要熟悉旧的布局,还要将新的布局整合到保留的旧结构中。这种改动包含这挪动、重做、删除等。
我给坐在我旁边的Jim看了我在网站上现场重复故障查到的编码错误处,Jim很高兴地说:“去找Bill,这周的产品推送列车长,让他把这个修补推出去。”
列车长是早期eBay独有的一个短期角色,别的公司没有。
一周一次的软件更新内容就叫一列火车。
在那一周里,负责实现这次更新的开发人员就叫列车长。2001年左右,eBay的一个列车长要管所有的系统,压力非常大,没有人愿意做。
后来,每一列火车上有几个列车长了,因为不同的系统配有不同的列车长。