盘点我这两年的成与败

题记

在大公司,要做一件事情,会很慢——从POC、资源协调到具体实施都要按部就班,连组织个会议都要提前1、2天甚至更长时间预定好会议室,通知到干系人请他们安排好工作,留好时间。在这种环境里,我执拗地认为做事情可以更快一点,早一点出成果就领先别人一步,抱着这个念头,我一直想去所谓的小公司去敏捷一把。然而真的到了小公司,却发现团队不是自己想象的那个团队,这才发现自己非但快不起来,连能否做下去的能力都未必有。

9年测试与开发

我06年一毕业就开始做自动化测试开发,然后是业务功能测试、性能测试、容量测试、持续集成等等。后来就升做管理,因为我比较善于分层组织用人和授权,四五十人的团队一样轻松轮转。因为团队大,重复性工作就会很多,无论是管理上还是一线的工作,于是利用比较闲的契机偷空写了个系统。在内网肆无忌惮地爬取(也有很多开放的接口)从基础架构到业务需求、测试用例、缺陷和版本发布情况、线上缺陷等各方面的数据,用以透视分析和组织工作,来完善资源调配和工作管理策略。这样一来我就更闲了,除了例行的日常管理和考核等工作,几乎变成了这个系统的专职开发和运维……就这样杂活干了9年。

如此慢慢地感觉到自己技术不够用了,这个系统的设计不合理了,也换过框架、做过重构,但是总觉得差那么点意思。一个偶然的机会,听到一个师兄在做一个智能运维产品的开发,就去打听了一下。跟Q总简单聊了一下,他觉得我是老司机,对公司整个流程和基础架构很了解,而我对他画的饼也很感兴趣,跟我此前做的基于规则和数学模型做预测的事情很像,只不过我之前的做法离产品化差的太远。于是我就放弃了我那已有50多人的团队,转岗加入了这个产品团队,从2016年年初起,回归一线重新开始了为期一年的技术名词修炼之旅。

临行前(只是楼上楼下之隔),我推荐了两位分组经理候选人,把那个庞大的团队一分为二,交给他们打理去了,所幸他们都通过了面试,成功接手。其实换个角度想想,在大公司,只要不是太蠢,有个3、5年的修炼,都能带好团队,当然,我们团队没有蠢人,说到这,不得不惊叹于我们的人力招聘评估体系、能力和培训体系。至于带团队,要做的事情基本一致,所不同的是如何在团队内实现自己与众不同的想法而已,这一点我自认做的还不错——当然,你的想法也可以没有任何与众不同,只要保证团队高效地完成任务,不负奖金即可。

测试转开发,从架构做起?

来到新团队,因为回到一线做事,感觉工作单纯多了,所打交道基本全都是为了解决设备资源和技术问题,再也不像带团队的时候如何争争争、证证证的,还是比较开心的,所做之事简单总结了一下:

  • 刚到的时候就受命琢磨产品的整体技术架构问题,估算了下将来可能面对的数据容量,发现数据总线和消息服务是肯定要换的。接着就协商着把ActiveMQ换成了kafka,容量和业务扩展灵活度都能得到提高;因为同步效率问题,在资深大码神的强烈吐槽之下,把最初使用ehcache的方案换成了使用redis的;比对了dbcp、c3p0等这一堆劳什子之后,把druid换成了hikariCP;把数据总线拆出一个前置的分布式计算模块,置于各个网域出口,用作预处理agent发送的指标数据。总之,这段时间读了大量的文档和wiki,的确了解了不少技术栈的名词。最后简单benchmark了一把,改造之后的后台架构能扛得住我们最初定的每天50G(deflate2压缩)的纯文本指标数据的目标,HBase每天归档结果数据近1T,并且实时指标数据和计算的结果数据从产生到前端展示延迟不超过90秒。

  • 完成所有应用模块的HA和Cluster搭建,借机好好学习了一把Keepalived和HAProxy。最开始是配合mariadb的Gelara Cluster,加上HAProxy。然后是最初使用的ActiveMQ,我去查了一堆资料用HAProxy和Keepalived做了一套兼顾HA和Cluster的方案,还写了很详尽的文档,不过后来换成kafka的时候我一点都不觉得可惜。最后是部署在tomcat容器上的应用,数据流量较小的查询展示模块、agent管理模块等,都上的是F5;而数据流量很大的数据总线模块、总线前置模块,还是使用HAProxy和Keepalived——F5是共用资源,不敢造次。

  • 基础架构资源使用规划和容量计算,虚拟机管理,平安云上的虚拟机当时可谓是资源充足,在不同的网域都留下过我罪恶的黑手。虽然虚拟机够用,不过我们也遭遇过被平安云项目运维坑的事情,好几次activeMQ堵塞查到最后都是因为他们在限IOPS,好几次数据展示延迟也是因为他们在做网卡流量控制。经过几次斗争之后,终于把我们的机器都加到限制的例外名单了,当然我们也出具了我们给出的不会无限消耗资源的计算证明和保证。在这个过程中,我几乎快要学会了手动Linux运维。

  • 作为面试官招进来两个资深开发工程师,其中有一个点评挖来的,整天跟我撕逼,他嫌弃我我基础弱,连commons-utils里面的API不会用,只会自己在那里傻写if (null == xx || xx.isEmpty() ),我看不上他“先做了以后再优化”的态度和一个劲的“我写的?不可能有问题!”,你跟我一个测试汪出身的说这话?写到这里我自己都想笑,画面感很强有木有?不过总的来说这俩个人能力还是得到团队的认可的。

