在美团没按期交付,导致被劝退
总结:菜 菜就多练
原因
接了一个需求,就返工一个需求; 多次连续的返工,导致项目延期; 连着延期了5次!!!!!!
第一次延期:换负责人了
在我们开发的时候,有一个需求文档A。里面详细描述了如何进行操作。
- 使用if的方式进行判空
- 做好测试
干了2个月,美团给我安排了一个主R。
主R就更新了需求文档B:
- 我们使用java8提供的高级判空方式进行判空
- 所有方式必须要埋点
- 函数名必须以XX开头,XX结尾
- 所有变更必须添加注释
- 做好测试
我们:????????????????
- 本来项目就delay,就在延期
- 你们不仅没有减少流程,反而加需求?
然后我就质问主R:你到底怎么想的。 主R表示:我们后期要维护的。
- 在维护的考虑来说,埋点是必须要做的,否则难以监控,这是合理的需求
- 至于注释,那也是为了后来的人来更好的维护一个项目,是合理的
- 至于替换实现方式,是减少重复代码,这是合理的
- 至于函数名,统一函数名也可以降低维护的成本。
在主R的带领下,喜提100%延期。
返工3次。完成。
第一次延期:没有测试的美团
在美团,非核心需求不测试,开发自测后就上线
我们是实习生,只能接到非核心的需求,于是就得自己想办法找到测试数据去测试。
- 开发功能占30%
- 测试占30%
- 注释文档占工作量的20%
- 上线占20%
开发的时间,只占到总时间30%不到……写100行的代码,需要整理150行的测试数据。 你说产出能快到哪里去,他根本就快不起来。
第二次延期:线上事故延期
在升级的时候,发现了一个非常核心的故障点:兼容性。
这是个兼容性升级,我们要测试兼容性。双侧。
- 我们需要测试老链路走通
- 我们也需要测试新链路走通
但是有个链路非常不好测试:Kafka。
8行代码,测试了整整7天!!
我这边哼哧哼哧德尔测试呢,领导问:为什么还没上线? 我:立刻上线!! 不就是7行代码嘛,上就上,怕个鬼。 喜提线上事故。
然后又花了2天的时间写COE复盘。
9天的时间就这么飞走了。
后端返工3次,终于解决。
第三次延期:产品同意了,主R不同意
美团是一家有大体量的公司,每秒几百万的并发量。数据量极大。 我接手的第一个需求,是:查询一个列表,参数:几万。
类似:getVipUserById(List userIds) 我需要传入几万个参数进去,返回符合条件的用户。
我和前端沟通了,前端表示:这个接口可太好了,我立刻接入。
但是主R表示:慢。
有人说:这不简单,写个缓存,加个布隆过滤器,分分钟性能上天。 美团嫌弃慢。 加索引啊,毫秒级。 美团仍然嫌弃慢 多线程啊,你不懂? 美团仍然嫌弃慢。
我查询几万条数据,要求0.5秒内给我搞定,还不能拖垮数据库,还不能有缓存不一致。 那怎么办?不办。
后来主R表示:需要基于业务来解。 getVipUserById(List userIds) getVipUserById(List userIds, List cityIds)
- 假如用户传入了自己所属的城市,那就以城市维度来解
- 假如用户没有传入自己所属的城市,那就调用普通接口
- 假如用户传入了账号信息,那就查询账号信息下面有没有城市信息
我:主R英明!!! 主R:那你就和前端说吧,让前端加个字段。
前端:??????????????????????????
你后端性能有问题,要求前端传入参数给你解决????????
我也觉得委屈啊,但是问题是,加索引 + 加缓存 + 加多线程都解决不了,只能苦一苦前端了。 我就:主R说的,他按着我的脑袋让我改,我也没有办法。
前端同学:我不知道后端逻辑,我没有这个参数。 我:?????????????
最后的结果:前端返工4次,我返工3次,终于解决了这个问题。
第四次延期:框架不适配,导致延期
在Spring4.0里面,引入了一个新的功能:版本号控制。
而美团就不一样了:美团自研了一个版本号控制的框架。 他有这么几个特性:
- 后端配置完成后,需要在前端进行同名配置
- 依赖Spring的生命周期管理
- 多线程不安全
- 不能嵌套调用
而我接手的这个需求,连着踩:
- 只在后端配置了,前端没配置,报错,排查了整整2天
- 没有使用Spring的切面代理,报错,排查2天
- 多线程不安全,排查5天
- 日志被嵌套调用,3天
我XX的内心比日了狗还日了狗。 除非有开发愿意手把手的带你,帮你踩完坑,否则根本就搞不定这个框架!!!
在我把坑都踩完了以后,终于在几万字文档的犄角旮旯里面,找到了警告,这些都是特性!!!!
框架锁死了多线程不安全 + 不能嵌套调用,是你业务非要多线程 + 嵌套调用的。
返工整整12次!!!!!!!!!
能不能不用这个框架??
我实在没辙了,就和主R讨论:能不能不用这个框架了?这个框架他各种问题。
主R表示:要规范,要是每个人都自己实现一套逻辑,代码早就没法维护了。你必须用这个多线程不安全 + 不能嵌套调用的逻辑!!
然后我就按着脑袋,写了整整300行的兼容性代码。
-
我的业务只有不到200行
-
为了兼容这个框架,我写了业务代码200行 + 兼容代码300行 + 返工12次 + 排查整整14天
我好想让导师手把手的喂我怎么写啊,这样我两天就写完了。但是我非要自己想办法解决,解决了工期也delay了。
设计模式的荼毒
我在写完代码以后,代码里面有重复的几行。 有多少行呢?12行重复的。重复了2次。
然后我提交了以后,主R跟踩了猫尾巴一样,要求我去重。必须实现抽象。
我说:不好抽象啊。 他说:把返回值封装为业务异常,然后捕获业务异常实现抽象!!!
我:???这合理嘛? 他:合理。 我:主R英明。还有一个问题:我多线程框架重复了,我把多线程框架抽象出来,然后实现一个Function
然后怎么办,重构吧。
第二个问题就是:哥们,你是不是不知道什么叫领域层、什么叫接口层、什么叫基础设施层,什么叫common层? 你在领域层写了太多复杂的代码,其中可以抽象的,应该放在基础设施层!!!
我懂我懂,我没有接触DDD,是我太唐突了,我回去学习:
- 调用一个方法,要先实现RPC
- RPC完成以后,实现一个限流层
- 限流层调用成功以后,实现一个基础设施层
- 在领域层实现业务代码
- 最后,将方法放在接口层
我写代码的时候,要将合适的方法放在合适的层,不能全家桶。要将合适的借口放在合适的微服务里面,不能越权。
然后就是方法名,你的方法名有问题,你应该以XX开头,XX结尾,修改标签的接口应该以Info结束,而且定义对象也有问题:你不要自定义枚举,然后基于枚举进行映射。当然你也要考虑扩展性……
我:??????????不同的业务不应该新建一个接口嘛?为啥要扩展?要实现万能接口?
上线回滚
美团有3端:M端,B端和C端,其中M端和B端用一套代码,但是权限控制不一样。
而我在配置网关的时候,连着踩了好几个坑。
网关踩了3次,权控踩了2次。
故事的结束
然后领导就找我聊天了,核心问题在这:
- 你产出有点低,加班也很多,我自己看了都难受
- 你是不是有点太自我了,听不进别人的建议?
但是问题是:我需求都是按着头硬改的啊。主R让我改我就改,让我沟通前端就沟通前端,让我干啥我就干啥;框架出现了各种问题我就排查各种问题,让我去重我就去重。
参考同事的代码,我怎么没参考?我天天参考啊。
领导就问了:那其他同事怎么就没这个问题? 我没法解释。
大型项目必须口口相传啊
这么说吧:大型项目他必须口口相传啊,必须导师手把手的带。不要动脑子。
业务复杂又诡异,有大量特殊而且难以维护的逻辑,使用了大量自研框架,封装了大量让人目眩的黑科技。 而刚入职的实习生要在不清楚框架、不了解业务的情况下从0开始,唯一的解决方案就是抄 当工作了一段时间以后,才能脱离抄的窘境。
