在美团没按期交付,导致被劝退

总结:菜 菜就多练

原因

接了一个需求,就返工一个需求; 多次连续的返工,导致项目延期; 连着延期了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开始,唯一的解决方案就是 当工作了一段时间以后,才能脱离抄的窘境。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
青碧凝霜
下载 APP