大半年过后,项目和团队都步入正轨,工作开展变得有条不紊起来。慢慢地大家开始想着把以前刨的坑都要埋了。搭自己的maven仓库、做自动化测试(这个团队没有专职测试)、持续交付、将SVN换成gitlab、引入springcloud做服务治理等等。这个时候,我需要从IA(infrastructure architecture)向AA(application architecture)转变,这个挑战有点大,因为我当时还不具备这个能力。我现在极其后悔自己当时没有去尝试,因为从测试转做IA也不是一帆风顺,我照样扛了过去,而且在这里,原本我可以转型到devops的路上,可是我也没有去尝试。

除了产品本身的前途之外,这个团队已经越来越像一个小的精英团队了,我一直希望能够在这样的团队里面工作,主要是能学到的东西很多。可是实际情况是,压力略大,我也是个悲观的人,觉得学习能力已经跟不上年轻人了。加上那段时间我们家小盆友刚出生,每夜里喂奶都是我的活,而且这小子事儿还贼多,常跑医院。作为一个卢瑟,我总结了一下,是我自己虚了,萌生了退意,其实再咬咬牙,也许就扛过去了。

平台落差

开篇提到的那一执念:想去小公司试一下——让我在没有理智的思考的情况下,觉得自己在这个团队里面的作用是不是已经发挥的差不多了?觉得再不出去是不是以后再想出去就没人要了?觉得是不是该做一个选择的时候了?然后我就离开了工作9年半的公司,去了一个国资的证券公司,降薪。

面对国资企业讳莫如深的职级、职称、职位体系和薪酬体系,我信息搜集的不够全面。正当我准备挂着测试经理的头衔去施展一番的时候,发现有几个连基础的技术都不懂、甚至连简单的sql语句都写不顺溜的高级测试经理在那儿摆着。而且,都比较能说会道,很会坚持自己的观点,挣扎了半年之后,我发现势不可逆,决定离开。这半年,但从薪酬上来看,相对于之前的东家,我税后亏损十几万,呵呵,此后我发誓终生不入国资系。

我一边后悔自己当初的草率和功课不足,一面积极地寻求新的机会。因缘际会之下来到我现在的公司,一家民营小企业,创业团队和主要的客户都是来自中原地区。相比前一家券商而言,在这里我有一只十几人的团队,挂着部门经理的职衔,主管测试、配置管理和质量体系建设,看起来自由度还是很高的,因为毕竟是部门一把手。与以往的履历不同,这次面试过程中被邀请(要求吧其实)来公司考察2天再做决定。我这两天下来一看,感觉还行,只是工作模式大抵是小作坊模式,随着团队扩张可能会运转不灵。所以我在接受offer之前就提供了一个初步的解决方案和建议书,可因为老板毕竟不是IT出身,其实我不确定她到底是否看懂了我要说的核心是什么。

