內测连结发出去不到十分钟,“山里的风”就在群里发了第一条反馈。
“我登录了!我的土地上站著一只鸡!它叫大黄!”她配了一张截图。那块虚擬土地上孤零零地站著一只鸡的图標,旁边是等级进度条,lv.1,见习农场主。截图发出来之后,群里立刻热闹起来。“城市稻草人”紧接著晒出自己的徽章——灰色的,还没升级。“我是见习农场主,再认养一次是不是就能变成农场主了?”“深海鱼”更激动,她把守护者证书截图发到了朋友圈,配文“我养了一头牛的十二分之一”,底下很快有人留言问她这是什么,她一条一条地回復,像一个尽职的推销员。
“小鹿不乱撞”说:“我认养了三次,为什么徽章还是灰色的?”她连著发了好几条消息,语气有点急。“北方的狼”也在问:“等级进度条卡在99%不动了,是不是bug?”还有人反映加载慢、页面偶尔白屏、证书上的印章位置看著不舒服。
晚照把每一条用户反馈都截图存进了一个文件夹。她坐在供销社院子的长桌前,手机放在支架上,一边回消息一边记录。有用户说加载慢,她標记“性能”;有用户说徽章样式不够明显,她標记“视觉优化”;有用户说看不懂等级怎么算,她標记“引导文案”;有用户问“守护者”是什么意思,她標记“概念解释”。表格越拉越长,从几行变成十几行,又从十几行变成了二十几行。
老周端著保温杯走过来,看了一眼她的屏幕。“这么多问题?”
“都是小问题。大问题阿杰在修。”
老周点了点头,没有多问。他回到自己的工位,开始调整上线公告和营销计划。原本定在6月1日上线,他提前写了一版公告,准备了三个版本的群发文案。现在时间还没定,他不急著发,但心里已经有了数。
阿杰把內测群的聊天记录从头到尾翻了一遍。
他按优先级列了一个bug清单:徽章显示错误、等级进度条卡在99%、多订单並发导致的认养次数统计遗漏。三个高优先级。还有五个中优先级——字体大小不一致、某些机型上页面错位、证书印章位置偏移等。低优先级的先不管,不影响用户体验。
徽章显示错误修得最快。用户“小鹿不乱撞”反映自己认养了三次,徽章还是灰色的。阿杰查了半小时,发现是资料库栏位类型不匹配——认养次数存成了字符串,排序时“3”排在“12”后面,系统以为她只认养了一次。改完栏位类型,补跑了一次数据,再登录,灰色的徽章变成了铜色。“小鹿不乱撞”在群里激动地说:“有了!铜色的!谢谢!”后面跟了一长串感嘆號。阿杰没有回覆,但他嘴角动了一下。
等级进度条卡在99%的问题更隱蔽。用户“北方的狼”连续认养了三次,经验值算出来是99.6,但前端只显示整数部分。阿杰翻了一页又一页代码,最后发现是取整函数用错了——用的是向下取整,不是四捨五入。他改了渲染逻辑,保留一位小数,99.6在进度条上看起来就是100了。他在群里艾特了“北方的狼”:“已修復,麻烦重新看看。”对方发了一张截图,进度条满了,旁边多了一颗小星星。“好了,谢谢。”四个字,阿杰看了两遍。
內测第五天,阿杰发现了最严重的问题。
那天下午他在模擬高並发场景——用脚本同时发起十个认养请求,模擬用户短时间內连续下单。结果只有七个被正確计数,另外三个的认养次数没有被记录。他又试了一次,二十个请求里漏了四个。再试,五十个请求里漏了七个。
他盯著屏幕上的数据,手心冒汗。这不是什么界面偏移、字体大小的小毛病,这是核心逻辑的严重缺陷。如果上线后遇到用户集中下单,大量用户的认养次数会错乱——认养了三次只算两次,等级升不上去,徽章永远拿不到。用户的信任一旦崩塌,不是改个bug就能挽回的。
他立刻给林逸打了电话。“林哥,发现一个並发下单的严重bug。用户短时间內连续认养,系统会漏计数。需要重构订单回调逻辑,还要重新跑所有用户的认养次数。保守估计——十天。”
电话那头沉默了很久。“修。上线时间往后延。”
“那定哪天?”
“6月10日。”
阿杰掛了电话,深吸一口气,开始分析问题根源。订单创建和认养次数更新是两个异步操作,没有加锁保护。第一个请求还没完成,第二个请求就已经进来了,系统以为还是原来的认养次数,加一之后又加一,但实际上应该加二。他重新设计了回调机制,引入消息队列,確保每笔订单的状態变更都能按顺序被准確记录。然后他把所有用户的认养记录全部拉出来,从第一条到最后一条,逐条重新计算。数据量不大,但逻辑复杂,跑了整整一个通宵。
凌晨四点,老仓库的灯还亮著。二叔起来给牛添草,看到那扇窗户里的光,摇了摇头,没有去打扰。清晨七点,阿杰被窗外的鸡叫惊醒,发现自己趴在桌上,屏幕上多了一行字:“所有订单校验通过。”他揉了揉眼睛,盯著那行字看了几秒,然后靠在椅背上,长出一口气。
晚照在群里发了一条公告:“系统正在做最后优化,上线时间调整为6月10日。请大家继续反馈。”她还附了一句解释:“为了更好的体验,我们想再打磨一下。”用户们的反应比她预期的要好。“北方的狼”说“慢工出细活”,“城市稻草人”说“不差这几天”,“山里的风”说“等你们,加油”。“深海鱼”发了一个握拳的表情,说“好的东西值得等”。
小陈在群里冒了个泡:“我也在內测,我的土地上有一块豆腐,孤零零的,好可怜。”配了一张截图。晚照回他:“你可以多认养几个,土地就热闹了。”小陈说:“穷,没钱。”群里一片哈哈哈。
老周看著群里的气氛,在团队群里发了一条消息:“用户心態很好。这波延迟上线没有造成负面影响。”晚照回了一个“嗯”,阿杰没有回,他已经好几天没怎么在群里说话了。
6月5日,阿杰做完了最后一轮测试。
他在团队群里发了一张截图——屏幕上所有的测试用例都標著绿色的“通过”。並发下单场景也重新跑了一遍,一百个请求全部正確计数。晚照回了一个烟花,老周回了大拇指,小陈发了一排“牛逼”。二叔不会打字,让小陈在群里发了一句:“那个戴眼镜的后生,辛苦了。”阿杰看到这条消息,鼻子酸了一下,回了一个微笑的表情。
这天晚上,林逸一个人坐在杂物间里。他打开內测群的聊天记录,一条一条地翻。他看到“深海鱼”说“守护者证书好有仪式感”,看到“北方的狼”问“手绘图鑑什么时候出”,看到“城市稻草人”说“我每天都登录看看我的土地”,看到“山里的风”说“等你们”。他把这些消息一条一条地记在了心里,没有截图,没有存档。有些东西不需要存进文件夹,它们自己会留在那里。
他合上手机,在笔记本上写下明天的安排:上午跟老周过上线流程,下午跟晚照確认公告文案,晚上跟阿杰做最终部署检查。写完之后他合上笔记本,关了灯。窗外的风从海那边吹过来,带著初夏的暖意。他躺下来,盯著天花板上的裂缝。离6月10日,还有五天。
他闭上眼睛。那些用户说的话还在脑子里转。他想,五天之后,这些东西就不再是內测了。它们会被更多人看到,被更多人使用。会不会有新的问题?会的。但没关係。一件一件地做,一个一个地修。就像这几个月做的一样。
他在这个念头里,慢慢睡著了。