许知意把整个信息流的排序逻辑重写了一遍。从单纯按发布时间倒序,改成了基于用户关注、游戏库、互动历史等多维度的加权排序。权重最高的不是最新,是用户最可能感兴趣。
林子轩是在第二周介入的。他看到信息流的排序算法设计文档后,在文档最后加了一行字。“实时计算会导致数据库压力过大,建议用离线预计算加在线修正的混合方案。”后面附了一段伪代码,总共不到二十行,但把核心逻辑讲得清清楚楚。
前端开发照着林子轩的伪代码实现了第一版,跑起来以后发现离线预计算的数据更新太慢,用户发了新帖子要等半个小时才能出现在信息流里。林子轩看了日志,又加了一行字。“预计算频率从每小时一次改成每十五分钟一次,同时增加触发式更新,用户发布新内容后立即触发相关用户的预计算任务。”
改完以后,新帖子的出现在信息流里的延迟降到了三十秒以内。
第三周,社区改版进入内测。许知意从活跃玩家中招募了五十个内测用户,每人给了一个测试账号,要求每天使用至少一个小时,填写一份反馈问卷。
第一天的反馈来了。有人觉得信息流的内容太多太杂,有人说创作工坊的上传入口不明显,有人反映直播模块在低带宽环境下卡顿严重。许知意把每一条反馈都记录在本子上,用不同颜色的笔标注优先级。红色是阻断性问题,必须在上线前解决。黄色是体验问题,可以在上线后迭代优化。绿色是建议,不紧急。
红色标记的有七条。她把这七条分给了对应的开发和设计人员,每个人都在二十四小时内给出了解决方案。
内测第五天,一个玩家在创作工坊上传了一个《避难所》的MOD。MOD修改了游戏里的食物系统,增加了三种新作物和一个温室建筑。这个MOD不是许知意团队做的,是玩家自己做的。她看到上传记录的时候愣了几秒,然后截图发到了工作群里。
“创作工坊的第一个第三方MOD。”
陈声回了一个猫爪。孟缘回了一个字。“好。”
苏景辰回了一个句号。林子轩没有回,但他在代码仓库里发现了一个新的分支,名字叫“workshop_api”。他点开一看,是沈连河在两天前创建的,已经写好了一套完整的MOD上传和加载接口。注释写了一行。“早该做了。”
内测第十天,五十个内测用户一共上传了一百二十多个MOD和创作内容。有人做了新的角色皮肤,有人画了同人漫画,有人写了六千字的游戏背景小说。许知意把这些内容整理成了一个精选集,标题叫“玩家创造的第一个一百”。
她在精选集的开头写了一句话。“这些不是橘猫做的,是你们做的。我们只是搭了一个架子,然后你们把它变成了花园。”
内测第十四天,社区改版正式上线。
上线时间是上午十点。许知意八点就到了办公室,把最后一批bug修复的代码合并到主分支,跑了最后一轮回归测试。所有测试通过。她靠在椅背上,盯着屏幕上的部署进度条。百分之五十,百分之七十,百分之九十,百分之百。
社区首页刷新了。新的信息流,新的创作工坊,新的开发者日志模块,新的评测wiki,新的直播流。整个页面干净利落,没有弹窗,没有广告,没有花哨的动效。最上面是橘猫的logo,猫爪印旁边用很小的字写了一句话。“一个由玩家和开发者共同建造的地方。”
十点十五分,第一个玩家在创作工坊上传了一个《共火》的MOD。是一个新的前哨站皮肤,把废墟风格改成了秋天的落叶主题。许知意点了通过,在MOD页面留了一条评论。“欢迎来到花园。”
十点四十五分,开发者日志模块出现了第一篇长文。不是橘猫的自研团队写的,是一个叫“猫眼工作室”的独立开发者。他写了自己做第一款游戏的全过程,从立项到上线,一共十个月,中间崩溃过三次,想过放弃无数次。文章最后一句是。“如果不是橘猫社区有人一直在等我的游戏,我可能已经放弃了。”
陈声把这篇文章置顶了。他在置顶说明里写了一句话。“每一个开发者都值得被等待。”
晚上八点,社区当天的活跃用户突破了两万。这是旧版社区日活的三倍。许知意看到数据的时候正在吃外卖,筷子夹着一块糖醋排骨,停在半空中。她把排骨放进嘴里,嚼了两口,咽下去,然后打开社区后台,发了一条公告。
“今天,两万人来了。明天,我们争取让这两万人愿意留下来。”
公告下面第一条回复来自深海造船厂一号。“留下来。”
第二条来自一个许知意不认识的ID。“我已经把橘猫社区设成了浏览器主页。”
第三条。“不是主页,是家。”
许知意把这条回复截了图,存进了“留档”相册。她趴在桌上,把脸埋进胳膊里,肩膀抖了一下。没人看到。