上个月项目复盘,个人个人我盯着那页“延期两周”的查漏材料记录看了很久。不是洞补短板别人的问题,是剖析我自己漏了一个接口的异常处理逻辑,测试环境没暴露,个人个人生产环境一跑就炸。查漏材料这事让我不得不坐下来,洞补短板把自己拆开看看,剖析到底哪儿松了螺丝。个人个人
最明显的查漏材料是“想当然”这个毛病。写代码时总假设上游数据是洞补短板干净的,接口返回是剖析稳定的。那次就是个人个人,对方传了个空数组,查漏材料我代码里直接取下标,洞补短板崩了。回头翻代码,注释还写着“默认非空”。这种假设不是第一次了,去年做报表导出也犯过,当时是假设用户不会选超过一年的时间范围,结果有人选了三年,内存直接爆掉。两次事故,同一个根:用理想情况代替边界检查。说白了,就是懒,懒得写防御性代码,懒得想“万一呢”。
再往下挖,是学习上的偏食。新技术出来,我总先看它能干什么酷炫的事,跳过它不能干什么。比如用Redis做缓存,文档里“持久化配置”那章我翻得飞快,觉得用不上。直到有次机房断电,缓存全丢,数据库被打穿。后来补课才知道,RDB和AOF的取舍、fsync策略,这些“无聊”的部分才是保命的。我发现自己对“怎么用”很积极,对“怎么坏”很回避。这跟看说明书只看功能页,不看警告页一个道理。
还有个问题,是沟通上的“我以为”。有次需求评审,产品说“用户列表要支持筛选”,我点头就回去写了。做完演示,人家说“我要的是多条件组合筛选,不是单字段”。我当时有点火,觉得没说清楚。但回头听录音,人家确实提了“组合”两个字,是我自己脑补成了单字段。这种“选择性接收”很要命,因为事后复盘时,我第一反应总是“他没说”,而不是“我没问”。现在我会逼自己在评审结束时,用自己的话复述一遍需求,让对方确认。笨办法,但管用。
时间管理上也有漏洞。我习惯把任务排满,不留缓冲。一旦有个bug卡住,后面全乱。上个月就是,修那个空数组问题花了半天,导致原定的代码review没做,又埋了新雷。后来我试着每天只排六小时任务,留两小时给意外。刚开始不习惯,觉得浪费。但两周下来,反而能按时下班了,因为不再用加班补白天的坑。
这些短板,单个看都不致命,但凑在一起,就成了“延期两周”的导火索。补法也简单:写代码前先列边界条件,学新东西先看限制章节,沟通完复述确认,排期留20%缓冲。没什么高深的,就是跟自己较劲,把“想当然”改成“先验证”。
昨天又遇到一个类似场景,上游传了个null,我下意识写了判空。同事路过说“这不用吧,肯定有值”。我笑了笑,没说话。有些亏,吃一次就够了。