最成功的项目

  参加面试的时候经常会被问到,做过的最成功的项目是什么?一直以来,当我面对这个问题的时候,总会无所适从,往往,我会选一个做过的、个人认为技术含量较高的项目来描述。这样做的结果往往也不尽如人意(面试失败)。在度娘实习的第五个月,我对这个问题有了新的认识。

  一个关系要好的同事曾经跟我说过:“在前人优秀工作成果的基础上完成某项工作并不难,难的是把不好的事情变好。”

  从四月初开始,我开始接手一个项目,会把一些安全的优质的客服号码导入到知道里,并做成每2周定期更新的自动化工具,减少诈骗者发布虚假号码对用户的伤害。看起来,事情并不困难,也有现成的接口供调用。客服号码由其他部门提供,但是对方只提供了他们所有客服资源的地址列表,需要我自己去爬,这个也不困难。经过简单的讨论和设计,确认需求之后,我就开始了项目的开发工作。工作进展还算顺利,清明节后,项目已经基本开发完成了。之后PM提出了一些小的新的需求,也都很快满足。接下来就实施导入工作了,涉及4.5w个qb页的操作。导入中遇到了一些问题,比如进程过多,提交接口不堪重负什么的,不过顺利解决了。与此同时,出于工作的严谨性,我开发了异常处理模块,对于那些由于某些原因导入失败的问题,日志记录之后,我会根据失败日志进行第二次导入。

  导入工作完成的第二天,我惨遭用户投诉,某些号码导入错误。原因在于异常处理模块的bug,至于bug发生的原因,在之前的博客中有说过,就不细说了。总而言之,结果就是,部门举办了隆重的Case Study,用我的实际例子,提醒大家以后不要犯类似的错误,另外线上操作一定要做好验证,不能出错。到目前为止,这个项目我做的算是很失败吧。接下来的几天,我都在马不停蹄的进行“擦屁股”工作。首先是由于程序bug污染的页面,我根据错误日志都筛选出来,然后清理掉了。清理的过程中,我发现,这些问题之所以在第一次导入失败,是因为我爬下来的数据源是未去重的,重复提交问题,自然会失败。这算是这个项目中的第一坑,虽然直接原因是我程序的bug。但是这份坑爹的数据也有一定责任啊!清明节后的第一周,就在我的手忙脚乱中过去了。

  第二周的第一天,再次接到了用户的投诉,又发现几个错误的号码。我就去查原因么,发现爬下来的号码就是这个么,难道兄弟部门提供的号码是错的?带着这个疑问,我去看了下数据源xml,发现了这个项目中的第二坑。那就是众多的xml格式不统一,然后我爬数据用的脚本没有考虑到可能存在的这么些例外,导致爬下来的数据出错了。导致问题发生的直接原因么,还是我程序的bug!但是我真心觉得很冤啊。面对未知世界,我无法考虑的如此周全啊,项目一开始我的想法是多么的单纯。擦干泪水,修改掉程序的bug,又爬了一份,然后把污染掉的qb页修复。经过1天的奋斗,这批问题终于也被修复了。原本以为事情就这样结束了,但是在这批数据上线的时候,第三坑又浮现出了水面!依然是xml格式不统一,不过这个真心不赖我了,有些应该填电话号码描述的地方写成了号码,总之奇奇怪怪,什么都写。反馈给兄弟部门,对方表示这是为了线上展示“美观”。另外,偶然发现,我展示的某些号码虽然没错,但是已经过时了,不是最新的客服号码了,这显然也是不能容忍的。究其原因,某些key会有重复,而对方在使用的时候,会关闭某些过时的key以保证线上展示的是最新的号码,我由于无法获知key的开关状态,但是一定要去重,所以去重的时候,是用sort结合awk命令去重的,自然无法选择到那个唯一生效的号码。不过当晚排除掉这些有问题的key之后,还是把数据上线了。

  项目到这一步,算是基本完成需求了。但是还远不能结束啊,我需要把问题反馈给对方,毕竟按照对方提供的方法,不能正确的使用对方提供的数据源,事情还没完全做好。经过讨论,对方的PM提出了新的需求,由对方提供线上生效的号码,毕竟资源在对方这里,对方又能正确展示,何不把你们展示的号码直接给我用呢。显然对方的PM和RD也低估了这份数据源的复杂性,之后的几天,对方也不能很好的处理这些问题,最终决定还是把这项工作放在我这里来做(我一度对这种推卸责任的行为感到非常不满)。经过长时间的协商,讨论,纠结,我们定义了新的工作流程,既然大家都不能保证程序可以正确的获取号码(XML格式多变),只能放弃做成定时更新的工具,另加入人工干预,PM评估号码准确100%之后才进行之后的工作。然后对方RD也需要另外提供给我所有key的生效状态以及各资源的优先级供我使用。

  之后的工作渐渐步入正轨,对方提供给我约定好的数据,我写程序爬下所有的号码,给PM评估,发现问题,反馈,对方再提供新的数据,我继续爬号码。同时我还邀请QA同学对我写的模块进行了测试,直到QA同学表示ok。主要的工作量已经完成了,我也被安排去做了其他的项目。截止到今天为止,这个项目还没有结束。还在爬号码这个阶段进行着迭代,因为总是有新的问题涌现,归根结底是因为对方一开始工作的不规范,导致数据质量存在严重问题,由于线上一直没事,也就没人关注这些,直到我开始用这些数据,才发现了这么多问题。今天晚上下班前还刚刚就新发现的问题达成一致,面对这些所谓的坑,我也慢慢淡定了,所有的事情,都可以通过沟通来解决,大家都有共同的目的:把事情做好!

  回顾下这个项目,其实技术含量并不高,不能说做了这个项目我的技术水平精进了多少,只能说,这个项目对我来说,是个极大的锻炼。我真正尝试了一把去做一个高质量的工作,我可以自豪的说,在我离职之后,接手项目的同学,不会再犯我犯过的错误,不会再掉进曾经让我跌倒过的坑,即使出现问题,他也不会像我这样手忙脚乱。我会把我遇到的问题,都记录下来,哪里需要格外注意,也会告诉他。到这里,我想这个项目是极为成功的了:新的流程防止问题发生,严格的数据验证,经过良好测试的程序模块。我把一件不好的事情,做成了一件还算不错的事情,我做的这个项目,没有因为困难而烂尾。在这个过程中,我体会到了巨大的成就感,我坚持下来了,我为自己感到骄傲。

posted @ 2013-05-03 22:02  明之道  阅读(483)  评论(1编辑  收藏  举报