Published on

Retro 2021

前言

这篇原本想在写上一篇的时候也一并弄了。但是在写的过程中,稍微也在脑内回放当时的心境与想法,觉得还是写的有些感性了。总结的话还是尽量保持理性的情况下来完成比较好。

Table of Contents

关于上一份工作遇到的挑战与可改进点

2020 八月,新加坡 1 年多的我赶在公司发不出工资之前先加入了一个公司,并且负责开发一个房地产估价数据平台,过程中遇到了各种艰难的取舍问题让我发现到我的自身的局限,统筹规划能力还有定力还不足。
主要遇到的问题有几点:

1. 尝试超越个人人力的极限

吃下大饼并且没意识到消化不良的我一个人“身兼数职”,不止必须负责维护公司现有的所有网站、终端、办公室网络、Microsoft 365 的服务,还需要同时开发后新平台的后端与前端。 我自认为是个勇于尝试突破自我,挑战自我的人。但是急于做出一番成果尝试跨越时间成本这条线来超额完成理论上一个人不可能完成的任务。 公司里有大部分的员工年龄较大,接纳新事物的意愿与科技熟悉度也较为低。我在公司的一天里有接近一般的时间用来维护 Microsoft 365 套件以及解决公司员工终端的各种疑难杂症,开发的时间被严重挤压。 但是由于码代码对我而言算是兴趣之一,我也对下班时间为追赶进度而码代码不感到排斥。但是这样的情况长时间持续的话对个人造成的心理负担是比较大的。八个月下来,burn out 的情况也发生了两次。

2. 严重低估了产品界面的复杂度与坑的深度

当时上家其中一个业务就是房地产估值部门。为了完成工作,他们同时使用了多个产品/第三方服务,其中一个最为依赖的服务平台不止负责储存所有的估值记录、客户个资、各种元数据,也提供市场最新房地产交易记录, 以及最重要的估值报告生成服务。 担忧效率低下,客户隐私安全以及数据被盗用的他们决定开发自己的专属平台,而在面试时就被告知上述这一切内容的我就是就是他们找来的那个吃下大饼的年轻人。

当时估计如果需要导入的数据已是经过正确设计,并且已去重、正则化,开发第一版功能近似与一比一复制的系统最快需要 6 个月的工时。整个产品的核心模块基本为下(实际的设计肯定是比这里说明的还要复杂):

  1. 客户模块
  2. 房地产模块
  3. 市场交易历史模块
  4. 估值记录模块
  5. 估值模块
  6. 报告模块

而数据库设计则大约如下:

erd

基础的架构设计完成后逻辑的填充其实没有什么太大的难度,挑战在于用户界面如何能够合理地引导用户最小化地输入,并且输入正确的数据,而这也是开发最耗时的部分(~40%)。 中间有非常多的时间在和 project owner 就界面设计与界面智能程度进行"友好并愉快地交流"。界面的基础逻辑也重写了至少两次,本来就不充裕的开发时间被挤压的更加紧迫了。

3. Over-estimate engineering skill of product developed by 3rd party

第二耗时的任务就是历史数据导入。作为房地产估值公司,估值数据的完整性是非常可笑的低。各种地址缺失,错别字,质询的客户无法准确的对应,最夸张的是甚至竟然连客户都没有独立的 ID。 一方面是上家公司的员工培训不到位;一方面是他们使用的产品完成度太低,连最基本的输入验证与清洗都没有实现。 对于他人开发的产品的质量过于乐观。 图样图森破的我没有预测到会有人把数据存进数据库之前不做任何处理,数据库架构也是毫无设计:整个产品的核心数据完全没有正则化,就是一张大表。 这就造成我必须花非常多的时间成本规划如何清理与导入这些数据。反正最后一顿操作后只有百分之 40 的数据可用。而客户数据除了名字以外,基本都丢失了。

4. 长期规划与短期规划的冲突解决再到失败

现有需要适配的工具以及数据设计实在是过于糟糕,开发成本提高了不少,让我再次考虑是否要修改原本的规划:

是否应该把正确的设计暂时抛弃,并原封不动地照搬现正在使用的系统的设计,等到所有的功能都复制完毕后再来想办法 逐步地 替换掉有问题的设计 (现在想了一下,觉得逐步是不可能逐步的,一辈子都不可能逐步的。这第三方的设计根本没办法解耦,唯一的方案就是另起炉灶,按照正确的设计推出个 v2 版本)。

做计划喜欢一步到位的我,觉得替代方案太过不干脆,而且有不小的沉没成本,如果从长远来看肯定是一步到位要省时的多。 但是这样的考虑是不足够的,特别是我忽略了长周期的开发迫使现金拮据的公司继续使用第三方的服务是沉重的负担。 现在看来,选择替代方案,开发完 replica 之后让公司转移使用,并且停止使用第三方服务,缓解公司的现金流才是合理的。换句话说,buy more time 才是正确的。

5. 无效沟通造成沟通成本

在产品的开发过程中,常常遇到需要与 project owner 讨论细节与特性的情况。而我常常遇到的问题就是讨论完之后我都记在脑里, 然后按照讨论结果开发完毕后报告进度时又被质问为什么 XXX 特性是 YYY 而不是 ZZZ,周而复始。应当培养撰写文档的习惯,重要事项必须记录下来整理起来需求与系统特性也方便许多。 新加入的公司也非常强到写文档的习惯,对我而言也是一个非常好的环境逼迫自己培养随手记录或大或小之事的习惯。

上一份工作没有结论但是需要持续关注的问题

1. 论关系户的管理

