第 6 章

第一波浪潮

朱文佳最后一次调整推荐页的排序权重,是在一个没有会议记录的下午。他把“完播率”的系数往上拨了零点三,手指在键盘上停了两秒,又退回去,改成零点二五。窗外是海淀四月的光,杨絮飘得像某种被算法忽略的噪声。他盯着屏幕上的预览界面,一个女孩在对口型唱歌,十五秒,背景是宿舍床帘。画面切到下一帧,一个男生把矿泉水瓶抛起来,慢动作,配乐是当时最热的那首电音。再下一帧,一只猫从沙发靠背上滑下去。朱文佳看着这三条并排的预览,忽然觉得它们像三张不同人的身份证照片,被压在同一张表格里,而他是那个负责盖章的人。

抖音上线那天,团队没有庆祝。张一鸣在群里发了一条消息,说“先跑数据”。梁汝波把这条消息截图发给了运营组,配了一个字:“干。”运营组的工位在办公室最里面,紧挨着服务器机柜,空调常年设在十八度,有人披着毯子敲键盘。他们做的事情在当时看来不太像互联网公司的主流打法:去各个平台找有表现力的年轻人,发私信,请他们来抖音发视频。

标准很模糊,但运营组自己总结了几条:脸要清楚,动作要干脆,音乐要能让人抖腿。一个从传统媒体跳过来的运营在周会上说,这跟选秀节目海选没什么区别,只是没有评委席。

算法团队那边是另一套语言。他们看的是留存曲线、互动率、人均使用时长。上线第一周的数据回来了,留存率不算难看,但也不惊艳。

真正让张一鸣在周会上多问了几句的,是一个细分指标:用户从打开应用到第一次滑动的平均时间。这个数字在抖音上明显低于今日头条。张一鸣问,为什么?算法团队的回答是,视频的消费门槛比图文低,用户不需要判断“要不要读”,手指自己会动。张一鸣没有再追问,但朱文佳注意到,他在笔记本上写了一个词,然后圈了起来。散会后朱文佳经过他身边,瞥见那个词是“惯性”。

运营团队很快发现了算法的惯性。他们推上去的“精选视频”,有些在人工看来质量平平,但数据表现极好。一条视频里,一个男生在宿舍地板上模仿各种动物的走路姿势,镜头晃得厉害,光线也差,但完播率超过百分之八十。

运营组内部讨论过要不要把它从推荐池里降权。有人反对,理由是“用户用脚投票了”。有人支持,理由是“这种东西多了,社区就变成马戏团了”。争论没有结论,因为第二天数据又涨了。那条视频被算法自动加推,曝光量翻了四倍。

这是朱文佳第一次明确感受到,算法和运营在做两套不同的判断。运营判断的是“这条内容是否符合我们想要的气质”,算法判断的是“这条内容是否能留住用户”。在抖音上线初期,这两套判断大部分时候是重合的,因为“留住用户”本身就意味着内容要有吸引力。但裂缝已经开始出现。一条低质但高完播的视频,就是一个信号。

张一鸣在那段时间的周会上反复讲一个逻辑:先有规模,再有调性。他的原话后来被团队简化成一句内部口号:“先让水涨起来,再修堤坝。”

这句话在运营组内部引起过私下讨论。一个运营在午饭时说,水涨起来之后,堤坝修在哪里就由不得我们了。另一个人说,那也得先有水。讨论没有上升到正式会议,因为所有人都知道,数据在涨。日活从几万到几十万,只用了几周。

增长曲线开始抬头,像一根被压了很久的弹簧终于松开。真正让团队意识到“共振”正在发生的,是2016年秋天的一个周一。运营组照例复盘上周数据,发现一个奇怪的现象:用户上传视频的数量增速,超过了日活增速。这意味着不只是更多人在看,更多人在拍。