早在2016年9月,我卖掉了之前的房子,返租一年,置换了一套差不多大小的中外环之间的房子,2017年9月9号,我搬入新买的房子,11号到新公司履职,离家很近。

新公司老干部比较多,新员工也很多,两个核心的产品除了长相略丑之外,利润还是能够支撑公司的正常运作和发展的,筹划2018年启动上市进程,听起来感觉还是很值得期待的。公司的IT开发模式是典型的一环等一环,相当的瀑布,但是瀑布的规矩也会经常被破坏。来到这里之后我除了在谋划招聘得力的帮手之外,就是暗中观察各种关系,听到过无数水土不服而死的空降兵案例之后,我决定慢慢下手,搜集各种问题和相互冲突的观念。

诚如开篇所言:真的到了小公司,却发现团队不是自己想象的那个团队,这才发现自己非但快不起来,连能否做下去的能力都未必有。公司创立15年,在当今IT行业这个普遍的技术和治理水平来看,能维持15年的小作坊模式说明固有的观念和文化是多么的根深蒂固。我深知要改变哪怕是一点点,都不是我一个人、几句话能完成的。我一边安排质量技术体系建设,一边规划新的SEPG流程,将部门划分为质量技术组和产品测试组,准备通过对部属的影响来推动整个开发过程的改善。可能你会问,为什么不直接转型做敏捷?我觉得如果连做CMMI-3的能力都达不到,做敏捷可能会更糟糕,这直接体现在大家在不断地破坏规则、信息不对称、沟通不畅、推卸责任等。比如,到现在为止,产品需求全凭纸质单据签字认可,开发周期大半的时间全都因为产品经理不懂产品如何运作在需求环节耽搁;开发没有单测、没有集成,也谢绝测试同事去开发本机环境提前测试;测试的同事不愿意去testlink做版本和测试用例管理,数据全在excel通过线下手工搜集;上线之前没有回归测试;版本发布在任何工作时间都可以随意进行;考核权重有1/3的加班时间,其余指标能够量化的部分基本不面向结果而是面向“代码行数”这种过程数据。

老板前几天找我聊天,表示她当初对我的预期是在4个月之内见到我把这个团队和这个开发效率能够提升起来。好吧,姑且不说面试时是另一种说法,就当下的处境来看,我的确是无法做到的。反思一下,策略也许是错了,沟通肯定是不够的,说服并争取逐个部门逐个领导的支持这件事上肯定是没到位。至此,我当前的这份履历在扉页上就已经有所磨损,但是,只要我还是可以试试继续往下推进,我就必须继续努力。因为没有努力过就不会知道自己会不会绝望,没有绝望之前再次选择仓促跳槽,无疑是又往自己的履历上抹黑。我会再次绝望吗?期待2018年的结果!

我的乒乓,我的组合技

作为一个直板乒乓球爱好者,我发球不错、搓摆功夫凑合,推挡、横打还行,正手攻球和弧圈甚至挑打也还行,看起技术还是比较全面的,理论知识也比一般野路子要丰富。然而比赛的时候输球是大多数,在浦东的业余里面最多属于B-、C+的水平,这个我B+甚至A-级的基本功可并不匹配。其实总结起来就是技术组合和套路修炼不够导致技术发挥不出,实战经验不够导致心理素质不行。

作为一个全流程方方面面都懂一点的测试汪,在当前这个工作里面为什么没能达到老板的预期?我觉得情况有点类似,没有能够充分整合好资源来规划策略,调整好心态来应对冲突和变化。那么不妨勤奋一点?多看多练!多参与比赛交流!也许我该收起我那套“我不希望看到我的团队加班”的清高理论了。要成事,先保证自己能够站得住,而不是一上来就考虑部属的情感,也许他们并不领情,只是觉得你是虚有其表,夸夸其谈而已。

这里,毕竟,不是大厂,人们都很单纯!

这两年,我败了,失败在毁了一份看起来并不值钱但是比较干净的履历!

这两年,我成了,成功于看到了自己真正的不足,不在技术,而在不够坚韧!

posted @ 2018-01-03 17:37 槽神刘叫兽 阅读(...) 评论(...) 编辑 收藏