七月底接了个小活。之前一个同事介绍的,说他们那家小公司有个对账的活,每天都是Excel来、Excel去,全靠人工对着干,一天就没了,问问能不能写个工具。我当时脑子里过了一遍:读表、清洗、比对、出结果,不难。按我做测试的习惯先把边界估了一遍:行数、空值、重复、日期格式,估完报了个三千,说三天交。
现在回头看,我估的是代码,别的全没估。
第一版跑通其实不到两天。问题全在对方的表上。那个表是他们业务同事从系统里导出来,然后手工改过的。我印象最深的是身份证号那一列,pandas读进去直接变科学计数法,1.1e+17这种,后几位全成零。我第一反应是编码,查了半天,才发现是它的类型推断问题(不知道我描述清楚没有,就是它看这列长得像数字,就按数字读了,精度就没了)。加个参数、让它全按字符串读就行,两行的事。
但在对方看来,这不是两行的事,是“数据丢了”。我在群里解释了两轮,还专门截了图,把原始文件里那串数字圈出来,说明文件本身没问题、是读的时候被当成数字了。对方回了个“哦”。我当时有点想笑,又有点想骂人。
真正吃时间的是脏数据。日期列有三种写法,手机号有的带空格、有的带横杠、还有的带了+86,另外还有一格写着“待定”。我按做测试的习惯列了个清单,一条一条去问,这些算不算有效,那两个名字一样的算不算同一个人(有一对是“张伟”和“张伟 ”,后面带个空格,肉眼根本看不出来)。问了一下午,对方回我四个字:“你看着办”。
这四个字我在公司听了八年,每次听见,后面都跟着返工。
后来果然。交付前一天,他说能不能加个导出,导成财务要的那个模板。我说行。加完他说能不能先按人筛一下再导。我也说行。这两个功能我一分钱没多要,因为报价的时候写的是“一个对账工具”,边界没写清楚,这个是我的问题。
更早还有一件事。报价那天他说“就一个小工具,能不能便宜点”,我抹了五百。这五百后来变成了那两个功能,还变成我周末加了一天班。
对了,报价前我其实在备忘录里列过估算,一共五六条,其中有一条写的是“沟通 1 天”。实际沟通花了不止三天,光微信语音就听了两个小时,还没算来回解释那个科学计数法。
八月中交付,前后拖了两周多。我算了下时薪,不如在公司加班。而且交完之后还有零碎的,微信上问一句我答一句,这个根本没法计价。
所以现在再有人问我接不接,我第一句是问需求清单,不是问多少钱。钱是最后一步的事。这道理我其实早就懂,做测试的时候天天喊“需求不明确不测”,轮到自己接活,就不算了。
先这样吧,等下次真按这个报了价,再回来说有没有用。