拍的人越多,内容供给越丰富;内容越丰富,算法能匹配的颗粒度越细;匹配越细,用户停留越长;停留越长,拍的人越多。这个循环在内部被称作“飞轮”,但当时还没有人用这个词。朱文佳在周报里写了一句:“内容供给开始自驱。”张一鸣在这句话下面画了一道线。

但自驱的另一面是失控。运营组发现,他们精心策划的“音乐挑战”活动,效果往往不如算法自然推起来的一个梗。一个女孩用同一段音乐拍了七条不同场景的视频,每条都有几十万播放。运营组没有人认识她,也没有人联系过她。她是被算法从某个角落捞出来的。

运营负责人开始感到一种微妙的不安:他们花力气做的运营动作,正在被算法的自动分发稀释。人工干预的边际效益在下降。他把这个观察写进了给梁汝波的邮件里,标题是“关于运营杠杆率的思考”。梁汝波回复了四个字:“继续观察。”

朱文佳在那段时间频繁往返于算法团队和运营团队之间。他的角色像一个翻译,把运营的语言翻译成算法的参数,再把算法的逻辑翻译成运营能理解的话。但他发现,翻译本身就是一种损耗。运营说“这条视频调性不对”,算法听到的是“降低这类特征的权重”;算法说“这个特征的相关性在上升”,运营听到的是“又要推那种东西了”。两边都没有错,但两边说的不是同一件事。朱文佳开始意识到,产品正在变成一个他需要不断解释的东西,而不是一个他可以直接感受的东西。

版权问题在这时候浮出水面。抖音早期的音乐使用方式,在法律上处于一片模糊地带。用户上传视频时配的背景音乐,大部分是未经授权的商业歌曲。法务团队在内部会议上提过风险,但当时的优先级排在增长之后。

一个法务同事在走廊里对朱文佳说,你们现在是在高速公路上换轮胎。朱文佳没有回应,因为他知道这句话是对的,但他也知道,车不能停。停下来的代价,可能比爆胎更大。张一鸣在那次会议上说了什么,后来有不同版本的回忆。

一个版本是,他问了一个问题:“如果版权问题明天爆发,我们的用户会走吗?”没有人能回答。另一个版本是,他说“先跑,出了问题我负责”。两个版本都指向同一个事实:在那个时间点,增长是压倒一切的优先级。版权风险被记在账上,但没有人知道利息会是多少。

算法对“人”的理解,也在那段时间暴露出裂缝。一个用户连续三天在深夜刷抖音,每次停留超过两小时。算法把他标记为“高活跃用户”,给他推了更多视频。但运营团队从另一个渠道得知,这个用户那几天在社交媒体上发帖说“睡不着,刷抖音刷到天亮”。算法看到的是“停留时长”,人看到的是“失眠”。朱文佳在内部会上提到这个案例,讨论的结论是:算法没有错,它只是不理解“人”的语境。但“不理解”本身就是一个问题,因为产品正在用算法定义什么是“好内容”,而算法的定义里没有“对用户好不好”这一项。

这些问题在增长数据面前,显得不那么紧迫。日活突破百万的那天,团队在办公室里开了一瓶酒。

有人拍了照片,照片里张一鸣站在人群后面,手里拿着杯子,但没有笑。朱文佳注意到,他看的是手机屏幕,上面是实时数据后台。那个画面后来被团队内部反复提起,但每次提起的解读都不一样。有人说那是专注,有人说那是焦虑。朱文佳自己的解读是:张一鸣在那一刻已经在想下一个百万了。

运营团队开始感到一种身份危机。他们的工作从“策划内容”变成了“配合算法”。一个运营在离职前的最后一周,做了一份文档,标题是“我们还需要运营吗”。文档里列举了算法自动分发对人工运营的替代效应,结论是悲观的。这份文档没有公开,但在运营组内部传阅过。