话说在上面提到的项目开发周期中,我向老板提出了增加人力的要求。我的老板在 Project Owner 的“推荐”下把一个 candidate 亲属半强硬地塞进来说当我的下手, 尽管我在了解到他的技术背景只有一级短期数据科学技能培训以及不匹配的工作经验后一再强调面试者的能力不足以担任开发的的工作。奈何我的上司对技术一窍不通,不愿接受我的看法。 拖了几天后,见没办法让老板口中的"You try lah, you try first" 改成 "Ok let's get someone else"的我最后只能答应了。 Project Owner 也在新人加入的几周后要我安排把自动化估值的 modeling 交给他做。而我在了解到他的技术背景只有一级短期数据科学技能培训以及不匹配的工作经验后就认识到这是一个近乎不可能的条件, 没办法当面拒绝的我当时只能说我只能尽量配合。

显然,望子成才的 Project Owner 希望他的儿子可以透过这个 project 刷个简历逐步踏入 IT 这 21 世纪初的第二次风口。我也本着资源最大化的原则,尽可能的让他有多一些时间上手码代码的基础。 IT 设备及 Microsoft 365 服务的日常维护也手把手教学;难度较高,需要对系统理解较为深刻的任务如办公室网络的维护、数据清理等则由我处理,不定期与他同步状态, 让他逐步了解这些任务是怎么回事,该怎么定下方案(尽管我的方案大概率有很多可进步的空间 🤣)。

当他把教程看完之后,我就安排了一个根据 REST API 文档利用pydantic的能力定义各种类来序列化/反序列化服务请求与返回结果的任务。 鉴于这是他第一份技术任务,我把与留给他的工期拉长到了两周。期间也不定期地和他沟通,强调有问题的地方尽管来问我。两周后,这个任务依然不能完成。再过一段时间, 等来的是他和我说这个任务难度太高他完成不了。

既然如此,我就把他的工作中心调整到以维护为主,例如为公司的 wordpress 网站提供各种增删查改。除此之外,当新员工入职前需要准备好供其使用的电脑,格式化硬盘, 订阅并准备好 Microsoft 服务以及设置好工作需要用到的工具等工作也尽量交由他维护。遗憾的是他除了对 wordpress 的修修改改崭露出兴趣以及主观能动性以外,其他的工作他也 完成的不理想 没办法完成: 大多数他在家办公的时间都没办法联络上,手把手教的内容一点也没有学上,其他员工遇到各种电脑的疑难杂症也没办法解决等等就不一一细说了。
打从一开始就对我的上司提出明确反对的我到了这个地步也不愿意再花费精力或者更进一步的 spoonfeed 这位员工了。最后我就当作公司花钱专门请了个 wordpress 调参手吧。

现在回想起这件事,我依然没有一个很好地解决这件事情的看法。上网搜了一下其他人遇到这件事情后的解决方式也是和我最后采用的方法类似:安排一些非核心任务让他看起来不会太闲就行。 但这毕竟不是最优解,毕竟公司还是浪费了资源聘请了一个实习生就能完成的工作。 也许,这个问题本来就是无解的。现在这家公司的创始人也在他早期的微博提到对于人才的渴望预计要求是不能降低的,这可能也是公司可以发展的这么成功的原因之一。

2. 工作与生活的界限

在上家公司干活的我吃下了大饼后牺牲了很多个人的时间用来提高工作进度。这就照成了我忽略了原本就培养的习惯,(如阅读,健身)。这样的情况如果是工作内容对于个人成长有帮助的话还好,如果是帮助有限的话, 就可能是一笔不划算的投资,而且很容易造成对工作的厌倦一起 burnout 的情况发生。一旦发生厌恶/burnout,我的开发进度就会很明显地感觉到被拖慢了。而有保持健身习惯的日子里,这样的负面情绪就会排除掉, 工作热情可以保留很长时间。长期来看,劳逸结合还是非常重要的。但是如何在工作与个人生活之间划分一条线就是一个比较困难的挑战了。一个负责任的项目负责人是很难在非上班时间完全地把项目剥离生活的。 不论是吃饭、喝水、睡觉、运动,脑子里依然还在思考项目开发中遇到的各种问题以及可行的解决方案。

个人思考后觉得这个问题的根本原因在于我的工作效率不够高效,照成我需要在下班时间依然对要面对工作。如果上班时间的工作效率再高一些,可能我就可以在下班前把该烦恼,该解决的问题都思考完毕,并且投入人力, 下班后则安心地做自己想做的事情。具体的结论还是实践之后再定下吧。

家庭

因为疫情的关系,已经接近两年没回家了。纵使我再怎么不想家,心里还是觉得愧疚的。
自从爸走后,母亲心里变得更没有牵挂了。对我而言,反正事实上这个家本来就只有两个人。 今年时间允许的话会多花些时间打电话给到家里吧。

今年必须买保险了。
人寿险是否得买还没有结论。先把医药卡办了。

新公司的工作

加入了新公司几个月了,意识到自己的能力实在是不足,以前的眼界也还是太小了。代码上线的时候也比较谨慎,一个没测出来的 bug 就会对全世界的用户造成影响这种体会也是从来也没有过的。必须比以往更加地胆大心细。 在这里都强调长期规划,做到最好,可以借助这样的环境鞭挞自己不断向他人学习。

工作上有可以学习的榜样实在是太好了。

健康

发现到一天内握有大量的时间是在电脑前度过的。买了个 standing desk 及 monitor arm,使用体验非常的棒,但就不舍的花钱买椅子。今年应该会入手一张吧。