朱文佳看过之后,在文档末尾加了一行批注:“算法解决效率,运营解决意义。”这行批注后来被删掉了,因为没有人知道“意义”在数据报表里怎么体现。热账的第一笔复利,出现在用户增长曲线的陡峭段。算法推荐的效率越高,用户停留越长,内容供给越多,整个系统就越转越快。

这个循环本身是健康的,但它有一个隐含的前提:算法捕捉的是用户“即时兴趣”,而不是用户“长期偏好”。即时兴趣可以被音乐、特效、颜值快速激发,但长期偏好需要内容有更深的价值。当系统越来越依赖即时兴趣来驱动增长时,内容生态就会向“刺激”倾斜,而不是向“价值”倾斜。这个判断在当时只是朱文佳的一个直觉,他没有数据证明,也没有办法验证。他只是在某个深夜,刷了半小时抖音之后,感到一种奇怪的疲惫。那种疲惫不是来自内容本身,而是来自内容的同质化。他关掉应用,打开备忘录,写了一句:“算法在理解我,但它在理解的是我的哪一部分?”

这句话后来被他删掉了。因为第二天早上,数据又涨了。运营团队开始尝试用人工干预来对冲算法的偏向。他们建立了一个“精选池”,把人工判断为优质的内容放进一个独立的推荐队列,给予更高的曝光权重。这个做法在初期有效,精选池里的内容完播率和互动率都不错。但问题很快出现:精选池的规模有限,无法覆盖所有优质内容;而且人工判断的标准不统一,不同运营的审美偏好不同,导致精选池的内容风格摇摆。更关键的是,当精选池的内容和算法推荐的内容同时出现在用户信息流里时,用户很难分辨两者的区别。精选池成了一个内部标签,对用户没有意义。

朱文佳在一次跨部门会上提出了一个更根本的问题:如果算法推荐的内容用户更喜欢,那运营的“精选”到底是在服务用户,还是在服务运营自己的审美?这个问题让会议室安静了几秒。没有人能回答,因为回答它就等于承认,运营的价值判断在数据面前缺乏合法性。梁汝波最后说了一句话:“运营不是选内容,是定规则。”这句话后来被写进了运营团队的内部手册,但具体怎么定规则,没有人给出答案。

规则的定义权,正在从运营团队手中滑向算法团队。算法团队掌握着参数的调整权,而参数的调整直接影响内容的曝光分布。运营团队可以提建议,但最终决定权在算法那边。这种权力结构的变化不是通过正式文件完成的,而是在一次次周会、一次次数据复盘、一次次“先跑数据”的决策中逐渐形成的。朱文佳意识到这一点的时候,已经很难说清楚是从哪一天开始的。他只知道,运营团队的人越来越频繁地使用一个词:“能不能让算法那边试试。”

张一鸣在那段时间的一次内部讲话中,提到了一个观点:产品经理的职责不是设计功能,而是设计“用户行为的可能性”。这句话被算法团队理解为“让算法去发现用户行为”,被运营团队理解为“让运营去引导用户行为”。两种理解都有道理,但偏向不同。算法团队更倾向于让数据说话,运营团队更倾向于让人说话。张一鸣没有明确支持哪一方,但他的决策习惯——先看数据,再看逻辑,最后看直觉——让算法团队在大多数争论中占据优势。因为数据总是先到。

2016年底,抖音的日活数据已经稳定在一个让投资人兴奋的区间。团队开始筹备春节后的推广计划。运营团队提交了一份方案,核心是“音乐挑战赛”,通过明星和头部用户带动普通用户参与。算法团队提交了另一份方案,核心是“优化冷启动推荐”,让新用户更快找到自己喜欢的内容。

两份方案在预算和资源上有重叠,需要取舍。张一鸣在决策会上问了两个问题:哪个方案能带来更高的留存?哪个方案能带来更快的增长?

运营方案的答案是“留存更高,因为挑战赛的内容有主题,用户参与后更容易形成社区感”。算法方案的答案是“增长更快,因为冷启动优化直接降低新用户流失率”。

张一鸣选择了算法方案。这个决定在运营团队内部引起了不小的震动。一个运营在会后说,我们做了半年的内容策划,最后不如调几个参数。这句话传到了朱文佳耳朵里,他没有转述给张一鸣。

但他自己在那个晚上想了很多。他想到的是,算法方案之所以被选中,不是因为算法团队更会说服人,而是因为算法方案的数据逻辑更清晰,更容易被验证。运营方案的价值——社区感、主题性、用户参与——很难在短期内用数据量化。在增长压力面前,不可量化的价值天然处于劣势。

这是热账的坏账部分。每一次“不可量化”的价值被搁置,都会在团队的集体心理上留下一道痕迹。运营团队开始学会用算法能理解的语言来包装自己的方案,比如把“社区感”翻译成“用户互动频次”,把“内容调性”翻译成“特征权重分布”。

这种翻译让运营方案更容易通过,但也让运营团队逐渐失去了自己的语言。朱文佳后来回忆,那段时间他感觉团队在“用别人的语法写自己的句子”。

春节前的最后一周,抖音的日活曲线出现了一个小幅回落。运营团队归因为“节日效应”,算法团队归因为“内容供给波动”。两个归因都有道理,但解决方案不同。运营团队建议加大节日主题内容的运营力度,算法团队建议优化推荐模型的时间衰减参数。

张一鸣在周会上说,两个都做。但资源是有限的,两个都做意味着两个都做不透。朱文佳在会后找到梁汝波,说这样下去团队会分裂成两套逻辑。梁汝波说,分裂不是问题,问题是分裂之后能不能合回来。

春节假期,抖音的数据没有像团队担心的那样继续回落,反而在假期中段开始反弹。反弹的原因后来被归为“用户社交场景增加,内容生产意愿上升”。算法捕捉到了这个变化,自动调整了推荐策略,把更多带有社交场景的视频推给了用户。运营团队在假期结束后复盘时发现,他们策划的春节主题内容,在算法推荐中的占比不到百分之十五。

剩下的百分之八十五,是算法自己发现的。运营负责人把这份复盘报告发给了梁汝波,没有附任何评论。梁汝波转发给了张一鸣,附了一句话:“运营的杠杆在变短。”

这句话后来被朱文佳记住了。他意识到,杠杆变短意味着运营团队要用更少的资源撬动更大的结果,而算法团队的杠杆在变长。这种不对称会持续加剧,直到运营团队找到新的价值定位,或者被算法完全替代。

但“替代”这个词在当时是禁忌,没有人敢在正式会议上说。大家用的词是“协同”。协同的真相是,算法团队在定义什么是“好内容”,运营团队在执行“好内容”的生产和分发。定义权在算法那边,执行权在运营这边。这种分工在效率上是最优的,但在心理上是不平衡的。运营团队的人开始感到一种“被工具化”的焦虑。

他们不再是内容的创造者,而是算法的执行者。一个运营在内部问卷里写:“我像一个给算法打工的人。”这份问卷没有公开,但朱文佳看到了。他在问卷末尾写了一句批注:“算法也是给人打工的。”这句话他没有给任何人看。

热账的复利在增长数据中体现得越来越明显。用户越多,数据越多,算法越准,用户越多。这个循环的转速在加快,团队的工作节奏也在加快。

周会从一周一次变成一周两次,数据复盘从每周变成每天。运营团队开始实行早晚班,算法团队开始实行轮值。有人在办公室放了行军床,有人在工位上贴了“今天不睡”的纸条。

张一鸣在那段时间的一次全员会上说了一句话:“我们不是在做一个产品,我们是在做一个系统。”这句话被团队理解为“系统比产品更重要”,也被理解为“个人比系统更渺小”。

朱文佳在那段时间的日记里写了一段话,后来被他撕掉了。他记得自己写的是:算法在理解人,但人在被算法重新定义。运营在定义内容,但内容在被算法重新排序。我们在造一个浪,但浪在决定我们的形状。

这段话没有留下证据,但它解释了朱文佳后来的一系列选择。他开始更多地参与算法团队的讨论,试图理解参数背后的逻辑。他也开始更多地和运营团队吃饭,听他们讲内容策划的细节。他像一个在两个部落之间穿梭的人,试图找到一种共同的语言。但他发现,共同语言的前提是共同的目标。

当算法团队的目标是“增长”,运营团队的目标是“调性”时,共同语言就只能是“先增长,再调性”。而“再调性”的那一天,似乎永远不会到来。因为增长本身会不断制造新的增长压力。

春节后的数据反弹,让团队对2017年有了更高的期待。张一鸣在一次战略会上提出了一个目标:年内日活翻十倍。这个目标在算法团队看来是可行的,因为推荐模型的优化空间还很大。在运营团队看来是激进的,因为内容供给的增速跟不上用户增速。

但没有人公开反对,因为数据在涨,涨势在加速。朱文佳在会后算了一笔账:如果日活翻十倍,内容供给至少要翻五倍,而内容供给的瓶颈不在算法,在人。人需要时间拍摄、剪辑、上传,而算法不需要。算法可以在一秒内处理一万条视频,但人不能在一秒内生产一万条视频。这个瓶颈在春节期间没有暴露,因为假期有大量用户有闲暇时间生产内容。

但假期结束后,内容供给的增速开始放缓。算法团队发现,推荐池里的“新鲜内容”占比在下降。运营团队发现,用户上传视频的积极性在下降。

两个团队同时向张一鸣汇报了这个问题,但归因不同。算法团队说,推荐模型对“新鲜内容”的权重不够,导致老内容挤占了新内容的曝光。运营团队说,用户缺乏生产内容的动力,因为平台没有给他们足够的反馈和激励。张一鸣听完两个汇报,说了一句话:“那就让算法给新内容更多机会。”

这个决定在算法团队内部引发了争论。一部分人认为,给新内容更多机会会降低推荐准确率,因为新内容缺乏用户行为数据,算法无法判断它是否适合推荐。另一部分人认为,如果不给新内容机会,内容池就会枯竭,最终影响用户留存。

争论的结果是,算法团队设计了一个“探索机制”,在推荐结果中留出一定比例的席位给新内容,用探索来换取内容的多样性。这个机制在后来被不断优化,成为抖音推荐系统的一个核心组件。但在当时,它只是一个为了应对内容供给瓶颈的临时方案。

运营团队对这个机制的反应是复杂的。一方面,它缓解了内容供给的压力,让更多新用户有机会被看到。另一方面,它让运营团队更加边缘化,因为内容的曝光分配完全由算法决定,运营的“精选”变得更加无关紧要。一个运营在私下说,我们现在连“选”的权利都没有了,只剩下“推”的义务。

朱文佳在那段时间开始频繁做一个梦。梦里他站在一个巨大的传送带旁边,传送带上源源不断地流过视频。他伸手去抓,但抓不住。

传送带的速度越来越快,他不得不跑起来。跑着跑着,他发现传送带上的视频变成了他认识的人——同事、朋友、他自己。他想停下来,但传送带没有停。

这个梦他后来在团队的一次团建活动中提过,但用的是玩笑的语气。没有人当真,但他自己知道,那个梦里的焦虑是真实的。

焦虑的来源不是增长本身,而是增长的方式。抖音的增长高度依赖算法对用户即时兴趣的捕捉,这意味着内容生态会向“刺激”倾斜。刺激的内容更容易被算法识别和推荐,也更容易被用户消费。但刺激的内容不一定是有价值的内容,甚至不一定是有意义的内容。

运营团队试图用“精选池”和“主题挑战”来对冲这种倾斜,但效果有限,因为算法的推荐量级远大于运营的干预量级。

朱文佳开始意识到,这不是一个可以通过技术手段解决的问题,而是一个需要价值判断的问题。但价值判断在算法系统里没有位置,因为算法只处理“相关性”,不处理“意义”。这个认识让他感到一种无力。他在一次深夜加班后,走到会议室的白板前,看着那行已经被擦得模糊的红字。

那是梁汝波在项目启动时写的:“音乐响起的时刻,世界会安静下来。”朱文佳拿起马克笔,在红字下面画了一条线,然后写了一个日期。日期下面又写了一行字:“世界没有安静。”

他放下笔,退后两步,看着白板。红字、黑线、日期、新字,从上到下排成一列。他关掉会议室的灯,走出去。

走廊里没有人,只有头顶的灯管发出持续的嗡鸣。他走到电梯口,按下按钮。电梯门打开的时候,里面是空的。他走进去,按下了一楼。电梯下行,数字从十二跳到十一,跳到十。他想起那个晚上,张一鸣站在这个电梯里,说“不急”。现在,一切都太快了。数据在涨,用户在涨,内容在涨,压力也在涨。

运营团队开始有人离职,理由大多是“个人发展”。但朱文佳知道,真正的原因是“价值感缺失”。他们不再觉得自己在创造什么,而是在维护一个系统。算法团队也开始有人感到疲惫,因为参数的优化空间在收窄,每一次提升都需要更多的数据和算力。增长不再是“从零到一”的兴奋,而是“从一到一百”的重复。

有人在内部论坛上发帖问:“我们到底在做什么?”这个帖子很快被删除了,但问题留在了很多人的心里。

张一鸣在那段时间的一次内部讲话中,提到了“延迟满足感”。他说,字节跳动的核心竞争力不是算法,也不是产品,而是一群愿意延迟满足的人。

这句话在团队内部引起了不同的解读。有人认为这是对长期主义的强调,有人认为这是对当前压力的合理化。朱文佳自己的解读是:张一鸣在提醒团队,不要被短期的数据迷惑,要看长期的价值。但“长期的价值”是什么,张一鸣没有说。也许他自己也在寻找。

热账的复利和坏账,在2017年春天同时显现。复利是增长数据,坏账是团队的心理消耗。增长数据让公司获得了更多的资源和机会,心理消耗让团队失去了最初的凝聚力和热情。

朱文佳在一次和梁汝波的单独谈话中,提到了“人的温度”这个词。梁汝波沉默了一会儿,说:“温度是需要燃料的。”朱文佳问:“燃料是什么?”梁汝波没有回答。也许燃料就是那些被否决的方案,那些深夜的沉默,那些重新站起来的瞬间。

但这些燃料在燃烧之后,留下的是灰烬还是光,没有人知道。抖音的第一波浪潮,在数据上是一个成功的故事。日活从零到百万,从百万到千万,曲线陡峭得让人眩晕。但在团队内部,这波浪潮留下了一个未解的问题:当算法越来越懂用户的时候,我们是否还懂自己在做什么?

运营团队的控制力在下降,算法团队的权威在上升。这种权力转移不是通过斗争完成的,而是通过一次次“先跑数据”的决策自然形成的。没有人反对,因为数据在涨。但数据在涨的同时,团队的初心在模糊。

朱文佳在那年春天的某个下午,独自坐在办公室里,打开抖音,刷了十分钟。他看到了音乐、舞蹈、搞笑、美食、旅行。内容很丰富,算法很精准。但他感到一种奇怪的陌生感。这个产品是他参与打造的,但他已经不太认识它了。

他关掉应用,打开备忘录,写了一句:“音乐响起的时刻,世界没有安静。世界在加速。”他没有删掉这句话。

窗外,杨絮还在飘。像某种被算法忽略的噪声,也像某种被增长掩盖的裂缝。裂缝在扩大,但没有人停下来看。因为数据在涨。涨势掩盖了一切。